+import type { AsyncResource } from 'node:async_hooks'
import type { EventLoopUtilization } from 'node:perf_hooks'
import type { MessagePort, TransferListItem } from 'node:worker_threads'
-import type { KillBehavior } from './worker/worker-options'
+
+import type { WorkerChoiceStrategy } from './pools/selection-strategies/selection-strategies-types.js'
+import type { KillBehavior } from './worker/worker-options.js'
/**
* Worker error.
- *
* @typeParam Data - Type of data sent to the worker triggering an error. This can only be structured-cloneable data.
*/
export interface WorkerError<Data = unknown> {
/**
* Task performance.
- *
* @internal
*/
export interface TaskPerformance {
/**
* Worker task performance statistics computation settings.
- *
* @internal
*/
export interface WorkerStatistics {
readonly elu: boolean
}
+/**
+ * Task function properties.
+ */
+export interface TaskFunctionProperties {
+ /**
+ * Task function name.
+ */
+ readonly name: string
+ /**
+ * Task function priority. Lower values have higher priority.
+ */
+ readonly priority?: number
+ /**
+ * Task function worker choice strategy.
+ */
+ readonly strategy?: WorkerChoiceStrategy
+}
+
/**
* Message object that is passed as a task between main worker and worker.
- *
* @typeParam Data - Type of data sent to the worker. This can only be structured-cloneable data.
* @internal
*/
export interface Task<Data = unknown> {
- /**
- * Worker id.
- */
- readonly workerId?: number
/**
* Task name.
*/
* Task input data that will be passed to the worker.
*/
readonly data?: Data
+ /**
+ * Task priority. Lower values have higher priority.
+ * @defaultValue 0
+ */
+ readonly priority?: number
+ /**
+ * Task worker choice strategy.
+ */
+ readonly strategy?: WorkerChoiceStrategy
/**
* Array of transferable objects.
*/
- readonly transferList?: TransferListItem[]
+ readonly transferList?: readonly TransferListItem[]
/**
* Timestamp.
*/
/**
* Task UUID.
*/
- readonly taskId?: string
+ readonly taskId?: `${string}-${string}-${string}-${string}-${string}`
}
/**
* Message object that is passed between main worker and worker.
- *
* @typeParam Data - Type of data sent to the worker or execution response. This can only be structured-cloneable data.
* @typeParam ErrorData - Type of data sent to the worker triggering an error. This can only be structured-cloneable data.
* @internal
*/
export interface MessageValue<Data = unknown, ErrorData = unknown>
extends Task<Data> {
+ /**
+ * Worker id.
+ */
+ readonly workerId?: number
/**
* Kill code.
*/
/**
* Task function operation:
* - `'add'` - Add a task function.
- * - `'delete'` - Delete a task function.
+ * - `'remove'` - Remove a task function.
* - `'default'` - Set a task function as default.
*/
readonly taskFunctionOperation?: 'add' | 'remove' | 'default'
*/
readonly taskFunctionOperationStatus?: boolean
/**
- * Task function serialized to string.
+ * Task function properties.
*/
- readonly taskFunction?: string
+ readonly taskFunctionProperties?: TaskFunctionProperties
/**
- * Task function name.
+ * Task function serialized to string.
*/
- readonly taskFunctionName?: string
+ readonly taskFunction?: string
/**
- * Task function names.
+ * Task functions properties.
*/
- readonly taskFunctionNames?: string[]
+ readonly taskFunctionsProperties?: TaskFunctionProperties[]
/**
* Whether the worker computes the given statistics or not.
*/
/**
* An object holding the task execution response promise resolve/reject callbacks.
- *
* @typeParam Response - Type of execution response. This can only be structured-cloneable data.
* @internal
*/
* The worker node key executing the task.
*/
readonly workerNodeKey: number
+ /**
+ * The asynchronous resource used to track the task execution.
+ */
+ readonly asyncResource?: AsyncResource
}
export type Writable<T> = { -readonly [P in keyof T]: T[P] }