type WorkerOptions
} from './worker-options'
import type {
+ TaskAsyncFunction,
+ TaskFunction,
TaskFunctions,
- WorkerAsyncFunction,
- WorkerFunction,
- WorkerSyncFunction
-} from './worker-functions'
+ TaskSyncFunction
+} from './task-functions'
const DEFAULT_MAX_INACTIVE_TIME = 60000
const DEFAULT_KILL_BEHAVIOR: KillBehavior = KillBehaviors.SOFT
/**
* Task function(s) processed by the worker when the pool's `execution` function is invoked.
*/
- protected taskFunctions!: Map<string, WorkerFunction<Data, Response>>
+ protected taskFunctions!: Map<string, TaskFunction<Data, Response>>
/**
* Timestamp of the last task processed by this worker.
*/
type: string,
protected readonly isMain: boolean,
private readonly mainWorker: MainWorker,
- taskFunctions:
- | WorkerFunction<Data, Response>
- | TaskFunctions<Data, Response>,
+ taskFunctions: TaskFunction<Data, Response> | TaskFunctions<Data, Response>,
protected readonly opts: WorkerOptions = {
/**
* The kill behavior option on this worker or its default value.
* @param taskFunctions - The task function(s) parameter that should be checked.
*/
private checkTaskFunctions (
- taskFunctions:
- | WorkerFunction<Data, Response>
- | TaskFunctions<Data, Response>
+ taskFunctions: TaskFunction<Data, Response> | TaskFunctions<Data, Response>
): void {
if (taskFunctions == null) {
throw new Error('taskFunctions parameter is mandatory')
}
- this.taskFunctions = new Map<string, WorkerFunction<Data, Response>>()
+ this.taskFunctions = new Map<string, TaskFunction<Data, Response>>()
if (typeof taskFunctions === 'function') {
const boundFn = taskFunctions.bind(this)
this.taskFunctions.set(DEFAULT_TASK_NAME, boundFn)
*/
public addTaskFunction (
name: string,
- fn: WorkerFunction<Data, Response>
+ fn: TaskFunction<Data, Response>
): boolean {
if (typeof name !== 'string') {
throw new TypeError('name parameter is not a string')
* @returns The names of the worker's task functions.
*/
public listTaskFunctions (): string[] {
- return Array.from(this.taskFunctions.keys())
+ return [...this.taskFunctions.keys()]
}
/**
try {
this.taskFunctions.set(
DEFAULT_TASK_NAME,
- this.taskFunctions.get(name) as WorkerFunction<Data, Response>
+ this.taskFunctions.get(name) as TaskFunction<Data, Response>
)
return true
} catch {
* @param message - The received message.
*/
protected messageListener (message: MessageValue<Data>): void {
- if (message.workerId === this.id) {
+ if (message.workerId != null && message.workerId !== this.id) {
+ throw new Error('Message worker id does not match worker id')
+ } else if (message.workerId === this.id) {
if (message.statistics != null) {
// Statistics message received
this.statistics = message.statistics
!this.isMain && message.checkActive
? this.startCheckActive()
: this.stopCheckActive()
- } else if (message.id != null && message.data != null) {
+ } else if (message.taskId != null && message.data != null) {
// Task message received
this.run(message)
} else if (message.kill === true) {
* @param task - Input data for the task function.
*/
protected runSync (
- fn: WorkerSyncFunction<Data, Response>,
+ fn: TaskSyncFunction<Data, Response>,
task: Task<Data>
): void {
try {
data: res,
taskPerformance,
workerId: this.id,
- id: task.id
+ taskId: task.taskId
})
} catch (e) {
const errorMessage = this.handleError(e as Error | string)
data: task.data
},
workerId: this.id,
- id: task.id
+ taskId: task.taskId
})
} finally {
this.updateLastTaskTimestamp()
* @param task - Input data for the task function.
*/
protected runAsync (
- fn: WorkerAsyncFunction<Data, Response>,
+ fn: TaskAsyncFunction<Data, Response>,
task: Task<Data>
): void {
let taskPerformance = this.beginTaskPerformance(task.name)
data: res,
taskPerformance,
workerId: this.id,
- id: task.id
+ taskId: task.taskId
})
return null
})
data: task.data
},
workerId: this.id,
- id: task.id
+ taskId: task.taskId
})
})
.finally(() => {
* @returns The task function.
* @throws {@link https://nodejs.org/api/errors.html#class-error} If the task function is not found.
*/
- private getTaskFunction (name?: string): WorkerFunction<Data, Response> {
+ private getTaskFunction (name?: string): TaskFunction<Data, Response> {
name = name ?? DEFAULT_TASK_NAME
const fn = this.taskFunctions.get(name)
if (fn == null) {