refactor: check addTaskFunction() arguments
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 18 Sep 2023 21:35:56 +0000 (23:35 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 18 Sep 2023 21:35:56 +0000 (23:35 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
src/pools/abstract-pool.ts
src/pools/pool.ts
tests/pools/abstract/abstract-pool.test.js

index 779d2b59017c4493d3e4dba12f71ae347f6b1ba6..1bd5ee2cc73152e912cc08ecc3492f8e4a9ae6b7 100644 (file)
@@ -846,13 +846,22 @@ export abstract class AbstractPool<
   /** @inheritDoc */
   public async addTaskFunction (
     name: string,
-    taskFunction: TaskFunction<Data, Response>
+    fn: TaskFunction<Data, Response>
   ): Promise<boolean> {
-    this.taskFunctions.set(name, taskFunction)
+    if (typeof name !== 'string') {
+      throw new TypeError('name argument must be a string')
+    }
+    if (typeof name === 'string' && name.trim().length === 0) {
+      throw new TypeError('name argument must not be an empty string')
+    }
+    if (typeof fn !== 'function') {
+      throw new TypeError('fn argument must be a function')
+    }
+    this.taskFunctions.set(name, fn)
     return await this.sendTaskFunctionOperationToWorkers({
       taskFunctionOperation: 'add',
       taskFunctionName: name,
-      taskFunction: taskFunction.toString()
+      taskFunction: fn.toString()
     })
   }
 
index 212253ffbc5be7faff8760dc3847f9cdc486bb89..7efb3808fa8e02ae6c294665461453c48e1a8451 100644 (file)
@@ -273,12 +273,12 @@ export interface IPool<
    * If a task function with the same name already exists, it will be overwritten.
    *
    * @param name - The name of the task function.
-   * @param taskFunction - The task function.
+   * @param fn - The task function.
    * @returns `true` if the task function was added, `false` otherwise.
    */
   readonly addTaskFunction: (
     name: string,
-    taskFunction: TaskFunction<Data, Response>
+    fn: TaskFunction<Data, Response>
   ) => Promise<boolean>
   /**
    * Removes a task function from this pool.
index e9cca73255a77681fb76a4d3bb97e0590399c14e..99ebbfa1b9c930a2dd6182e517c71f2f23ef2d35 100644 (file)
@@ -1280,6 +1280,20 @@ describe('Abstract pool test suite', () => {
       './tests/worker-files/thread/testWorker.js'
     )
     await waitPoolEvents(dynamicThreadPool, PoolEvents.ready, 1)
+    await expect(
+      dynamicThreadPool.addTaskFunction(0, () => {})
+    ).rejects.toThrowError(new TypeError('name argument must be a string'))
+    await expect(
+      dynamicThreadPool.addTaskFunction('', () => {})
+    ).rejects.toThrowError(
+      new TypeError('name argument must not be an empty string')
+    )
+    await expect(
+      dynamicThreadPool.addTaskFunction('test', 0)
+    ).rejects.toThrowError(new TypeError('fn argument must be a function'))
+    await expect(
+      dynamicThreadPool.addTaskFunction('test', '')
+    ).rejects.toThrowError(new TypeError('fn argument must be a function'))
     expect(dynamicThreadPool.listTaskFunctionNames()).toStrictEqual([
       DEFAULT_TASK_NAME,
       'test'