608e879859b9662cb093241aec71fccd7d0a9ea1
1 import { isMainThread
} from
'node:worker_threads';
3 import type { WorkerAbstract
} from
'./WorkerAbstract';
4 import { DEFAULT_WORKER_OPTIONS
} from
'./WorkerConstants';
5 import { WorkerDynamicPool
} from
'./WorkerDynamicPool';
6 import { WorkerFixedPool
} from
'./WorkerFixedPool';
7 import { WorkerSet
} from
'./WorkerSet';
8 import { type WorkerData
, type WorkerOptions
, WorkerProcessType
} from
'./WorkerTypes';
10 export class WorkerFactory
{
11 private constructor() {
12 // This is intentional
15 public static getWorkerImplementation
<T
extends WorkerData
>(
17 workerProcessType
: WorkerProcessType
,
18 workerOptions
?: WorkerOptions
,
19 ): WorkerAbstract
<T
> | undefined {
21 throw new Error('Cannot get a worker implementation outside the main thread');
23 workerOptions
= { ...DEFAULT_WORKER_OPTIONS
, ...workerOptions
};
24 let workerImplementation
: WorkerAbstract
<T
>;
25 switch (workerProcessType
) {
26 case WorkerProcessType
.workerSet
:
27 workerImplementation
= new WorkerSet(workerScript
, workerOptions
);
29 case WorkerProcessType
.fixedPool
:
30 workerImplementation
= new WorkerFixedPool(workerScript
, workerOptions
);
32 case WorkerProcessType
.dynamicPool
:
33 workerImplementation
= new WorkerDynamicPool(workerScript
, workerOptions
);
36 // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
37 throw new Error(`Worker implementation type '${workerProcessType}' not found`);
39 return workerImplementation
;