refactor: explicity extends Task for MessageValue type
authorJérôme Benoit <jerome.benoit@sap.com>
Tue, 11 Apr 2023 22:42:22 +0000 (00:42 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Tue, 11 Apr 2023 22:42:22 +0000 (00:42 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
16 files changed:
.eslintrc.js
src/pools/abstract-pool.ts
src/pools/cluster/dynamic.ts
src/pools/cluster/fixed.ts
src/pools/pool.ts
src/pools/selection-strategies/abstract-worker-choice-strategy.ts
src/pools/selection-strategies/fair-share-worker-choice-strategy.ts
src/pools/selection-strategies/less-busy-worker-choice-strategy.ts
src/pools/selection-strategies/less-used-worker-choice-strategy.ts
src/pools/selection-strategies/round-robin-worker-choice-strategy.ts
src/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.ts
src/pools/selection-strategies/worker-choice-strategy-context.ts
src/pools/thread/dynamic.ts
src/pools/thread/fixed.ts
src/pools/worker.ts
src/utility-types.ts

index ae288a7c0ae81acc761208fa7045df0dce0e5eef..cc27eee78dd9cc582522dd315e640b7161e2c335 100644 (file)
@@ -46,6 +46,7 @@ module.exports = defineConfig({
           'ecma',
           'enqueue',
           'enum',
+          'errored',
           'esm',
           'fibonacci',
           'fs',
index b95d16b4b80259b5cb89d0e3c7717d31767e4d4c..9f7813e74cd7bd2579081ef9fd83facef0c59fdf 100644 (file)
@@ -27,7 +27,7 @@ import { CircularArray } from '../circular-array'
  *
  * @typeParam Worker - Type of worker which manages this pool.
  * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
- * @typeParam Response - Type of response of execution. This can only be serializable data.
+ * @typeParam Response - Type of execution response. This can only be serializable data.
  */
 export abstract class AbstractPool<
   Worker extends IWorker,
@@ -261,7 +261,7 @@ export abstract class AbstractPool<
       id: crypto.randomUUID()
     }
     const res = new Promise<Response>((resolve, reject) => {
-      this.promiseResponseMap.set(submittedTask.id, {
+      this.promiseResponseMap.set(submittedTask.id as string, {
         resolve,
         reject,
         worker: workerNode.worker
index 78c63aca64d8da1e879c723bd0fd064f46de83ee..c42e02b0cbfc0fc2ea0b2cd53f200739650f8267 100644 (file)
@@ -9,7 +9,7 @@ import { FixedClusterPool } from './fixed'
  * When the maximum number of workers is reached and workers are busy, an event is emitted. If you want to listen to this event, use the pool's `emitter`.
  *
  * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
- * @typeParam Response - Type of response of execution. This can only be serializable data.
+ * @typeParam Response - Type of execution response. This can only be serializable data.
  * @author [Christopher Quadflieg](https://github.com/Shinigami92)
  * @since 2.0.0
  */
index faa68fc74ce96ece284bb953f53db02c47c154e9..ed4f6fed2826078bfdeac466bcec7e8c4c80bef5 100644 (file)
@@ -32,7 +32,7 @@ export interface ClusterPoolOptions extends PoolOptions<Worker> {
  * This pool selects the workers in a round robin fashion.
  *
  * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
- * @typeParam Response - Type of response of execution. This can only be serializable data.
+ * @typeParam Response - Type of execution response. This can only be serializable data.
  * @author [Christopher Quadflieg](https://github.com/Shinigami92)
  * @since 2.0.0
  */
index 17088559a32620f48175cb273bf709f6af817a90..4395712f801d3f69961eb6e57bbef6e333d6c713 100644 (file)
@@ -114,7 +114,7 @@ export interface PoolOptions<Worker extends IWorker> {
  *
  * @typeParam Worker - Type of worker which manages this pool.
  * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
- * @typeParam Response - Type of response of execution. This can only be serializable data.
+ * @typeParam Response - Type of execution response. This can only be serializable data.
  */
 export interface IPool<
   Worker extends IWorker,
index fd9cf1fb8b3f0499ed8c7615e805c1fc4ebffa31..ce7f9589ab5708975019706047b477f71007731f 100644 (file)
@@ -12,7 +12,7 @@ import type {
  *
  * @typeParam Worker - Type of worker which manages the strategy.
  * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
- * @typeParam Response - Type of response of execution. This can only be serializable data.
+ * @typeParam Response - Type of execution response. This can only be serializable data.
  */
 export abstract class AbstractWorkerChoiceStrategy<
   Worker extends IWorker,
index e1d123a994aa77f5d41ce10ccf2a4f3584b6c926..3f4e95249497897d0f718c4192880fecdc695129 100644 (file)
@@ -19,7 +19,7 @@ interface WorkerVirtualTaskTimestamp {
  *
  * @typeParam Worker - Type of worker which manages the strategy.
  * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
- * @typeParam Response - Type of response of execution. This can only be serializable data.
+ * @typeParam Response - Type of execution response. This can only be serializable data.
  */
 export class FairShareWorkerChoiceStrategy<
     Worker extends IWorker,
index d98732d66882a66e961a04dc49e4241ae5db6e7c..12e87ff2575649c6c1a9847d8dd24a9ad1e30f9a 100644 (file)
@@ -10,7 +10,7 @@ import type {
  *
  * @typeParam Worker - Type of worker which manages the strategy.
  * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
- * @typeParam Response - Type of response of execution. This can only be serializable data.
+ * @typeParam Response - Type of execution response. This can only be serializable data.
  */
 export class LessBusyWorkerChoiceStrategy<
     Worker extends IWorker,
index acf1e5036aeed44a7ae8f6d11394160b95aec10a..166de7069f60f32d1f396576fd8416e9ba87907d 100644 (file)
@@ -7,7 +7,7 @@ import type { IWorkerChoiceStrategy } from './selection-strategies-types'
  *
  * @typeParam Worker - Type of worker which manages the strategy.
  * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
- * @typeParam Response - Type of response of execution. This can only be serializable data.
+ * @typeParam Response - Type of execution response. This can only be serializable data.
  */
 export class LessUsedWorkerChoiceStrategy<
     Worker extends IWorker,
index eda00c7582e305a57c10318d2878c24045fe21fc..80e958a406fa2209ce1c20eded5b8e9b79e9ca0b 100644 (file)
@@ -7,7 +7,7 @@ import type { IWorkerChoiceStrategy } from './selection-strategies-types'
  *
  * @typeParam Worker - Type of worker which manages the strategy.
  * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
- * @typeParam Response - Type of response of execution. This can only be serializable data.
+ * @typeParam Response - Type of execution response. This can only be serializable data.
  */
 export class RoundRobinWorkerChoiceStrategy<
     Worker extends IWorker,
index f4bac5d76c4e3b669bb5720b99c03b07eabc577d..665022c79aebaf4596e306b7975aa7c0c7f3d923 100644 (file)
@@ -22,7 +22,7 @@ interface TaskRunTime {
  *
  * @typeParam Worker - Type of worker which manages the strategy.
  * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
- * @typeParam Response - Type of response of execution. This can only be serializable data.
+ * @typeParam Response - Type of execution response. This can only be serializable data.
  */
 export class WeightedRoundRobinWorkerChoiceStrategy<
     Worker extends IWorker,
index 34aa332e39677883c066c9bd823276e8e56e886c..91441ace5a58d8ca6756a21b679a3dd13b73df55 100644 (file)
@@ -19,7 +19,7 @@ import { WeightedRoundRobinWorkerChoiceStrategy } from './weighted-round-robin-w
  *
  * @typeParam Worker - Type of worker.
  * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
- * @typeParam Response - Type of response of execution. This can only be serializable data.
+ * @typeParam Response - Type of execution response. This can only be serializable data.
  */
 export class WorkerChoiceStrategyContext<
   Worker extends IWorker,
index 7bf477dd837c0ce3e30cb65ad308c32ca0774f48..bb177f876c79893b582989d67067b4ec448b2549 100644 (file)
@@ -10,7 +10,7 @@ import { FixedThreadPool } from './fixed'
  * When the maximum number of threads is reached and workers are busy, an event is emitted. If you want to listen to this event, use the pool's `emitter`.
  *
  * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
- * @typeParam Response - Type of response of execution. This can only be serializable data.
+ * @typeParam Response - Type of execution response. This can only be serializable data.
  * @author [Alessandro Pio Ardizio](https://github.com/pioardi)
  * @since 0.0.1
  */
index 764d5851d9be4d6cd9c52b2333b1348c50c803bf..3dc10821e2cdb9198e3eea62e287a4fc4d8aa425 100644 (file)
@@ -22,7 +22,7 @@ export type ThreadWorkerWithMessageChannel = Worker & Draft<MessageChannel>
  * This pool selects the threads in a round robin fashion.
  *
  * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
- * @typeParam Response - Type of response of execution. This can only be serializable data.
+ * @typeParam Response - Type of execution response. This can only be serializable data.
  * @author [Alessandro Pio Ardizio](https://github.com/pioardi)
  * @since 0.0.1
  */
index 3bb0ac9d66ef550f254b8535d3fd23d4f369a4f6..05b559850c3a16f4d682f25acaf42e20a3f982e0 100644 (file)
@@ -30,32 +30,53 @@ export type ExitHandler<Worker extends IWorker> = (
 ) => void
 
 /**
- * Worker task interface.
+ * 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 serializable data.
  * @internal
  */
 export interface Task<Data = unknown> {
   /**
-   * Worker task data.
+   * Input data that will be passed to the worker.
    */
-  data: Data
+  readonly data?: Data
   /**
-   * Task UUID.
+   * UUID of the message.
    */
-  id: string
+  readonly id?: string
 }
 
 /**
  * Worker tasks usage statistics.
  */
 export interface TasksUsage {
+  /**
+   * Number of tasks executed.
+   */
   run: number
+  /**
+   * Number of tasks running.
+   */
   running: number
+  /**
+   * Tasks runtime.
+   */
   runTime: number
+  /**
+   * Tasks runtime history.
+   */
   runTimeHistory: CircularArray<number>
+  /**
+   * Average tasks runtime.
+   */
   avgRunTime: number
+  /**
+   * Median tasks runtime.
+   */
   medRunTime: number
+  /**
+   * Number of tasks errored.
+   */
   error: number
 }
 
@@ -93,7 +114,7 @@ export interface WorkerNode<Worker extends IWorker, Data = unknown> {
   /**
    * Worker node worker.
    */
-  worker: Worker
+  readonly worker: Worker
   /**
    * Worker node tasks usage statistics.
    */
@@ -101,5 +122,5 @@ export interface WorkerNode<Worker extends IWorker, Data = unknown> {
   /**
    * Worker node tasks queue.
    */
-  tasksQueue: Array<Task<Data>>
+  readonly tasksQueue: Array<Task<Data>>
 }
index 685e5c4c606755bf801dd6c13d582d3657f8fe8e..3a454f3e6b8d0e1ee1c3a64897206f04c35c3ef8 100644 (file)
@@ -1,7 +1,7 @@
 import type { Worker as ClusterWorker } from 'node:cluster'
 import type { MessagePort } from 'node:worker_threads'
 import type { KillBehavior } from './worker/worker-options'
-import type { IWorker } from './pools/worker'
+import type { IWorker, Task } from './pools/worker'
 
 /**
  * Make all properties in T non-readonly.
@@ -9,7 +9,7 @@ import type { IWorker } from './pools/worker'
 export type Draft<T> = { -readonly [P in keyof T]?: T[P] }
 
 /**
- * Message object that is passed between worker and main worker.
+ * Message object that is passed between main worker and worker.
  *
  * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
  * @typeParam MainWorker - Type of main worker.
@@ -17,15 +17,7 @@ export type Draft<T> = { -readonly [P in keyof T]?: T[P] }
 export interface MessageValue<
   Data = unknown,
   MainWorker extends ClusterWorker | MessagePort | unknown = unknown
-> {
-  /**
-   * Input data that will be passed to the worker.
-   */
-  readonly data?: Data
-  /**
-   * Id of the message.
-   */
-  readonly id?: string
+> extends Task<Data> {
   /**
    * Kill code.
    */