@ariestools/threads 8.1.9 → 8.3.0

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 (58) hide show
  1. package/README.md +4 -0
  2. package/dist/browser/common.d.ts +8 -1
  3. package/dist/browser/common.d.ts.map +1 -1
  4. package/dist/browser/index-browser.mjs +75 -35
  5. package/dist/browser/index-browser.mjs.map +4 -4
  6. package/dist/browser/master/index-browser.mjs +75 -35
  7. package/dist/browser/master/index-browser.mjs.map +4 -4
  8. package/dist/browser/master/pool-browser.d.ts +10 -1
  9. package/dist/browser/master/pool-browser.d.ts.map +1 -1
  10. package/dist/browser/master/pool-browser.mjs +34 -26
  11. package/dist/browser/master/pool-browser.mjs.map +3 -3
  12. package/dist/browser/master/pool-node.d.ts +10 -1
  13. package/dist/browser/master/pool-node.d.ts.map +1 -1
  14. package/dist/browser/master/pool-types.d.ts +21 -26
  15. package/dist/browser/master/pool-types.d.ts.map +1 -1
  16. package/dist/browser/types/master.d.ts +11 -11
  17. package/dist/browser/types/master.d.ts.map +1 -1
  18. package/dist/browser/types/messages.d.ts +23 -25
  19. package/dist/browser/types/messages.d.ts.map +1 -1
  20. package/dist/browser/worker/worker.browser.mjs +29 -8
  21. package/dist/browser/worker/worker.browser.mjs.map +3 -3
  22. package/dist/neutral/common.d.ts +8 -1
  23. package/dist/neutral/common.d.ts.map +1 -1
  24. package/dist/neutral/master/pool-browser.d.ts +10 -1
  25. package/dist/neutral/master/pool-browser.d.ts.map +1 -1
  26. package/dist/neutral/master/pool-node.d.ts +10 -1
  27. package/dist/neutral/master/pool-node.d.ts.map +1 -1
  28. package/dist/neutral/master/pool-types.d.ts +21 -26
  29. package/dist/neutral/master/pool-types.d.ts.map +1 -1
  30. package/dist/neutral/master/spawn.mjs +41 -9
  31. package/dist/neutral/master/spawn.mjs.map +4 -4
  32. package/dist/neutral/types/master.d.ts +11 -11
  33. package/dist/neutral/types/master.d.ts.map +1 -1
  34. package/dist/neutral/types/messages.d.ts +23 -25
  35. package/dist/neutral/types/messages.d.ts.map +1 -1
  36. package/dist/neutral/types/messages.mjs +19 -13
  37. package/dist/neutral/types/messages.mjs.map +3 -3
  38. package/dist/node/common.d.ts +8 -1
  39. package/dist/node/common.d.ts.map +1 -1
  40. package/dist/node/index-node.mjs +75 -35
  41. package/dist/node/index-node.mjs.map +4 -4
  42. package/dist/node/master/index-node.mjs +75 -35
  43. package/dist/node/master/index-node.mjs.map +4 -4
  44. package/dist/node/master/pool-browser.d.ts +10 -1
  45. package/dist/node/master/pool-browser.d.ts.map +1 -1
  46. package/dist/node/master/pool-node.d.ts +10 -1
  47. package/dist/node/master/pool-node.d.ts.map +1 -1
  48. package/dist/node/master/pool-node.mjs +34 -26
  49. package/dist/node/master/pool-node.mjs.map +3 -3
  50. package/dist/node/master/pool-types.d.ts +21 -26
  51. package/dist/node/master/pool-types.d.ts.map +1 -1
  52. package/dist/node/types/master.d.ts +11 -11
  53. package/dist/node/types/master.d.ts.map +1 -1
  54. package/dist/node/types/messages.d.ts +23 -25
  55. package/dist/node/types/messages.d.ts.map +1 -1
  56. package/dist/node/worker/worker.node.mjs +29 -8
  57. package/dist/node/worker/worker.node.mjs.map +3 -3
  58. package/package.json +9 -9
