build(deps-dev): apply updates
[poolifier.git] / src / worker / abstract-worker.ts
index 890f340e69a63ac1bce217ecafa0ae5191febae1..12307f47c07ba019ca2da01f9547b633cfc64e03 100644 (file)
@@ -1,6 +1,7 @@
 import type { Worker } from 'node:cluster'
-import type { MessagePort } from 'node:worker_threads'
 import { performance } from 'node:perf_hooks'
+import type { MessagePort } from 'node:worker_threads'
+
 import type {
   MessageValue,
   Task,
@@ -13,7 +14,6 @@ import {
   isAsyncFunction,
   isPlainObject
 } from '../utils.js'
-import { KillBehaviors, type WorkerOptions } from './worker-options.js'
 import type {
   TaskAsyncFunction,
   TaskFunction,
@@ -26,6 +26,7 @@ import {
   checkValidTaskFunctionEntry,
   checkValidWorkerOptions
 } from './utils.js'
+import { KillBehaviors, type WorkerOptions } from './worker-options.js'
 
 const DEFAULT_MAX_INACTIVE_TIME = 60000
 const DEFAULT_WORKER_OPTIONS: WorkerOptions = {
@@ -127,7 +128,7 @@ export abstract class AbstractWorker<
       this.taskFunctions.set(DEFAULT_TASK_NAME, boundFn)
       this.taskFunctions.set(
         typeof taskFunctions.name === 'string' &&
-        taskFunctions.name.trim().length > 0
+          taskFunctions.name.trim().length > 0
           ? taskFunctions.name
           : 'fn1',
         boundFn
@@ -241,8 +242,8 @@ export abstract class AbstractWorker<
    * @returns The names of the worker's task functions.
    */
   public listTaskFunctionNames (): string[] {
-    const names: string[] = [...this.taskFunctions.keys()]
-    let defaultTaskFunctionName: string = DEFAULT_TASK_NAME
+    const names = [...this.taskFunctions.keys()]
+    let defaultTaskFunctionName = DEFAULT_TASK_NAME
     for (const [name, fn] of this.taskFunctions) {
       if (
         name !== DEFAULT_TASK_NAME &&
@@ -325,26 +326,28 @@ export abstract class AbstractWorker<
     message: MessageValue<Data>
   ): void {
     const { taskFunctionOperation, taskFunctionName, taskFunction } = message
-    let response!: TaskFunctionOperationResult
+    if (taskFunctionName == null) {
+      throw new Error(
+        'Cannot handle task function operation message without a task function name'
+      )
+    }
+    let response: TaskFunctionOperationResult
     switch (taskFunctionOperation) {
       case 'add':
         response = this.addTaskFunction(
-          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-          taskFunctionName!,
-          // eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func, @typescript-eslint/no-non-null-assertion
-          new Function(`return ${taskFunction!}`)() as TaskFunction<
+          taskFunctionName,
+          // eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func
+          new Function(`return ${taskFunction}`)() as TaskFunction<
           Data,
           Response
           >
         )
         break
       case 'remove':
-        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-        response = this.removeTaskFunction(taskFunctionName!)
+        response = this.removeTaskFunction(taskFunctionName)
         break
       case 'default':
-        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-        response = this.setDefaultTaskFunction(taskFunctionName!)
+        response = this.setDefaultTaskFunction(taskFunctionName)
         break
       default:
         response = { status: false, error: new Error('Unknown task operation') }
@@ -357,8 +360,7 @@ export abstract class AbstractWorker<
       ...(!response.status &&
         response.error != null && {
         workerError: {
-          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-          name: taskFunctionName!,
+          name: taskFunctionName,
           message: this.handleError(response.error as Error | string)
         }
       })
@@ -567,7 +569,7 @@ export abstract class AbstractWorker<
         })
         return undefined
       })
-      .catch(error => {
+      .catch((error: unknown) => {
         this.sendToMainWorker({
           workerError: {
             // eslint-disable-next-line @typescript-eslint/no-non-null-assertion