- constructor(workerScript: string, maxElementsPerWorker = 1) {
- super(workerScript);
- this.workers = new Set<WorkerSetElement>();
- this.maxElementsPerWorker = maxElementsPerWorker;
+ constructor(workerScript: string, workerOptions: WorkerOptions) {
+ super(workerScript, workerOptions);
+ if (
+ this.workerOptions.elementsPerWorker === null ||
+ this.workerOptions.elementsPerWorker === undefined
+ ) {
+ throw new TypeError('Elements per worker is not defined');
+ }
+ if (!Number.isSafeInteger(this.workerOptions.elementsPerWorker)) {
+ throw new TypeError('Elements per worker must be an integer');
+ }
+ if (this.workerOptions.elementsPerWorker <= 0) {
+ throw new RangeError('Elements per worker must be greater than zero');
+ }
+ this.workerOptions.poolOptions = {
+ ...DEFAULT_POOL_OPTIONS,
+ ...this.workerOptions.poolOptions,
+ };
+ this.workerSet = new Set<WorkerSetElement>();
+ if (this.workerOptions.poolOptions?.enableEvents) {
+ this.emitter = new EventEmitter();
+ }
+ this.workerStartup = false;
+ }
+
+ get info(): SetInfo {
+ return {
+ version: workerSetVersion,
+ type: 'set',
+ worker: 'thread',
+ size: this.size,
+ elementsExecuting: [...this.workerSet].reduce(
+ (accumulator, workerSetElement) => accumulator + workerSetElement.numberOfWorkerElements,
+ 0,
+ ),
+ elementsPerWorker: this.maxElementsPerWorker!,
+ };