@@ -112,17 +112,25 @@ import {
112
112
  var defaultPoolSize2 = typeof navigator !== "undefined" && navigator.hardwareConcurrency !== 0 ? navigator.hardwareConcurrency : 4;
113
113
 
114
114
  // src/master/pool-types.ts
115
- var PoolEventType = /* @__PURE__ */ ((PoolEventType2) => {
116
- PoolEventType2["initialized"] = "initialized";
117
- PoolEventType2["taskCanceled"] = "taskCanceled";
118
- PoolEventType2["taskCompleted"] = "taskCompleted";
119
- PoolEventType2["taskFailed"] = "taskFailed";
120
- PoolEventType2["taskQueued"] = "taskQueued";
121
- PoolEventType2["taskQueueDrained"] = "taskQueueDrained";
122
- PoolEventType2["taskStart"] = "taskStart";
123
- PoolEventType2["terminated"] = "terminated";
124
- return PoolEventType2;
125
- })(PoolEventType || {});
115
+ import { Enum } from "@ariestools/sdk/enum";
116
+ var PoolEventType = Enum({
117
+ /** All workers in the pool have initialized. */
118
+ initialized: "initialized",
119
+ /** A queued task was canceled before execution. */
120
+ taskCanceled: "taskCanceled",
121
+ /** A task completed successfully. */
122
+ taskCompleted: "taskCompleted",
123
+ /** A task failed during execution. */
124
+ taskFailed: "taskFailed",
125
+ /** A task was added to the queue. */
126
+ taskQueued: "taskQueued",
127
+ /** The pool has no remaining queued tasks. */
128
+ taskQueueDrained: "taskQueueDrained",
129
+ /** A worker started executing a task. */
130
+ taskStart: "taskStart",
131
+ /** The pool and its workers were terminated. */
132
+ terminated: "terminated"
133
+ });
126
134
 
127
135
  // src/symbols.ts
128
136
  var $errors = /* @__PURE__ */ Symbol("thread.errors");
@@ -198,7 +206,7 @@ var WorkerPool = class {
198
206
  await Promise.all(workers.map((worker) => worker.init));
199
207
  this.eventSubject.next({
200
208
  size: workers.length,
201
- type: "initialized" /* initialized */
209
+ type: PoolEventType.initialized
202
210
  });
203
211
  } catch (error) {
204
212
  const initError = error instanceof Error ? error : new Error(String(error));
@@ -217,7 +225,7 @@ var WorkerPool = class {
217
225
  this.debug(`Running task #${task.id} on worker #${workerID}...`);
218
226
  this.eventSubject.next({
219
227
  taskID: task.id,
220
- type: "taskStart" /* taskStart */,
228
+ type: PoolEventType.taskStart,
221
229
  workerID
222
230
  });
223
231
  try {
@@ -226,7 +234,7 @@ var WorkerPool = class {
226
234
  this.eventSubject.next({
227
235
  returnValue,
228
236
  taskID: task.id,
229
- type: "taskCompleted" /* taskCompleted */,
237
+ type: PoolEventType.taskCompleted,
230
238
  workerID
231
239
  });
232
240
  } catch (ex) {
@@ -235,7 +243,7 @@ var WorkerPool = class {
235
243
  this.eventSubject.next({
236
244
  error,
237
245
  taskID: task.id,
238
- type: "taskFailed" /* taskFailed */,
246
+ type: PoolEventType.taskFailed,
239
247
  workerID
240
248
  });
241
249
  }
@@ -264,7 +272,7 @@ var WorkerPool = class {
264
272
  const nextTask = this.taskQueue.shift();
265
273
  if (!nextTask) {
266
274
  this.debug("Task queue is empty");
267
- this.eventSubject.next({ type: "taskQueueDrained" /* taskQueueDrained */ });
275
+ this.eventSubject.next({ type: PoolEventType.taskQueueDrained });
268
276
  return;
269
277
  }
270
278
  this.run(availableWorker, nextTask);
@@ -272,13 +280,13 @@ var WorkerPool = class {
272
280
  taskCompletion(taskID) {
273
281
  return new Promise((resolve, reject) => {
274
282
  const eventSubscription = this.events().subscribe((event) => {
275
- if (event.type === "taskCompleted" /* taskCompleted */ && event.taskID === taskID) {
283
+ if (event.type === PoolEventType.taskCompleted && event.taskID === taskID) {
276
284
  eventSubscription.unsubscribe();
277
285
  resolve(event.returnValue);
278
- } else if (event.type === "taskFailed" /* taskFailed */ && event.taskID === taskID) {
286
+ } else if (event.type === PoolEventType.taskFailed && event.taskID === taskID) {
279
287
  eventSubscription.unsubscribe();
280
288
  reject(event.error);
281
- } else if (event.type === "terminated" /* terminated */) {
289
+ } else if (event.type === PoolEventType.terminated) {
282
290
  eventSubscription.unsubscribe();
283
291
  reject(new Error("Pool has been terminated before task was run."));
284
292
  }
@@ -296,7 +304,7 @@ var WorkerPool = class {
296
304
  const getCurrentlyRunningTasks = () => flatMap(this.workers, (worker) => worker.runningTasks);
297
305
  const taskFailures = [];
298
306
  const failureSubscription = this.eventObservable.subscribe((event) => {
299
- if (event.type === "taskFailed" /* taskFailed */) {
307
+ if (event.type === PoolEventType.taskFailed) {
300
308
  taskFailures.push(event.error);
301
309
  }
302
310
  });
@@ -304,7 +312,7 @@ var WorkerPool = class {
304
312
  const subscription = this.eventObservable.subscribe({
305
313
  error: reject,
306
314
  next(event) {
307
- if (event.type !== "taskQueueDrained" /* taskQueueDrained */) {
315
+ if (event.type !== PoolEventType.taskQueueDrained) {
308
316
  return;
309
317
  }
310
318
  subscription.unsubscribe();
@@ -323,10 +331,10 @@ var WorkerPool = class {
323
331
  const subscription = this.eventObservable.subscribe({
324
332
  error: reject,
325
333
  next(event) {
326
- if (event.type === "taskQueueDrained" /* taskQueueDrained */) {
334
+ if (event.type === PoolEventType.taskQueueDrained) {
327
335
  subscription.unsubscribe();
328
336
  resolve(settlementPromise);
329
- } else if (event.type === "taskFailed" /* taskFailed */) {
337
+ } else if (event.type === PoolEventType.taskFailed) {
330
338
  subscription.unsubscribe();
331
339
  reject(event.error);
332
340
  }
@@ -365,7 +373,7 @@ var WorkerPool = class {
365
373
  this.taskQueue = this.taskQueue.filter((someTask) => someTask !== task);
366
374
  this.eventSubject.next({
367
375
  taskID: task.id,
368
- type: "taskCanceled" /* taskCanceled */
376
+ type: PoolEventType.taskCanceled
369
377
  });
370
378
  },
371
379
  id: taskID,
@@ -381,7 +389,7 @@ var WorkerPool = class {
381
389
  this.taskQueue.push(task);
382
390
  this.eventSubject.next({
383
391
  taskID: task.id,
384
- type: "taskQueued" /* taskQueued */
392
+ type: PoolEventType.taskQueued
385
393
  });
386
394
  this.scheduleWork();
387
395
  return task;
@@ -393,7 +401,7 @@ var WorkerPool = class {
393
401
  }
394
402
  this.eventSubject.next({
395
403
  remainingQueue: [...this.taskQueue],
396
- type: "terminated" /* terminated */
404
+ type: PoolEventType.terminated
397
405
  });
398
406
  this.eventSubject.complete();
399
407
  await Promise.all(this.workers.map(async (worker) => Thread.terminate(await worker.init)));
@@ -461,6 +469,17 @@ function createPromiseWithResolver() {
461
469
  return [promise, exposedResolver];
462
470
  }
463
471
 
472
+ // src/types/master.ts
473
+ import { Enum as Enum2 } from "@ariestools/sdk/enum";
474
+ var WorkerEventType = Enum2({
475
+ /** The threads implementation encountered an internal error. */
476
+ internalError: "internalError",
477
+ /** The worker emitted a message. */
478
+ message: "message",
479
+ /** The worker terminated. */
480
+ termination: "termination"
481
+ });
482
+
464
483
  // src/master/invocation-proxy.ts
465
484
  import DebugLogger2 from "debug";
466
485
  import { multicast as multicast2, Observable as Observable3 } from "observable-fns";
@@ -618,13 +637,34 @@ function isTransferDescriptor(thing) {
618
637
  return thing != null && typeof thing === "object" && Reflect.get(thing, $transferable) === true;
619
638
  }
620
639
 
640
+ // src/types/messages.ts
641
+ import { Enum as Enum3 } from "@ariestools/sdk/enum";
642
+ var MasterMessageType = Enum3({
643
+ /** Cancel a previously submitted job. */
644
+ cancel: "cancel",
645
+ /** Run a job in the worker. */
646
+ run: "run"
647
+ });
648
+ var WorkerMessageType = Enum3({
649
+ /** A job failed. */
650
+ error: "error",
651
+ /** The worker exposed its callable API. */
652
+ init: "init",
653
+ /** A job produced a result. */
654
+ result: "result",
655
+ /** A job started running. */
656
+ running: "running",
657
+ /** An error escaped the worker job handler. */
658
+ uncaughtError: "uncaughtError"
659
+ });
660
+
621
661
  // src/master/invocation-proxy.ts
622
662
  var debugMessages = DebugLogger2("threads:master:messages");
623
663
  var nextJobUID = 1;
624
664
  var dedupe = (array) => [...new Set(array)];
625
- var isJobErrorMessage = (data) => data?.type === "error" /* error */;
626
- var isJobResultMessage = (data) => data?.type === "result" /* result */;
627
- var isJobStartMessage = (data) => data?.type === "running" /* running */;
665
+ var isJobErrorMessage = (data) => data?.type === WorkerMessageType.error;
666
+ var isJobResultMessage = (data) => data?.type === WorkerMessageType.result;
667
+ var isJobStartMessage = (data) => data?.type === WorkerMessageType.running;
628
668
  function createObservableForJob(worker, jobUID) {
629
669
  return new Observable3((observer) => {
630
670
  let asyncType;
@@ -663,7 +703,7 @@ function createObservableForJob(worker, jobUID) {
663
703
  return () => {
664
704
  if (asyncType === "observable" || asyncType === void 0) {
665
705
  const cancelMessage = {
666
- type: "cancel" /* cancel */,
706
+ type: MasterMessageType.cancel,
667
707
  uid: jobUID
668
708
  };
669
709
  worker.postMessage(cancelMessage);
@@ -701,7 +741,7 @@ function createProxyFunction(worker, method) {
701
741
  const runMessage = {
702
742
  args,
703
743
  method,
704
- type: "run" /* run */,
744
+ type: MasterMessageType.run,
705
745
  uid
706
746
  };
707
747
  debugMessages("Sending command to run function to worker:", runMessage);
@@ -758,7 +798,7 @@ function createEventObservable(worker, workerTermination) {
758
798
  const messageHandler = ((messageEvent) => {
759
799
  const workerEvent = {
760
800
  data: messageEvent.data,
761
- type: "message" /* message */
801
+ type: WorkerEventType.message
762
802
  };
763
803
  observer.next(workerEvent);
764
804
  });
@@ -766,7 +806,7 @@ function createEventObservable(worker, workerTermination) {
766
806
  debugThreadUtils("Unhandled promise rejection event in thread:", errorEvent);
767
807
  const workerEvent = {
768
808
  error: new Error(errorEvent.reason),
769
- type: "internalError" /* internalError */
809
+ type: WorkerEventType.internalError
770
810
  };
771
811
  observer.next(workerEvent);
772
812
  });
@@ -774,7 +814,7 @@ function createEventObservable(worker, workerTermination) {
774
814
  worker.addEventListener("unhandledrejection", rejectionHandler);
775
815
  void (async () => {
776
816
  await workerTermination;
777
- const terminationEvent = { type: "termination" /* termination */ };
817
+ const terminationEvent = { type: WorkerEventType.termination };
778
818
  worker.removeEventListener("message", messageHandler);
779
819
  worker.removeEventListener("unhandledrejection", rejectionHandler);
780
820
  observer.next(terminationEvent);
@@ -792,7 +832,7 @@ function createTerminator(worker) {
792
832
  return { terminate, termination };
793
833
  }
794
834
  function setPrivateThreadProps(raw, worker, workerEvents, terminate) {
795
- const workerErrors = workerEvents.filter((event) => event.type === "internalError" /* internalError */).map((errorEvent) => errorEvent.error);
835
+ const workerErrors = workerEvents.filter((event) => event.type === WorkerEventType.internalError).map((errorEvent) => errorEvent.error);
796
836
  const result = raw;
797
837
  const privateProps = [
798
838
  [$errors, { enumerable: false, value: workerErrors }],