@xylabs/threads 5.0.13 → 5.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/browser/index-browser.mjs +119 -209
  2. package/dist/browser/index-browser.mjs.map +1 -1
  3. package/dist/browser/master/implementation.browser.mjs +11 -36
  4. package/dist/browser/master/implementation.browser.mjs.map +1 -1
  5. package/dist/browser/master/index-browser.mjs +117 -201
  6. package/dist/browser/master/index-browser.mjs.map +1 -1
  7. package/dist/browser/master/pool-browser.mjs +53 -65
  8. package/dist/browser/master/pool-browser.mjs.map +1 -1
  9. package/dist/browser/worker/worker.browser.mjs +43 -79
  10. package/dist/browser/worker/worker.browser.mjs.map +1 -1
  11. package/dist/neutral/master/register.mjs +62 -121
  12. package/dist/neutral/master/register.mjs.map +1 -1
  13. package/dist/neutral/master/spawn.mjs +53 -106
  14. package/dist/neutral/master/spawn.mjs.map +1 -1
  15. package/dist/neutral/master/thread.mjs +0 -4
  16. package/dist/neutral/master/thread.mjs.map +1 -1
  17. package/dist/neutral/observable-promise.mjs +20 -27
  18. package/dist/neutral/observable-promise.mjs.map +1 -1
  19. package/dist/neutral/observable.mjs +3 -12
  20. package/dist/neutral/observable.mjs.map +1 -1
  21. package/dist/neutral/types/messages.mjs +4 -4
  22. package/dist/neutral/types/messages.mjs.map +1 -1
  23. package/dist/node/index-node.mjs +169 -293
  24. package/dist/node/index-node.mjs.map +1 -1
  25. package/dist/node/master/implementation.node.mjs +62 -121
  26. package/dist/node/master/implementation.node.mjs.map +1 -1
  27. package/dist/node/master/index-node.mjs +168 -286
  28. package/dist/node/master/index-node.mjs.map +1 -1
  29. package/dist/node/master/pool-node.mjs +115 -183
  30. package/dist/node/master/pool-node.mjs.map +1 -1
  31. package/dist/node/worker/worker.node.mjs +43 -80
  32. package/dist/node/worker/worker.node.mjs.map +1 -1
  33. package/package.json +3 -4
@@ -1,6 +1,4 @@
1
- var __defProp = Object.defineProperty;
2
1
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
2
  var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
5
3
  get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
