refactor: add type aliases for worker function
authorJérôme Benoit <jerome.benoit@sap.com>
Sat, 15 Apr 2023 15:11:53 +0000 (17:11 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Sat, 15 Apr 2023 15:11:53 +0000 (17:11 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/index.ts
src/pools/worker.ts
src/utility-types.ts
src/worker/abstract-worker.ts
src/worker/cluster-worker.ts
src/worker/thread-worker.ts

index dce003805d0ee3c7d44d499d33ce4454c188f8e0..d1482c8336aa0bfc755217ac015a58f2766af0e4 100644 (file)
@@ -40,6 +40,9 @@ export type { KillBehavior, WorkerOptions } from './worker/worker-options'
 export type {
   Draft,
   PromiseResponseWrapper,
-  MessageValue
+  MessageValue,
+  WorkerAsyncFunction,
+  WorkerFunction,
+  WorkerSyncFunction
 } from './utility-types'
 export type { CircularArray } from './circular-array'
index 8d62712b5d598ada970ae337ddee7eb2406f9193..65b3a430fbd91a01de112415f89cfeca5b01be71 100644 (file)
@@ -90,7 +90,7 @@ export interface IWorker {
    * Register an event listener.
    *
    * @param event - The event.
-   * @param handler - The event listener.
+   * @param handler - The event handler.
    */
   on: ((event: 'message', handler: MessageHandler<this>) => void) &
   ((event: 'error', handler: ErrorHandler<this>) => void) &
index fb0e435a81ac949b0b82740f1b17c1561bd9d762..81a57698f5fa6a7dc5e631cbdec844ee68c44c2c 100644 (file)
@@ -39,6 +39,19 @@ export interface MessageValue<
   readonly parent?: MainWorker
 }
 
+/**
+ * Worker function that can be executed types.
+ */
+export type WorkerSyncFunction<Data = unknown, Response = unknown> = (
+  data?: Data
+) => Response
+export type WorkerAsyncFunction<Data = unknown, Response = unknown> = (
+  data?: Data
+) => Promise<Response>
+export type WorkerFunction<Data = unknown, Response = unknown> =
+  | WorkerSyncFunction<Data, Response>
+  | WorkerAsyncFunction<Data, Response>
+
 /**
  * An object holding the execution response promise resolve/reject callbacks.
  *
index 73eec1c6999d2aae78fa7e0a70038d30d6993997..5390ec029719549aeef5c31791b22e3365eeaa4c 100644 (file)
@@ -1,7 +1,12 @@
 import { AsyncResource } from 'node:async_hooks'
 import type { Worker } from 'node:cluster'
 import type { MessagePort } from 'node:worker_threads'
-import type { MessageValue } from '../utility-types'
+import type {
+  MessageValue,
+  WorkerAsyncFunction,
+  WorkerFunction,
+  WorkerSyncFunction
+} from '../utility-types'
 import { EMPTY_FUNCTION } from '../utils'
 import type { KillBehavior, WorkerOptions } from './worker-options'
 import { KillBehaviors } from './worker-options'
@@ -41,7 +46,7 @@ export abstract class AbstractWorker<
   public constructor (
     type: string,
     protected readonly isMain: boolean,
-    fn: (data: Data) => Response | Promise<Response>,
+    fn: WorkerFunction<Data, Response>,
     protected mainWorker: MainWorker | undefined | null,
     protected readonly opts: WorkerOptions = {
       /**
@@ -83,7 +88,7 @@ export abstract class AbstractWorker<
    */
   protected messageListener (
     message: MessageValue<Data, MainWorker>,
-    fn: (data: Data) => Response | Promise<Response>
+    fn: WorkerFunction<Data, Response>
   ): void {
     if (message.id != null && message.data != null) {
       // Task message received
@@ -114,9 +119,7 @@ export abstract class AbstractWorker<
    *
    * @param fn - The function that should be defined.
    */
-  private checkFunctionInput (
-    fn: (data: Data) => Response | Promise<Response>
-  ): void {
+  private checkFunctionInput (fn: WorkerFunction<Data, Response>): void {
     if (fn == null) throw new Error('fn parameter is mandatory')
     if (typeof fn !== 'function') {
       throw new TypeError('fn parameter is not a function')
@@ -176,7 +179,7 @@ export abstract class AbstractWorker<
    * @param message - Input data for the given function.
    */
   protected run (
-    fn: (data?: Data) => Response,
+    fn: WorkerSyncFunction<Data, Response>,
     message: MessageValue<Data>
   ): void {
     try {
@@ -203,7 +206,7 @@ export abstract class AbstractWorker<
    * @param message - Input data for the given function.
    */
   protected runAsync (
-    fn: (data?: Data) => Promise<Response>,
+    fn: WorkerAsyncFunction<Data, Response>,
     message: MessageValue<Data>
   ): void {
     const startTimestamp = performance.now()
index 1d2729812f905d9f9724e5bf9106358ae8aa893a..8725dc89397c08d4b1e792333fd9fe08cd75ef62 100644 (file)
@@ -1,6 +1,6 @@
 import type { Worker } from 'node:cluster'
 import cluster from 'node:cluster'
-import type { MessageValue } from '../utility-types'
+import type { MessageValue, WorkerFunction } from '../utility-types'
 import { AbstractWorker } from './abstract-worker'
 import type { WorkerOptions } from './worker-options'
 
@@ -29,7 +29,7 @@ export class ClusterWorker<
    * @param opts - Options for the worker.
    */
   public constructor (
-    fn: (data: Data) => Response | Promise<Response>,
+    fn: WorkerFunction<Data, Response>,
     opts: WorkerOptions = {}
   ) {
     super(
index ad2bc644220289c596420513208dd2b77b5db00d..03566a4c510265ddbd05f4ba24c1dbaef3c03195 100644 (file)
@@ -1,6 +1,6 @@
 import type { MessagePort } from 'node:worker_threads'
 import { isMainThread, parentPort } from 'node:worker_threads'
-import type { MessageValue } from '../utility-types'
+import type { MessageValue, WorkerFunction } from '../utility-types'
 import { AbstractWorker } from './abstract-worker'
 import type { WorkerOptions } from './worker-options'
 
@@ -29,7 +29,7 @@ export class ThreadWorker<
    * @param opts - Options for the worker.
    */
   public constructor (
-    fn: (data: Data) => Response | Promise<Response>,
+    fn: WorkerFunction<Data, Response>,
     opts: WorkerOptions = {}
   ) {
     super('worker-thread-pool:poolifier', isMainThread, fn, parentPort, opts)