@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
package/README.md CHANGED
@@ -7,6 +7,10 @@
7
7
 
8
8
  > Web workers & worker threads as simple as a function call
9
9
 
10
+ > Internal status: public-only package with zero consumers inside this monorepo.
11
+ > The `dead.package.internal` / `dead.repo.internal` ignores and coverage excludes
12
+ > for this package are intentional.
13
+
10
14
  ## Install
11
15
 
12
16
  Using npm:
@@ -6,17 +6,24 @@ declare global {
6
6
  * Register a custom serializer to extend the default serialization behavior for worker messages.
7
7
  * @param serializer - The serializer implementation to register.
8
8
  */
9
+ /** Register a custom serializer to extend the default serialization behavior for worker messages.
10
+ * @param serializer - The serializer implementation to register.
11
+ */
9
12
  export declare function registerSerializer(serializer: SerializerImplementation<JsonSerializable>): void;
10
13
  /**
11
14
  * Deserialize a message using the registered serializer.
12
15
  * @param message - The serialized message to deserialize.
13
16
  * @returns The deserialized value.
14
17
  */
15
- export declare function deserialize(message: JsonSerializable): any;
18
+ export declare function deserialize(message: JsonSerializable): unknown;
16
19
  /**
17
20
  * Serialize an input value using the registered serializer.
18
21
  * @param input - The value to serialize.
19
22
  * @returns The serialized message.
20
23
  */
24
+ /** Serialize an input value using the registered serializer.
25
+ * @param input - The value to serialize.
26
+ * @returns The serialized message.
27
+ */
21
28
  export declare function serialize(input: any): JsonSerializable;
22
29
  //# sourceMappingURL=common.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAAE,UAAU,EAAE,wBAAwB,EACvD,MAAM,kBAAkB,CAAA;AAGzB,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,oBAAoB,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAA;CACvD;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,wBAAwB,CAAC,gBAAgB,CAAC,QAExF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,GAAG,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,gBAAgB,CAEtD"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAAE,UAAU,EAAE,wBAAwB,EACvD,MAAM,kBAAkB,CAAA;AAGzB,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,oBAAoB,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAA;CACvD;AAID;;;GAGG;AACH;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,wBAAwB,CAAC,gBAAgB,CAAC,QAExF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAE9D;AAED;;;;GAIG;AACH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,gBAAgB,CAEtD"}
@@ -134,17 +134,25 @@ import {
134
134
  } from "observable-fns";
135
135
 
136
136
  // src/master/pool-types.ts
137
- var PoolEventType = /* @__PURE__ */ ((PoolEventType2) => {
138
- PoolEventType2["initialized"] = "initialized";
139
- PoolEventType2["taskCanceled"] = "taskCanceled";
140
- PoolEventType2["taskCompleted"] = "taskCompleted";
141
- PoolEventType2["taskFailed"] = "taskFailed";
142
- PoolEventType2["taskQueued"] = "taskQueued";
143
- PoolEventType2["taskQueueDrained"] = "taskQueueDrained";
144
- PoolEventType2["taskStart"] = "taskStart";
145
- PoolEventType2["terminated"] = "terminated";
146
- return PoolEventType2;
147
- })(PoolEventType || {});
137
+ import { Enum } from "@ariestools/sdk/enum";
138
+ var PoolEventType = Enum({
139
+ /** All workers in the pool have initialized. */
140
+ initialized: "initialized",
141
+ /** A queued task was canceled before execution. */
142
+ taskCanceled: "taskCanceled",
143
+ /** A task completed successfully. */
144
+ taskCompleted: "taskCompleted",
145
+ /** A task failed during execution. */
146
+ taskFailed: "taskFailed",
147
+ /** A task was added to the queue. */
148
+ taskQueued: "taskQueued",
149
+ /** The pool has no remaining queued tasks. */
150
+ taskQueueDrained: "taskQueueDrained",
151
+ /** A worker started executing a task. */
152
+ taskStart: "taskStart",
153
+ /** The pool and its workers were terminated. */
154
+ terminated: "terminated"
155
+ });
148
156
 
149
157
  // src/symbols.ts
150
158
  var $errors = /* @__PURE__ */ Symbol("thread.errors");
@@ -220,7 +228,7 @@ var WorkerPool = class {
220
228
  await Promise.all(workers.map((worker) => worker.init));
221
229
  this.eventSubject.next({
222
230
  size: workers.length,
223
- type: "initialized" /* initialized */
231
+ type: PoolEventType.initialized
224
232
  });
225
233
  } catch (error) {
226
234
  const initError = error instanceof Error ? error : new Error(String(error));
@@ -239,7 +247,7 @@ var WorkerPool = class {
239
247
  this.debug(`Running task #${task.id} on worker #${workerID}...`);
240
248
  this.eventSubject.next({
241
249
  taskID: task.id,
242
- type: "taskStart" /* taskStart */,
250
+ type: PoolEventType.taskStart,
243
251
  workerID
244
252
  });
245
253
  try {
@@ -248,7 +256,7 @@ var WorkerPool = class {
248
256
  this.eventSubject.next({
249
257
  returnValue,
250
258
  taskID: task.id,
251
- type: "taskCompleted" /* taskCompleted */,
259
+ type: PoolEventType.taskCompleted,
252
260
  workerID
253
261
  });
254
262
  } catch (ex) {
@@ -257,7 +265,7 @@ var WorkerPool = class {
257
265
  this.eventSubject.next({
258
266
  error,
259
267
  taskID: task.id,
260
- type: "taskFailed" /* taskFailed */,
268
+ type: PoolEventType.taskFailed,
261
269
  workerID
262
270
  });
263
271
  }
@@ -286,7 +294,7 @@ var WorkerPool = class {
286
294
  const nextTask = this.taskQueue.shift();
287
295
  if (!nextTask) {
288
296
  this.debug("Task queue is empty");
289
- this.eventSubject.next({ type: "taskQueueDrained" /* taskQueueDrained */ });
297
+ this.eventSubject.next({ type: PoolEventType.taskQueueDrained });
290
298
  return;
291
299
  }
292
300
  this.run(availableWorker, nextTask);
@@ -294,13 +302,13 @@ var WorkerPool = class {
294
302
  taskCompletion(taskID) {
295
303
  return new Promise((resolve, reject) => {
296
304
  const eventSubscription = this.events().subscribe((event) => {
297
- if (event.type === "taskCompleted" /* taskCompleted */ && event.taskID === taskID) {
305
+ if (event.type === PoolEventType.taskCompleted && event.taskID === taskID) {
298
306
  eventSubscription.unsubscribe();
299
307
  resolve(event.returnValue);
300
- } else if (event.type === "taskFailed" /* taskFailed */ && event.taskID === taskID) {
308
+ } else if (event.type === PoolEventType.taskFailed && event.taskID === taskID) {
301
309
  eventSubscription.unsubscribe();
302
310
  reject(event.error);
303
- } else if (event.type === "terminated" /* terminated */) {
311
+ } else if (event.type === PoolEventType.terminated) {
304
312
  eventSubscription.unsubscribe();
305
313
  reject(new Error("Pool has been terminated before task was run."));
306
314
  }
@@ -318,7 +326,7 @@ var WorkerPool = class {
318
326
  const getCurrentlyRunningTasks = () => flatMap(this.workers, (worker) => worker.runningTasks);
319
327
  const taskFailures = [];
320
328
  const failureSubscription = this.eventObservable.subscribe((event) => {
321
- if (event.type === "taskFailed" /* taskFailed */) {
329
+ if (event.type === PoolEventType.taskFailed) {
322
330
  taskFailures.push(event.error);
323
331
  }
324
332
  });
@@ -326,7 +334,7 @@ var WorkerPool = class {
326
334
  const subscription = this.eventObservable.subscribe({
327
335
  error: reject,
328
336
  next(event) {
329
- if (event.type !== "taskQueueDrained" /* taskQueueDrained */) {
337
+ if (event.type !== PoolEventType.taskQueueDrained) {
330
338
  return;
331
339
  }
332
340
  subscription.unsubscribe();
@@ -345,10 +353,10 @@ var WorkerPool = class {
345
353
  const subscription = this.eventObservable.subscribe({
346
354
  error: reject,
347
355
  next(event) {
348
- if (event.type === "taskQueueDrained" /* taskQueueDrained */) {
356
+ if (event.type === PoolEventType.taskQueueDrained) {
349
357
  subscription.unsubscribe();
350
358
  resolve(settlementPromise);
351
- } else if (event.type === "taskFailed" /* taskFailed */) {
359
+ } else if (event.type === PoolEventType.taskFailed) {
352
360
  subscription.unsubscribe();
353
361
  reject(event.error);
354
362
  }
@@ -387,7 +395,7 @@ var WorkerPool = class {
387
395
  this.taskQueue = this.taskQueue.filter((someTask) => someTask !== task);
388
396
  this.eventSubject.next({
389
397
  taskID: task.id,
390
- type: "taskCanceled" /* taskCanceled */
398
+ type: PoolEventType.taskCanceled
391
399
  });
392
400
  },
393
401
  id: taskID,
@@ -403,7 +411,7 @@ var WorkerPool = class {
403
411
  this.taskQueue.push(task);
404
412
  this.eventSubject.next({
405
413
  taskID: task.id,
406
- type: "taskQueued" /* taskQueued */
414
+ type: PoolEventType.taskQueued
407
415
  });
408
416
  this.scheduleWork();
409
417
  return task;
@@ -415,7 +423,7 @@ var WorkerPool = class {
415
423
  }
416
424
  this.eventSubject.next({
417
425
  remainingQueue: [...this.taskQueue],
418
- type: "terminated" /* terminated */
426
+ type: PoolEventType.terminated
419
427
  });
420
428
  this.eventSubject.complete();
421
429
  await Promise.all(this.workers.map(async (worker) => Thread.terminate(await worker.init)));
@@ -452,6 +460,17 @@ function createPromiseWithResolver() {
452
460
  return [promise, exposedResolver];
453
461
  }
454
462
 
463
+ // src/types/master.ts
464
+ import { Enum as Enum2 } from "@ariestools/sdk/enum";
465
+ var WorkerEventType = Enum2({
466
+ /** The threads implementation encountered an internal error. */
467
+ internalError: "internalError",
468
+ /** The worker emitted a message. */
469
+ message: "message",
470
+ /** The worker terminated. */
471
+ termination: "termination"
472
+ });
473
+
455
474
  // src/master/invocation-proxy.ts
456
475
  import DebugLogger2 from "debug";
457
476
  import { multicast as multicast2, Observable as Observable3 } from "observable-fns";
@@ -626,13 +645,34 @@ function Transfer(payload, transferables) {
626
645
  return descriptor;
627
646
  }
628
647
 
648
+ // src/types/messages.ts
649
+ import { Enum as Enum3 } from "@ariestools/sdk/enum";
650
+ var MasterMessageType = Enum3({
651
+ /** Cancel a previously submitted job. */
652
+ cancel: "cancel",
653
+ /** Run a job in the worker. */
654
+ run: "run"
655
+ });
656
+ var WorkerMessageType = Enum3({
657
+ /** A job failed. */
658
+ error: "error",
659
+ /** The worker exposed its callable API. */
660
+ init: "init",
661
+ /** A job produced a result. */
662
+ result: "result",
663
+ /** A job started running. */
664
+ running: "running",
665
+ /** An error escaped the worker job handler. */
666
+ uncaughtError: "uncaughtError"
667
+ });
668
+
629
669
  // src/master/invocation-proxy.ts
630
670
  var debugMessages = DebugLogger2("threads:master:messages");
631
671
  var nextJobUID = 1;
632
672
  var dedupe = (array) => [...new Set(array)];
633
- var isJobErrorMessage = (data) => data?.type === "error" /* error */;
634
- var isJobResultMessage = (data) => data?.type === "result" /* result */;
635
- var isJobStartMessage = (data) => data?.type === "running" /* running */;
673
+ var isJobErrorMessage = (data) => data?.type === WorkerMessageType.error;
674
+ var isJobResultMessage = (data) => data?.type === WorkerMessageType.result;
675
+ var isJobStartMessage = (data) => data?.type === WorkerMessageType.running;
636
676
  function createObservableForJob(worker, jobUID) {
637
677
  return new Observable3((observer) => {
638
678
  let asyncType;
@@ -671,7 +711,7 @@ function createObservableForJob(worker, jobUID) {
671
711
  return () => {
672
712
  if (asyncType === "observable" || asyncType === void 0) {
673
713
  const cancelMessage = {
674
- type: "cancel" /* cancel */,
714
+ type: MasterMessageType.cancel,
675
715
  uid: jobUID
676
716
  };
677
717
  worker.postMessage(cancelMessage);
@@ -709,7 +749,7 @@ function createProxyFunction(worker, method) {
709
749
  const runMessage = {
710
750
  args,
711
751
  method,
712
- type: "run" /* run */,
752
+ type: MasterMessageType.run,
713
753
  uid
714
754
  };
715
755
  debugMessages("Sending command to run function to worker:", runMessage);
@@ -766,7 +806,7 @@ function createEventObservable(worker, workerTermination) {
766
806
  const messageHandler = ((messageEvent) => {
767
807
  const workerEvent = {
768
808
  data: messageEvent.data,
769
- type: "message" /* message */
809
+ type: WorkerEventType.message
770
810
  };
771
811
  observer.next(workerEvent);
772
812
  });
@@ -774,7 +814,7 @@ function createEventObservable(worker, workerTermination) {
774
814
  debugThreadUtils("Unhandled promise rejection event in thread:", errorEvent);
775
815
  const workerEvent = {
776
816
  error: new Error(errorEvent.reason),
777
- type: "internalError" /* internalError */
817
+ type: WorkerEventType.internalError
778
818
  };
779
819
  observer.next(workerEvent);
780
820
  });
@@ -782,7 +822,7 @@ function createEventObservable(worker, workerTermination) {
782
822
  worker.addEventListener("unhandledrejection", rejectionHandler);
783
823
  void (async () => {
784
824
  await workerTermination;
785
- const terminationEvent = { type: "termination" /* termination */ };
825
+ const terminationEvent = { type: WorkerEventType.termination };
786
826
  worker.removeEventListener("message", messageHandler);
787
827
  worker.removeEventListener("unhandledrejection", rejectionHandler);
788
828
  observer.next(terminationEvent);
@@ -800,7 +840,7 @@ function createTerminator(worker) {
800
840
  return { terminate, termination };
801
841
  }
802
842
  function setPrivateThreadProps(raw, worker, workerEvents, terminate) {
803
- const workerErrors = workerEvents.filter((event) => event.type === "internalError" /* internalError */).map((errorEvent) => errorEvent.error);
843
+ const workerErrors = workerEvents.filter((event) => event.type === WorkerEventType.internalError).map((errorEvent) => errorEvent.error);
804
844
  const result = raw;
805
845
  const privateProps = [
806
846
  [$errors, { enumerable: false, value: workerErrors }],