6
4
  }) : x)(function(x) {
@@ -25,7 +23,6 @@ var require_lib = __commonJS({
25
23
  Object.defineProperty(target, descriptor.key, descriptor);
26
24
  }
27
25
  }
28
- __name(defineProperties, "defineProperties");
29
26
  return function(Constructor, protoProps, staticProps) {
30
27
  if (protoProps) defineProperties(Constructor.prototype, protoProps);
31
28
  if (staticProps) defineProperties(Constructor, staticProps);
@@ -37,26 +34,17 @@ var require_lib = __commonJS({
37
34
  throw new TypeError("Cannot call a class as a function");
38
35
  }
39
36
  }
40
- __name(_classCallCheck, "_classCallCheck");
41
37
  var path2 = __require("path");
42
38
  var fork = __require("child_process").fork;
43
39
  var worker = path2.join(__dirname, "worker.js");
44
40
  var events = /^(error|message)$/;
45
- var defaultPorts = {
46
- inspect: 9229,
47
- debug: 5858
48
- };
49
- var range = {
50
- min: 1,
51
- max: 300
52
- };
41
+ var defaultPorts = { inspect: 9229, debug: 5858 };
42
+ var range = { min: 1, max: 300 };
53
43
  var Worker = function() {
54
44
  function Worker2(arg) {
55
45
  var _this = this;
56
46
  var args = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
57
- var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {
58
- cwd: process.cwd()
59
- };
47
+ var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : { cwd: process.cwd() };
60
48
  _classCallCheck(this, Worker2);
61
49
  var isfn = typeof arg === "function", input = isfn ? arg.toString() : arg;
62
50
  if (!options.cwd) {
@@ -112,50 +100,36 @@ var require_lib = __commonJS({
112
100
  _this.onerror.call(_this, error);
113
101
  }
114
102
  });
115
- this.child.send({
116
- input,
117
- isfn,
118
- cwd: options.cwd,
119
- esm: options.esm
120
- });
103
+ this.child.send({ input, isfn, cwd: options.cwd, esm: options.esm });
121
104
  }
122
- __name(Worker2, "Worker");
123
- _createClass(Worker2, [
124
- {
125
- key: "addEventListener",
126
- value: /* @__PURE__ */ __name(function addEventListener(event, fn) {
127
- if (events.test(event)) {
128
- this["on" + event] = fn;
129
- }
130
- }, "addEventListener")
131
- },
132
- {
133
- key: "postMessage",
134
- value: /* @__PURE__ */ __name(function postMessage(msg) {
135
- this.child.send(JSON.stringify({
136
- data: msg
137
- }, null, 0));
138
- }, "postMessage")
139
- },
140
- {
141
- key: "terminate",
142
- value: /* @__PURE__ */ __name(function terminate() {
143
- this.child.kill("SIGINT");
144
- }, "terminate")
105
+ _createClass(Worker2, [{
106
+ key: "addEventListener",
107
+ value: function addEventListener(event, fn) {
108
+ if (events.test(event)) {
109
+ this["on" + event] = fn;
110
+ }
145
111
  }
146
- ], [
147
- {
148
- key: "setRange",
149
- value: /* @__PURE__ */ __name(function setRange(min, max) {
150
- if (min >= max) {
151
- return false;
152
- }
153
- range.min = min;
154
- range.max = max;
155
- return true;
156
- }, "setRange")
112
+ }, {
113
+ key: "postMessage",
114
+ value: function postMessage(msg) {
115
+ this.child.send(JSON.stringify({ data: msg }, null, 0));
116
+ }
117
+ }, {
118
+ key: "terminate",
119
+ value: function terminate() {
120
+ this.child.kill("SIGINT");
157
121
  }
158
- ]);
122
+ }], [{
123
+ key: "setRange",
124
+ value: function setRange(min, max) {
125
+ if (min >= max) {
126
+ return false;
127
+ }
128
+ range.min = min;
129
+ range.max = max;
130
+ return true;
131
+ }
132
+ }]);
159
133
  return Worker2;
160
134
  }();
161
135
  module.exports = Worker;
@@ -164,7 +138,11 @@ var require_lib = __commonJS({
164
138
 
165
139
  // src/master/pool-node.ts
166
140
  import DebugLogger from "debug";
167
- import { multicast, Observable, Subject } from "observable-fns";
141
+ import {
142
+ multicast,
143
+ Observable,
144
+ Subject
145
+ } from "observable-fns";
168
146
 
169
147
  // src/master/implementation.node.ts
170
148
  import { EventEmitter } from "events";
@@ -174,19 +152,15 @@ import { cwd } from "process";
174
152
  import { Worker as NativeWorker } from "worker_threads";
175
153
  var defaultPoolSize = cpus().length;
176
154
  function resolveScriptPath(scriptPath, baseURL) {
177
- const makeAbsolute = /* @__PURE__ */ __name((filePath) => {
155
+ const makeAbsolute = (filePath) => {
178
156
  return path.isAbsolute(filePath) ? filePath : path.join(baseURL ?? cwd(), filePath);
179
- }, "makeAbsolute");
157
+ };
180
158
  const absolutePath = makeAbsolute(scriptPath);
181
159
  return absolutePath;
182
160
  }
183
- __name(resolveScriptPath, "resolveScriptPath");
184
161
  function initWorkerThreadsWorker() {
185
162
  let allWorkers = [];
186
- let Worker = class Worker extends NativeWorker {
187
- static {
188
- __name(this, "Worker");
189
- }
163
+ class Worker extends NativeWorker {
190
164
  mappedEventListeners;
191
165
  constructor(scriptPath, options) {
192
166
  const resolvedScriptPath = options && options.fromSource ? null : resolveScriptPath(scriptPath, (options ?? {})._baseURL);
@@ -194,20 +168,15 @@ function initWorkerThreadsWorker() {
194
168
  super(resolvedScriptPath, options);
195
169
  } else {
196
170
  const sourceCode = scriptPath;
197
- super(sourceCode, {
198
- ...options,
199
- eval: true
200
- });
171
+ super(sourceCode, { ...options, eval: true });
201
172
  }
202
173
  this.mappedEventListeners = /* @__PURE__ */ new WeakMap();
203
174
  allWorkers.push(this);
204
175
  }
205
176
  addEventListener(eventName, rawListener) {
206
- const listener = /* @__PURE__ */ __name((message) => {
207
- rawListener({
208
- data: message
209
- });
210
- }, "listener");
177
+ const listener = (message) => {
178
+ rawListener({ data: message });
179
+ };
211
180
  this.mappedEventListeners.set(rawListener, listener);
212
181
  this.on(eventName, listener);
213
182
  }
@@ -215,55 +184,41 @@ function initWorkerThreadsWorker() {
215
184
  const listener = this.mappedEventListeners.get(rawListener) || rawListener;
216
185
  this.off(eventName, listener);
217
186
  }
218
- };
219
- const terminateWorkersAndMaster = /* @__PURE__ */ __name(() => {
220
- Promise.all(allWorkers.map((worker) => worker.terminate())).then(() => process.exit(0), () => process.exit(1));
187
+ }
188
+ const terminateWorkersAndMaster = () => {
189
+ Promise.all(allWorkers.map((worker) => worker.terminate())).then(
190
+ () => process.exit(0),
191
+ () => process.exit(1)
192
+ );
221
193
  allWorkers = [];
222
- }, "terminateWorkersAndMaster");
194
+ };
223
195
  process.on("SIGINT", () => terminateWorkersAndMaster());
224
196
  process.on("SIGTERM", () => terminateWorkersAndMaster());
225
- let BlobWorker = class BlobWorker extends Worker {
226
- static {
227
- __name(this, "BlobWorker");
228
- }
197
+ class BlobWorker extends Worker {
229
198
  constructor(blob, options) {
230
- super(Buffer.from(blob).toString("utf-8"), {
231
- ...options,
232
- fromSource: true
233
- });
199
+ super(Buffer.from(blob).toString("utf-8"), { ...options, fromSource: true });
234
200
  }
235
201
  static fromText(source, options) {
236
- return new Worker(source, {
237
- ...options,
238
- fromSource: true
239
- });
202
+ return new Worker(source, { ...options, fromSource: true });
240
203
  }
241
- };
204
+ }
242
205
  return {
243
206
  blob: BlobWorker,
244
207
  default: Worker
245
208
  };
246
209
  }
247
- __name(initWorkerThreadsWorker, "initWorkerThreadsWorker");
248
210
  function initTinyWorker() {
249
211
  const TinyWorker = require_lib();
250
212
  let allWorkers = [];
251
- let Worker = class Worker extends TinyWorker {
252
- static {
253
- __name(this, "Worker");
254
- }
213
+ class Worker extends TinyWorker {
255
214
  emitter;
256
215
  constructor(scriptPath, options) {
257
216
  const resolvedScriptPath = options && options.fromSource ? null : process.platform === "win32" ? `file:///${resolveScriptPath(scriptPath).replaceAll("\\", "/")}` : resolveScriptPath(scriptPath);
258
217
  if (resolvedScriptPath) {
259
- super(resolvedScriptPath, [], {
260
- esm: true
261
- });
218
+ super(resolvedScriptPath, [], { esm: true });
262
219
  } else {
263
220
  const sourceCode = scriptPath;
264
- super(new Function(sourceCode), [], {
265
- esm: true
266
- });
221
+ super(new Function(sourceCode), [], { esm: true });
267
222
  }
268
223
  allWorkers.push(this);
269
224
  this.emitter = new EventEmitter();
@@ -280,36 +235,29 @@ function initTinyWorker() {
280
235
  allWorkers = allWorkers.filter((worker) => worker !== this);
281
236
  return super.terminate();
282
237
  }
283
- };
284
- const terminateWorkersAndMaster = /* @__PURE__ */ __name(() => {
285
- Promise.all(allWorkers.map((worker) => worker.terminate())).then(() => process.exit(0), () => process.exit(1));
238
+ }
239
+ const terminateWorkersAndMaster = () => {
240
+ Promise.all(allWorkers.map((worker) => worker.terminate())).then(
241
+ () => process.exit(0),
242
+ () => process.exit(1)
243
+ );
286
244
  allWorkers = [];
287
- }, "terminateWorkersAndMaster");
245
+ };
288
246
  process.on("SIGINT", () => terminateWorkersAndMaster());
289
247
  process.on("SIGTERM", () => terminateWorkersAndMaster());
290
- let BlobWorker = class BlobWorker extends Worker {
291
- static {
292
- __name(this, "BlobWorker");
293
- }
248
+ class BlobWorker extends Worker {
294
249
  constructor(blob, options) {
295
- super(Buffer.from(blob).toString("utf-8"), {
296
- ...options,
297
- fromSource: true
298
- });
250
+ super(Buffer.from(blob).toString("utf-8"), { ...options, fromSource: true });
299
251
  }
300
252
  static fromText(source, options) {
301
- return new Worker(source, {
302
- ...options,
303
- fromSource: true
304
- });
253
+ return new Worker(source, { ...options, fromSource: true });
305
254
  }
306
- };
255
+ }
307
256
  return {
308
257
  blob: BlobWorker,
309
258
  default: Worker
310
259
  };
311
260
  }
312
- __name(initTinyWorker, "initTinyWorker");
313
261
  var implementation;
314
262
  var isTinyWorker;
315
263
  function selectWorkerImplementation() {
@@ -323,14 +271,12 @@ function selectWorkerImplementation() {
323
271
  return initTinyWorker();
324
272
  }
325
273
  }
326
- __name(selectWorkerImplementation, "selectWorkerImplementation");
327
274
  function getWorkerImplementation() {
328
275
  if (!implementation) {
329
276
  implementation = selectWorkerImplementation();
330
277
  }
331
278
  return implementation;
332
279
  }
333
- __name(getWorkerImplementation, "getWorkerImplementation");
334
280
  function isWorkerRuntime() {
335
281
  if (isTinyWorker) {
336
282
  return globalThis !== void 0 && self["postMessage"] ? true : false;
@@ -339,10 +285,9 @@ function isWorkerRuntime() {
339
285
  return !isMainThread;
340
286
  }
341
287
  }
342
- __name(isWorkerRuntime, "isWorkerRuntime");
343
288
 
344
289
  // src/master/pool-types.ts
345
- var PoolEventType = /* @__PURE__ */ function(PoolEventType2) {
290
+ var PoolEventType = /* @__PURE__ */ ((PoolEventType2) => {
346
291
  PoolEventType2["initialized"] = "initialized";
347
292
  PoolEventType2["taskCanceled"] = "taskCanceled";
348
293
  PoolEventType2["taskCompleted"] = "taskCompleted";
@@ -352,7 +297,7 @@ var PoolEventType = /* @__PURE__ */ function(PoolEventType2) {
352
297
  PoolEventType2["taskStart"] = "taskStart";
353
298
  PoolEventType2["terminated"] = "terminated";
354
299
  return PoolEventType2;
355
- }({});
300
+ })(PoolEventType || {});
356
301
 
357
302
  // src/symbols.ts
358
303
  var $errors = Symbol("thread.errors");
@@ -365,7 +310,6 @@ var $worker = Symbol("thread.worker");
365
310
  function fail(message) {
366
311
  throw new Error(message);
367
312
  }
368
- __name(fail, "fail");
369
313
  var Thread = {
370
314
  /** Return an observable that can be used to subscribe to all errors happening in the thread. */
371
315
  errors(thread) {
@@ -390,33 +334,24 @@ function createArray(size) {
390
334
  }
391
335
  return array;
392
336
  }
393
- __name(createArray, "createArray");
394
337
  function delay(ms) {
395
338
  return new Promise((resolve) => setTimeout(resolve, ms));
396
339
  }
397
- __name(delay, "delay");
398
340
  function flatMap(array, mapper) {
399
- return array.reduce((flattened, element) => [
400
- ...flattened,
401
- ...mapper(element)
402
- ], []);
341
+ return array.reduce((flattened, element) => [...flattened, ...mapper(element)], []);
403
342
  }
404
- __name(flatMap, "flatMap");
405
343
  function slugify(text) {
406
344
  return text.replaceAll(/\W/g, " ").trim().replaceAll(/\s+/g, "-");
407
345
  }
408
- __name(slugify, "slugify");
409
346
  function spawnWorkers(spawnWorker, count) {
410
- return createArray(count).map(() => ({
411
- init: spawnWorker(),
412
- runningTasks: []
413
- }));
347
+ return createArray(count).map(
348
+ () => ({
349
+ init: spawnWorker(),
350
+ runningTasks: []
351
+ })
352
+ );
414
353
  }
415
- __name(spawnWorkers, "spawnWorkers");
416
- var WorkerPool = class WorkerPool2 {
417
- static {
418
- __name(this, "WorkerPool");
419
- }
354
+ var WorkerPool = class {
420
355
  static EventType = PoolEventType;
421
356
  debug;
422
357
  eventObservable;
@@ -428,22 +363,23 @@ var WorkerPool = class WorkerPool2 {
428
363
  nextTaskID = 1;
429
364
  taskQueue = [];
430
365
  constructor(spawnWorker, optionsOrSize) {
431
- const options = typeof optionsOrSize === "number" ? {
432
- size: optionsOrSize
433
- } : optionsOrSize || {};
366
+ const options = typeof optionsOrSize === "number" ? { size: optionsOrSize } : optionsOrSize || {};
434
367
  const { size = defaultPoolSize } = options;
435
368
  this.debug = DebugLogger(`threads:pool:${slugify(options.name || String(nextPoolID++))}`);
436
369
  this.options = options;
437
370
  this.workers = spawnWorkers(spawnWorker, size);
438
371
  this.eventObservable = multicast(Observable.from(this.eventSubject));
439
- Promise.all(this.workers.map((worker) => worker.init)).then(() => this.eventSubject.next({
440
- size: this.workers.length,
441
- type: PoolEventType.initialized
442
- }), (error) => {
443
- this.debug("Error while initializing pool worker:", error);
444
- this.eventSubject.error(error);
445
- this.initErrors.push(error);
446
- });
372
+ Promise.all(this.workers.map((worker) => worker.init)).then(
373
+ () => this.eventSubject.next({
374
+ size: this.workers.length,
375
+ type: "initialized" /* initialized */
376
+ }),
377
+ (error) => {
378
+ this.debug("Error while initializing pool worker:", error);
379
+ this.eventSubject.error(error);
380
+ this.initErrors.push(error);
381
+ }
382
+ );
447
383
  }
448
384
  findIdlingWorker() {
449
385
  const { concurrency = 1 } = this.options;
@@ -454,7 +390,7 @@ var WorkerPool = class WorkerPool2 {
454
390
  this.debug(`Running task #${task.id} on worker #${workerID}...`);
455
391
  this.eventSubject.next({
456
392
  taskID: task.id,
457
- type: PoolEventType.taskStart,
393
+ type: "taskStart" /* taskStart */,
458
394
  workerID
459
395
  });
460
396
  try {
@@ -463,7 +399,7 @@ var WorkerPool = class WorkerPool2 {
463
399
  this.eventSubject.next({
464
400
  returnValue,
465
401
  taskID: task.id,
466
- type: PoolEventType.taskCompleted,
402
+ type: "taskCompleted" /* taskCompleted */,
467
403
  workerID
468
404
  });
469
405
  } catch (ex) {
@@ -472,16 +408,16 @@ var WorkerPool = class WorkerPool2 {
472
408
  this.eventSubject.next({
473
409
  error,
474
410
  taskID: task.id,
475
- type: PoolEventType.taskFailed,
411
+ type: "taskFailed" /* taskFailed */,
476
412
  workerID
477
413
  });
478
414
  }
479
415
  }
480
416
  run(worker, task) {
481
417
  const runPromise = (async () => {
482
- const removeTaskFromWorkersRunningTasks = /* @__PURE__ */ __name(() => {
418
+ const removeTaskFromWorkersRunningTasks = () => {
483
419
  worker.runningTasks = worker.runningTasks.filter((someRunPromise) => someRunPromise !== runPromise);
484
- }, "removeTaskFromWorkersRunningTasks");
420
+ };
485
421
  await delay(0);
486
422
  try {
487
423
  await this.runPoolTask(worker, task);
@@ -501,9 +437,7 @@ var WorkerPool = class WorkerPool2 {
501
437
  const nextTask = this.taskQueue.shift();
502
438
  if (!nextTask) {
503
439
  this.debug("Task queue is empty");
504
- this.eventSubject.next({
505
- type: PoolEventType.taskQueueDrained
506
- });
440
+ this.eventSubject.next({ type: "taskQueueDrained" /* taskQueueDrained */ });
507
441
  return;
508
442
  }
509
443
  this.run(availableWorker, nextTask);
@@ -511,13 +445,13 @@ var WorkerPool = class WorkerPool2 {
511
445
  taskCompletion(taskID) {
512
446
  return new Promise((resolve, reject) => {
513
447
  const eventSubscription = this.events().subscribe((event) => {
514
- if (event.type === PoolEventType.taskCompleted && event.taskID === taskID) {
448
+ if (event.type === "taskCompleted" /* taskCompleted */ && event.taskID === taskID) {
515
449
  eventSubscription.unsubscribe();
516
450
  resolve(event.returnValue);
517
- } else if (event.type === PoolEventType.taskFailed && event.taskID === taskID) {
451
+ } else if (event.type === "taskFailed" /* taskFailed */ && event.taskID === taskID) {
518
452
  eventSubscription.unsubscribe();
519
453
  reject(event.error);
520
- } else if (event.type === PoolEventType.terminated) {
454
+ } else if (event.type === "terminated" /* terminated */) {
521
455
  eventSubscription.unsubscribe();
522
456
  reject(new Error("Pool has been terminated before task was run."));
523
457
  }
@@ -525,10 +459,10 @@ var WorkerPool = class WorkerPool2 {
525
459
  });
526
460
  }
527
461
  async settled(allowResolvingImmediately = false) {
528
- const getCurrentlyRunningTasks = /* @__PURE__ */ __name(() => flatMap(this.workers, (worker) => worker.runningTasks), "getCurrentlyRunningTasks");
462
+ const getCurrentlyRunningTasks = () => flatMap(this.workers, (worker) => worker.runningTasks);
529
463
  const taskFailures = [];
530
464
  const failureSubscription = this.eventObservable.subscribe((event) => {
531
- if (event.type === PoolEventType.taskFailed) {
465
+ if (event.type === "taskFailed" /* taskFailed */) {
532
466
  taskFailures.push(event.error);
533
467
  }
534
468
  });
@@ -543,11 +477,12 @@ var WorkerPool = class WorkerPool2 {
543
477
  const subscription = this.eventObservable.subscribe({
544
478
  error: reject,
545
479
  next(event) {
546
- if (event.type === PoolEventType.taskQueueDrained) {
480
+ if (event.type === "taskQueueDrained" /* taskQueueDrained */) {
547
481
  subscription.unsubscribe();
548
482
  resolve(void 0);
549
483
  }
550
484
  }
485
+ // make a pool-wide error reject the completed() result promise
551
486
  });
552
487
  });
553
488
  await Promise.allSettled(getCurrentlyRunningTasks());
@@ -560,20 +495,18 @@ var WorkerPool = class WorkerPool2 {
560
495
  const subscription = this.eventObservable.subscribe({
561
496
  error: reject,
562
497
  next(event) {
563
- if (event.type === PoolEventType.taskQueueDrained) {
498
+ if (event.type === "taskQueueDrained" /* taskQueueDrained */) {
564
499
  subscription.unsubscribe();
565
500
  resolve(settlementPromise);
566
- } else if (event.type === PoolEventType.taskFailed) {
501
+ } else if (event.type === "taskFailed" /* taskFailed */) {
567
502
  subscription.unsubscribe();
568
503
  reject(event.error);
569
504
  }
570
505
  }
506
+ // make a pool-wide error reject the completed() result promise
571
507
  });
572
508
  });
573
- const errors = await Promise.race([
574
- settlementPromise,
575
- earlyExitPromise
576
- ]);
509
+ const errors = await Promise.race([settlementPromise, earlyExitPromise]);
577
510
  if (errors.length > 0) {
578
511
  throw errors[0];
579
512
  }
@@ -595,26 +528,28 @@ var WorkerPool = class WorkerPool2 {
595
528
  this.debug(`Task #${taskID} errored:`, error);
596
529
  });
597
530
  const task = {
598
- cancel: /* @__PURE__ */ __name(() => {
531
+ cancel: () => {
599
532
  if (!this.taskQueue.includes(task)) return;
600
533
  this.taskQueue = this.taskQueue.filter((someTask) => someTask !== task);
601
534
  this.eventSubject.next({
602
535
  taskID: task.id,
603
- type: PoolEventType.taskCanceled
536
+ type: "taskCanceled" /* taskCanceled */
604
537
  });
605
- }, "cancel"),
538
+ },
606
539
  id: taskID,
607
540
  run: taskFunction,
608
541
  then: taskCompletion.then.bind(taskCompletion)
609
542
  };
610
543
  if (this.taskQueue.length >= maxQueuedJobs) {
611
- throw new Error("Maximum number of pool tasks queued. Refusing to queue another one.\nThis usually happens for one of two reasons: We are either at peak workload right now or some tasks just won't finish, thus blocking the pool.");
544
+ throw new Error(
545
+ "Maximum number of pool tasks queued. Refusing to queue another one.\nThis usually happens for one of two reasons: We are either at peak workload right now or some tasks just won't finish, thus blocking the pool."
546
+ );
612
547
  }
613
548
  this.debug(`Queueing task #${task.id}...`);
614
549
  this.taskQueue.push(task);
615
550
  this.eventSubject.next({
616
551
  taskID: task.id,
617
- type: PoolEventType.taskQueued
552
+ type: "taskQueued" /* taskQueued */
618
553
  });
619
554
  this.scheduleWork();
620
555
  return task;
@@ -625,10 +560,8 @@ var WorkerPool = class WorkerPool2 {
625
560
  await this.completed(true);
626
561
  }
627
562
  this.eventSubject.next({
628
- remainingQueue: [
629
- ...this.taskQueue
630
- ],
631
- type: PoolEventType.terminated
563
+ remainingQueue: [...this.taskQueue],
564
+ type: "terminated" /* terminated */
632
565
  });
633
566
  this.eventSubject.complete();
634
567
  await Promise.all(this.workers.map(async (worker) => Thread.terminate(await worker.init)));
@@ -637,7 +570,6 @@ var WorkerPool = class WorkerPool2 {
637
570
  function PoolConstructor(spawnWorker, optionsOrSize) {
638
571
  return new WorkerPool(spawnWorker, optionsOrSize);
639
572
  }
640
- __name(PoolConstructor, "PoolConstructor");
641
573
  PoolConstructor.EventType = PoolEventType;
642
574
  var Pool = PoolConstructor;
643
575
  export {