@xylabs/threads 4.12.44 → 4.13.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 (116) hide show
  1. package/dist/browser/common-Cuiya5FG.d.ts +21 -0
  2. package/dist/browser/index-browser-B8TCfn7g.d.ts +20 -0
  3. package/dist/browser/index-browser.d.ts +8 -0
  4. package/dist/browser/index-browser.mjs +209 -119
  5. package/dist/browser/index-browser.mjs.map +1 -1
  6. package/dist/browser/master/implementation.browser.d.ts +9 -0
  7. package/dist/browser/master/implementation.browser.mjs +36 -11
  8. package/dist/browser/master/implementation.browser.mjs.map +1 -1
  9. package/dist/browser/master/index-browser.d.ts +7 -0
  10. package/dist/browser/master/index-browser.mjs +201 -117
  11. package/dist/browser/master/index-browser.mjs.map +1 -1
  12. package/dist/browser/master/pool-browser.d.ts +104 -0
  13. package/dist/browser/master/pool-browser.mjs +65 -53
  14. package/dist/browser/master/pool-browser.mjs.map +1 -1
  15. package/dist/browser/master-D4MAqspp.d.ts +109 -0
  16. package/dist/browser/transferable-Cv9t618f.d.ts +15 -0
  17. package/dist/{types → browser}/worker/worker.browser.d.ts +8 -8
  18. package/dist/browser/worker/worker.browser.mjs +79 -43
  19. package/dist/browser/worker/worker.browser.mjs.map +1 -1
  20. package/dist/{types/types/worker.d.ts → browser/worker-04t9iwDh.d.ts} +5 -5
  21. package/dist/neutral/master/register.d.ts +2 -0
  22. package/dist/neutral/master/register.mjs +223 -33
  23. package/dist/neutral/master/register.mjs.map +1 -1
  24. package/dist/neutral/master/spawn.d.ts +19 -0
  25. package/dist/neutral/master/spawn.mjs +106 -53
  26. package/dist/neutral/master/spawn.mjs.map +1 -1
  27. package/dist/neutral/master/thread.d.ts +12 -0
  28. package/dist/neutral/master/thread.mjs +4 -0
  29. package/dist/neutral/master/thread.mjs.map +1 -1
  30. package/dist/neutral/master-DDdg1BKb.d.ts +74 -0
  31. package/dist/{types → neutral}/observable-promise.d.ts +5 -18
  32. package/dist/neutral/observable-promise.mjs +27 -20
  33. package/dist/neutral/observable-promise.mjs.map +1 -1
  34. package/dist/neutral/observable.d.ts +13 -0
  35. package/dist/neutral/observable.mjs +12 -3
  36. package/dist/neutral/observable.mjs.map +1 -1
  37. package/dist/{types → neutral}/types/messages.d.ts +12 -11
  38. package/dist/neutral/types/messages.mjs +19 -0
  39. package/dist/neutral/types/messages.mjs.map +1 -0
  40. package/dist/node/common-Cuiya5FG.d.ts +21 -0
  41. package/dist/node/index-node-DB1sNl0d.d.ts +66 -0
  42. package/dist/node/index-node.d.ts +8 -0
  43. package/dist/node/index-node.mjs +396 -141
  44. package/dist/node/index-node.mjs.map +1 -1
  45. package/dist/node/master/implementation.node.d.ts +9 -0
  46. package/dist/node/master/implementation.node.mjs +223 -33
  47. package/dist/node/master/implementation.node.mjs.map +1 -1
  48. package/dist/node/master/index-node.d.ts +7 -0
  49. package/dist/node/master/index-node.mjs +388 -139
  50. package/dist/node/master/index-node.mjs.map +1 -1
  51. package/dist/node/master/pool-node.d.ts +51 -0
  52. package/dist/node/master/pool-node.mjs +285 -86
  53. package/dist/node/master/pool-node.mjs.map +1 -1
  54. package/dist/node/master-BjjSaJAj.d.ts +109 -0
  55. package/dist/{types/master/pool-types.d.ts → node/pool-types-Bzei07Nj.d.ts} +16 -24
  56. package/dist/node/transferable-Cv9t618f.d.ts +15 -0
  57. package/dist/{types → node}/worker/worker.node.d.ts +11 -10
  58. package/dist/node/worker/worker.node.mjs +80 -43
  59. package/dist/node/worker/worker.node.mjs.map +1 -1
  60. package/dist/node/worker-04t9iwDh.d.ts +12 -0
  61. package/package.json +29 -22
  62. package/src/master/invocation-proxy.ts +2 -0
  63. package/src/transferable.ts +2 -0
  64. package/src/types/worker.ts +1 -0
  65. package/src/worker/WorkerGlobalScope.ts +1 -0
  66. package/src/worker/worker.browser.ts +1 -1
  67. package/dist/types/common.d.ts +0 -8
  68. package/dist/types/common.d.ts.map +0 -1
  69. package/dist/types/index-browser.d.ts +0 -9
  70. package/dist/types/index-browser.d.ts.map +0 -1
  71. package/dist/types/index-node.d.ts +0 -9
  72. package/dist/types/index-node.d.ts.map +0 -1
  73. package/dist/types/master/get-bundle-url.browser.d.ts +0 -3
  74. package/dist/types/master/get-bundle-url.browser.d.ts.map +0 -1
  75. package/dist/types/master/implementation.browser.d.ts +0 -5
  76. package/dist/types/master/implementation.browser.d.ts.map +0 -1
  77. package/dist/types/master/implementation.node.d.ts +0 -5
  78. package/dist/types/master/implementation.node.d.ts.map +0 -1
  79. package/dist/types/master/index-browser.d.ts +0 -13
  80. package/dist/types/master/index-browser.d.ts.map +0 -1
  81. package/dist/types/master/index-node.d.ts +0 -13
  82. package/dist/types/master/index-node.d.ts.map +0 -1
  83. package/dist/types/master/invocation-proxy.d.ts +0 -4
  84. package/dist/types/master/invocation-proxy.d.ts.map +0 -1
  85. package/dist/types/master/pool-browser.d.ts +0 -93
  86. package/dist/types/master/pool-browser.d.ts.map +0 -1
  87. package/dist/types/master/pool-node.d.ts +0 -93
  88. package/dist/types/master/pool-node.d.ts.map +0 -1
  89. package/dist/types/master/pool-types.d.ts.map +0 -1
  90. package/dist/types/master/register.d.ts +0 -2
  91. package/dist/types/master/register.d.ts.map +0 -1
  92. package/dist/types/master/spawn.d.ts +0 -21
  93. package/dist/types/master/spawn.d.ts.map +0 -1
  94. package/dist/types/master/thread.d.ts +0 -13
  95. package/dist/types/master/thread.d.ts.map +0 -1
  96. package/dist/types/observable-promise.d.ts.map +0 -1
  97. package/dist/types/observable.d.ts +0 -21
  98. package/dist/types/observable.d.ts.map +0 -1
  99. package/dist/types/promise.d.ts +0 -6
  100. package/dist/types/promise.d.ts.map +0 -1
  101. package/dist/types/serializers.d.ts +0 -17
  102. package/dist/types/serializers.d.ts.map +0 -1
  103. package/dist/types/symbols.d.ts +0 -6
  104. package/dist/types/symbols.d.ts.map +0 -1
  105. package/dist/types/transferable.d.ts +0 -43
  106. package/dist/types/transferable.d.ts.map +0 -1
  107. package/dist/types/types/master.d.ts +0 -99
  108. package/dist/types/types/master.d.ts.map +0 -1
  109. package/dist/types/types/messages.d.ts.map +0 -1
  110. package/dist/types/types/worker.d.ts.map +0 -1
  111. package/dist/types/worker/WorkerGlobalScope.d.ts +0 -6
  112. package/dist/types/worker/WorkerGlobalScope.d.ts.map +0 -1
  113. package/dist/types/worker/expose.d.ts +0 -4
  114. package/dist/types/worker/expose.d.ts.map +0 -1
  115. package/dist/types/worker/worker.browser.d.ts.map +0 -1
  116. package/dist/types/worker/worker.node.d.ts.map +0 -1
@@ -1,3 +1,6 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
1
4
  // src/serializers.ts
2
5
  function extendSerializer(extend, implementation2) {
3
6
  const fallbackDeserializer = extend.deserialize.bind(extend);
@@ -11,6 +14,7 @@ function extendSerializer(extend, implementation2) {
11
14
  }
12
15
  };
13
16
  }
17
+ __name(extendSerializer, "extendSerializer");
14
18
  var DefaultErrorSerializer = {
15
19
  deserialize(message) {
16
20
  return Object.assign(new Error(message.message), {
@@ -27,7 +31,7 @@ var DefaultErrorSerializer = {
27
31
  };
28
32
  }
29
33
  };
30
- var isSerializedError = (thing) => thing && typeof thing === "object" && "__error_marker" in thing && thing.__error_marker === "$$error";
34
+ var isSerializedError = /* @__PURE__ */ __name((thing) => thing && typeof thing === "object" && "__error_marker" in thing && thing.__error_marker === "$$error", "isSerializedError");
31
35
  var DefaultSerializer = {
32
36
  deserialize(message) {
33
37
  return isSerializedError(message) ? DefaultErrorSerializer.deserialize(message) : message;
@@ -42,12 +46,15 @@ globalThis.registeredSerializer = globalThis.registeredSerializer ?? DefaultSeri
42
46
  function registerSerializer(serializer) {
43
47
  globalThis.registeredSerializer = extendSerializer(globalThis.registeredSerializer, serializer);
44
48
  }
49
+ __name(registerSerializer, "registerSerializer");
45
50
  function deserialize(message) {
46
51
  return globalThis.registeredSerializer.deserialize(message);
47
52
  }
53
+ __name(deserialize, "deserialize");
48
54
  function serialize(input) {
49
55
  return globalThis.registeredSerializer.serialize(input);
50
56
  }
57
+ __name(serialize, "serialize");
51
58
 
52
59
  // src/master/get-bundle-url.browser.ts
53
60
  var bundleURL;
@@ -57,6 +64,7 @@ function getBundleURLCached() {
57
64
  }
58
65
  return bundleURL;
59
66
  }
67
+ __name(getBundleURLCached, "getBundleURLCached");
60
68
  function getBundleURL() {
61
69
  try {
62
70
  throw new Error("getBundleURL failed");
@@ -69,28 +77,39 @@ function getBundleURL() {
69
77
  }
70
78
  return "/";
71
79
  }
80
+ __name(getBundleURL, "getBundleURL");
72
81
  function getBaseURL(url) {
73
82
  return ("" + url).replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\/\/.+)?\/[^/]+(?:\?.*)?$/, "$1") + "/";
74
83
  }
84
+ __name(getBaseURL, "getBaseURL");
75
85
 
76
86
  // src/master/implementation.browser.ts
77
87
  var defaultPoolSize = typeof navigator !== "undefined" && navigator.hardwareConcurrency ? navigator.hardwareConcurrency : 4;
78
- var isAbsoluteURL = (value) => /^[A-Za-z][\d+.A-Za-z\-]*:/.test(value);
88
+ var isAbsoluteURL = /* @__PURE__ */ __name((value) => /^[A-Za-z][\d+.A-Za-z\-]*:/.test(value), "isAbsoluteURL");
79
89
  function createSourceBlobURL(code) {
80
- const blob = new Blob([code], { type: "application/javascript" });
90
+ const blob = new Blob([
91
+ code
92
+ ], {
93
+ type: "application/javascript"
94
+ });
81
95
  return URL.createObjectURL(blob);
82
96
  }
97
+ __name(createSourceBlobURL, "createSourceBlobURL");
83
98
  function selectWorkerImplementation() {
84
99
  if (typeof Worker === "undefined") {
85
100
  return class NoWebWorker {
101
+ static {
102
+ __name(this, "NoWebWorker");
103
+ }
86
104
  constructor() {
87
- throw new Error(
88
- "No web worker implementation available. You might have tried to spawn a worker within a worker in a browser that doesn't support workers in workers."
89
- );
105
+ throw new Error("No web worker implementation available. You might have tried to spawn a worker within a worker in a browser that doesn't support workers in workers.");
90
106
  }
91
107
  };
92
108
  }
93
- class WebWorker extends Worker {
109
+ let WebWorker = class WebWorker extends Worker {
110
+ static {
111
+ __name(this, "WebWorker");
112
+ }
94
113
  constructor(url, options) {
95
114
  if (typeof url === "string" && options && options._baseURL) {
96
115
  url = new URL(url, options._baseURL);
@@ -105,22 +124,30 @@ function selectWorkerImplementation() {
105
124
  }
106
125
  super(url, options);
107
126
  }
108
- }
109
- class BlobWorker2 extends WebWorker {
127
+ };
128
+ let BlobWorker2 = class BlobWorker3 extends WebWorker {
129
+ static {
130
+ __name(this, "BlobWorker");
131
+ }
110
132
  constructor(blob, options) {
111
133
  const url = globalThis.URL.createObjectURL(blob);
112
134
  super(url, options);
113
135
  }
114
136
  static fromText(source, options) {
115
- const blob = new globalThis.Blob([source], { type: "text/javascript" });
116
- return new BlobWorker2(blob, options);
137
+ const blob = new globalThis.Blob([
138
+ source
139
+ ], {
140
+ type: "text/javascript"
141
+ });
142
+ return new BlobWorker3(blob, options);
117
143
  }
118
- }
144
+ };
119
145
  return {
120
146
  blob: BlobWorker2,
121
147
  default: WebWorker
122
148
  };
123
149
  }
150
+ __name(selectWorkerImplementation, "selectWorkerImplementation");
124
151
  var implementation;
125
152
  function getWorkerImplementation() {
126
153
  if (!implementation) {
@@ -128,21 +155,19 @@ function getWorkerImplementation() {
128
155
  }
129
156
  return implementation;
130
157
  }
158
+ __name(getWorkerImplementation, "getWorkerImplementation");
131
159
  function isWorkerRuntime() {
132
160
  const isWindowContext = typeof globalThis !== "undefined" && typeof Window !== "undefined" && globalThis instanceof Window;
133
161
  return typeof globalThis !== "undefined" && self["postMessage"] && !isWindowContext ? true : false;
134
162
  }
163
+ __name(isWorkerRuntime, "isWorkerRuntime");
135
164
 
136
165
  // src/master/pool-browser.ts
137
166
  import DebugLogger from "debug";
138
- import {
139
- multicast,
140
- Observable,
141
- Subject
142
- } from "observable-fns";
167
+ import { multicast, Observable, Subject } from "observable-fns";
143
168
 
144
169
  // src/master/pool-types.ts
145
- var PoolEventType = /* @__PURE__ */ ((PoolEventType2) => {
170
+ var PoolEventType = /* @__PURE__ */ function(PoolEventType2) {
146
171
  PoolEventType2["initialized"] = "initialized";
147
172
  PoolEventType2["taskCanceled"] = "taskCanceled";
148
173
  PoolEventType2["taskCompleted"] = "taskCompleted";
@@ -152,7 +177,7 @@ var PoolEventType = /* @__PURE__ */ ((PoolEventType2) => {
152
177
  PoolEventType2["taskStart"] = "taskStart";
153
178
  PoolEventType2["terminated"] = "terminated";
154
179
  return PoolEventType2;
155
- })(PoolEventType || {});
180
+ }({});
156
181
 
157
182
  // src/symbols.ts
158
183
  var $errors = Symbol("thread.errors");
@@ -165,6 +190,7 @@ var $worker = Symbol("thread.worker");
165
190
  function fail(message) {
166
191
  throw new Error(message);
167
192
  }
193
+ __name(fail, "fail");
168
194
  var Thread = {
169
195
  /** Return an observable that can be used to subscribe to all errors happening in the thread. */
170
196
  errors(thread) {
@@ -189,24 +215,33 @@ function createArray(size) {
189
215
  }
190
216
  return array;
191
217
  }
218
+ __name(createArray, "createArray");
192
219
  function delay(ms) {
193
220
  return new Promise((resolve) => setTimeout(resolve, ms));
194
221
  }
222
+ __name(delay, "delay");
195
223
  function flatMap(array, mapper) {
196
- return array.reduce((flattened, element) => [...flattened, ...mapper(element)], []);
224
+ return array.reduce((flattened, element) => [
225
+ ...flattened,
226
+ ...mapper(element)
227
+ ], []);
197
228
  }
229
+ __name(flatMap, "flatMap");
198
230
  function slugify(text) {
199
231
  return text.replaceAll(/\W/g, " ").trim().replaceAll(/\s+/g, "-");
200
232
  }
233
+ __name(slugify, "slugify");
201
234
  function spawnWorkers(spawnWorker, count) {
202
- return createArray(count).map(
203
- () => ({
204
- init: spawnWorker(),
205
- runningTasks: []
206
- })
207
- );
208
- }
209
- var WorkerPool = class {
235
+ return createArray(count).map(() => ({
236
+ init: spawnWorker(),
237
+ runningTasks: []
238
+ }));
239
+ }
240
+ __name(spawnWorkers, "spawnWorkers");
241
+ var WorkerPool = class WorkerPool2 {
242
+ static {
243
+ __name(this, "WorkerPool");
244
+ }
210
245
  static EventType = PoolEventType;
211
246
  debug;
212
247
  eventObservable;
@@ -218,23 +253,22 @@ var WorkerPool = class {
218
253
  nextTaskID = 1;
219
254
  taskQueue = [];
220
255
  constructor(spawnWorker, optionsOrSize) {
221
- const options = typeof optionsOrSize === "number" ? { size: optionsOrSize } : optionsOrSize || {};
256
+ const options = typeof optionsOrSize === "number" ? {
257
+ size: optionsOrSize
258
+ } : optionsOrSize || {};
222
259
  const { size = defaultPoolSize } = options;
223
260
  this.debug = DebugLogger(`threads:pool:${slugify(options.name || String(nextPoolID++))}`);
224
261
  this.options = options;
225
262
  this.workers = spawnWorkers(spawnWorker, size);
226
263
  this.eventObservable = multicast(Observable.from(this.eventSubject));
227
- Promise.all(this.workers.map((worker) => worker.init)).then(
228
- () => this.eventSubject.next({
229
- size: this.workers.length,
230
- type: "initialized" /* initialized */
231
- }),
232
- (error) => {
233
- this.debug("Error while initializing pool worker:", error);
234
- this.eventSubject.error(error);
235
- this.initErrors.push(error);
236
- }
237
- );
264
+ Promise.all(this.workers.map((worker) => worker.init)).then(() => this.eventSubject.next({
265
+ size: this.workers.length,
266
+ type: PoolEventType.initialized
267
+ }), (error) => {
268
+ this.debug("Error while initializing pool worker:", error);
269
+ this.eventSubject.error(error);
270
+ this.initErrors.push(error);
271
+ });
238
272
  }
239
273
  findIdlingWorker() {
240
274
  const { concurrency = 1 } = this.options;
@@ -245,7 +279,7 @@ var WorkerPool = class {
245
279
  this.debug(`Running task #${task.id} on worker #${workerID}...`);
246
280
  this.eventSubject.next({
247
281
  taskID: task.id,
248
- type: "taskStart" /* taskStart */,
282
+ type: PoolEventType.taskStart,
249
283
  workerID
250
284
  });
251
285
  try {
@@ -254,7 +288,7 @@ var WorkerPool = class {
254
288
  this.eventSubject.next({
255
289
  returnValue,
256
290
  taskID: task.id,
257
- type: "taskCompleted" /* taskCompleted */,
291
+ type: PoolEventType.taskCompleted,
258
292
  workerID
259
293
  });
260
294
  } catch (ex) {
@@ -263,16 +297,16 @@ var WorkerPool = class {
263
297
  this.eventSubject.next({
264
298
  error,
265
299
  taskID: task.id,
266
- type: "taskFailed" /* taskFailed */,
300
+ type: PoolEventType.taskFailed,
267
301
  workerID
268
302
  });
269
303
  }
270
304
  }
271
305
  run(worker, task) {
272
306
  const runPromise = (async () => {
273
- const removeTaskFromWorkersRunningTasks = () => {
307
+ const removeTaskFromWorkersRunningTasks = /* @__PURE__ */ __name(() => {
274
308
  worker.runningTasks = worker.runningTasks.filter((someRunPromise) => someRunPromise !== runPromise);
275
- };
309
+ }, "removeTaskFromWorkersRunningTasks");
276
310
  await delay(0);
277
311
  try {
278
312
  await this.runPoolTask(worker, task);
@@ -292,7 +326,9 @@ var WorkerPool = class {
292
326
  const nextTask = this.taskQueue.shift();
293
327
  if (!nextTask) {
294
328
  this.debug("Task queue is empty");
295
- this.eventSubject.next({ type: "taskQueueDrained" /* taskQueueDrained */ });
329
+ this.eventSubject.next({
330
+ type: PoolEventType.taskQueueDrained
331
+ });
296
332
  return;
297
333
  }
298
334
  this.run(availableWorker, nextTask);
@@ -300,13 +336,13 @@ var WorkerPool = class {
300
336
  taskCompletion(taskID) {
301
337
  return new Promise((resolve, reject) => {
302
338
  const eventSubscription = this.events().subscribe((event) => {
303
- if (event.type === "taskCompleted" /* taskCompleted */ && event.taskID === taskID) {
339
+ if (event.type === PoolEventType.taskCompleted && event.taskID === taskID) {
304
340
  eventSubscription.unsubscribe();
305
341
  resolve(event.returnValue);
306
- } else if (event.type === "taskFailed" /* taskFailed */ && event.taskID === taskID) {
342
+ } else if (event.type === PoolEventType.taskFailed && event.taskID === taskID) {
307
343
  eventSubscription.unsubscribe();
308
344
  reject(event.error);
309
- } else if (event.type === "terminated" /* terminated */) {
345
+ } else if (event.type === PoolEventType.terminated) {
310
346
  eventSubscription.unsubscribe();
311
347
  reject(new Error("Pool has been terminated before task was run."));
312
348
  }
@@ -314,10 +350,10 @@ var WorkerPool = class {
314
350
  });
315
351
  }
316
352
  async settled(allowResolvingImmediately = false) {
317
- const getCurrentlyRunningTasks = () => flatMap(this.workers, (worker) => worker.runningTasks);
353
+ const getCurrentlyRunningTasks = /* @__PURE__ */ __name(() => flatMap(this.workers, (worker) => worker.runningTasks), "getCurrentlyRunningTasks");
318
354
  const taskFailures = [];
319
355
  const failureSubscription = this.eventObservable.subscribe((event) => {
320
- if (event.type === "taskFailed" /* taskFailed */) {
356
+ if (event.type === PoolEventType.taskFailed) {
321
357
  taskFailures.push(event.error);
322
358
  }
323
359
  });
@@ -332,12 +368,11 @@ var WorkerPool = class {
332
368
  const subscription = this.eventObservable.subscribe({
333
369
  error: reject,
334
370
  next(event) {
335
- if (event.type === "taskQueueDrained" /* taskQueueDrained */) {
371
+ if (event.type === PoolEventType.taskQueueDrained) {
336
372
  subscription.unsubscribe();
337
373
  resolve(void 0);
338
374
  }
339
375
  }
340
- // make a pool-wide error reject the completed() result promise
341
376
  });
342
377
  });
343
378
  await Promise.allSettled(getCurrentlyRunningTasks());
@@ -350,18 +385,20 @@ var WorkerPool = class {
350
385
  const subscription = this.eventObservable.subscribe({
351
386
  error: reject,
352
387
  next(event) {
353
- if (event.type === "taskQueueDrained" /* taskQueueDrained */) {
388
+ if (event.type === PoolEventType.taskQueueDrained) {
354
389
  subscription.unsubscribe();
355
390
  resolve(settlementPromise);
356
- } else if (event.type === "taskFailed" /* taskFailed */) {
391
+ } else if (event.type === PoolEventType.taskFailed) {
357
392
  subscription.unsubscribe();
358
393
  reject(event.error);
359
394
  }
360
395
  }
361
- // make a pool-wide error reject the completed() result promise
362
396
  });
363
397
  });
364
- const errors = await Promise.race([settlementPromise, earlyExitPromise]);
398
+ const errors = await Promise.race([
399
+ settlementPromise,
400
+ earlyExitPromise
401
+ ]);
365
402
  if (errors.length > 0) {
366
403
  throw errors[0];
367
404
  }
@@ -383,28 +420,26 @@ var WorkerPool = class {
383
420
  this.debug(`Task #${taskID} errored:`, error);
384
421
  });
385
422
  const task = {
386
- cancel: () => {
423
+ cancel: /* @__PURE__ */ __name(() => {
387
424
  if (!this.taskQueue.includes(task)) return;
388
425
  this.taskQueue = this.taskQueue.filter((someTask) => someTask !== task);
389
426
  this.eventSubject.next({
390
427
  taskID: task.id,
391
- type: "taskCanceled" /* taskCanceled */
428
+ type: PoolEventType.taskCanceled
392
429
  });
393
- },
430
+ }, "cancel"),
394
431
  id: taskID,
395
432
  run: taskFunction,
396
433
  then: taskCompletion.then.bind(taskCompletion)
397
434
  };
398
435
  if (this.taskQueue.length >= maxQueuedJobs) {
399
- throw new Error(
400
- "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."
401
- );
436
+ 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.");
402
437
  }
403
438
  this.debug(`Queueing task #${task.id}...`);
404
439
  this.taskQueue.push(task);
405
440
  this.eventSubject.next({
406
441
  taskID: task.id,
407
- type: "taskQueued" /* taskQueued */
442
+ type: PoolEventType.taskQueued
408
443
  });
409
444
  this.scheduleWork();
410
445
  return task;
@@ -415,8 +450,10 @@ var WorkerPool = class {
415
450
  await this.completed(true);
416
451
  }
417
452
  this.eventSubject.next({
418
- remainingQueue: [...this.taskQueue],
419
- type: "terminated" /* terminated */
453
+ remainingQueue: [
454
+ ...this.taskQueue
455
+ ],
456
+ type: PoolEventType.terminated
420
457
  });
421
458
  this.eventSubject.complete();
422
459
  await Promise.all(this.workers.map(async (worker) => Thread.terminate(await worker.init)));
@@ -425,6 +462,7 @@ var WorkerPool = class {
425
462
  function PoolConstructor(spawnWorker, optionsOrSize) {
426
463
  return new WorkerPool(spawnWorker, optionsOrSize);
427
464
  }
465
+ __name(PoolConstructor, "PoolConstructor");
428
466
  PoolConstructor.EventType = PoolEventType;
429
467
  var Pool = PoolConstructor;
430
468
 
@@ -433,7 +471,7 @@ import DebugLogger3 from "debug";
433
471
  import { Observable as Observable4 } from "observable-fns";
434
472
 
435
473
  // src/promise.ts
436
- var doNothing = () => void 0;
474
+ var doNothing = /* @__PURE__ */ __name(() => void 0, "doNothing");
437
475
  function createPromiseWithResolver() {
438
476
  let alreadyResolved = false;
439
477
  let resolvedTo;
@@ -445,13 +483,25 @@ function createPromiseWithResolver() {
445
483
  resolver = resolve;
446
484
  }
447
485
  });
448
- const exposedResolver = (value) => {
486
+ const exposedResolver = /* @__PURE__ */ __name((value) => {
449
487
  alreadyResolved = true;
450
488
  resolvedTo = value;
451
489
  resolver(resolvedTo);
452
- };
453
- return [promise, exposedResolver];
490
+ }, "exposedResolver");
491
+ return [
492
+ promise,
493
+ exposedResolver
494
+ ];
454
495
  }
496
+ __name(createPromiseWithResolver, "createPromiseWithResolver");
497
+
498
+ // src/types/master.ts
499
+ var WorkerEventType = /* @__PURE__ */ function(WorkerEventType2) {
500
+ WorkerEventType2["internalError"] = "internalError";
501
+ WorkerEventType2["message"] = "message";
502
+ WorkerEventType2["termination"] = "termination";
503
+ return WorkerEventType2;
504
+ }({});
455
505
 
456
506
  // src/master/invocation-proxy.ts
457
507
  import DebugLogger2 from "debug";
@@ -459,17 +509,22 @@ import { multicast as multicast2, Observable as Observable3 } from "observable-f
459
509
 
460
510
  // src/observable-promise.ts
461
511
  import { Observable as Observable2 } from "observable-fns";
462
- var doNothing2 = () => {
463
- };
464
- var returnInput = (input) => input;
465
- var runDeferred = (fn) => Promise.resolve().then(fn);
512
+ var doNothing2 = /* @__PURE__ */ __name(() => {
513
+ }, "doNothing");
514
+ var returnInput = /* @__PURE__ */ __name((input) => input, "returnInput");
515
+ var runDeferred = /* @__PURE__ */ __name((fn) => Promise.resolve().then(fn), "runDeferred");
466
516
  function fail2(error) {
467
517
  throw error;
468
518
  }
519
+ __name(fail2, "fail");
469
520
  function isThenable(thing) {
470
521
  return thing && typeof thing.then === "function";
471
522
  }
523
+ __name(isThenable, "isThenable");
472
524
  var ObservablePromise = class _ObservablePromise extends Observable2 {
525
+ static {
526
+ __name(this, "ObservablePromise");
527
+ }
473
528
  [Symbol.toStringTag] = "[object ObservablePromise]";
474
529
  initHasRun = false;
475
530
  fulfillmentCallbacks = [];
@@ -528,7 +583,7 @@ var ObservablePromise = class _ObservablePromise extends Observable2 {
528
583
  const onRejected = onRejectedRaw || fail2;
529
584
  let onRejectedCalled = false;
530
585
  return new Promise((resolve, reject) => {
531
- const rejectionCallback = (error) => {
586
+ const rejectionCallback = /* @__PURE__ */ __name((error) => {
532
587
  if (onRejectedCalled) return;
533
588
  onRejectedCalled = true;
534
589
  try {
@@ -536,17 +591,19 @@ var ObservablePromise = class _ObservablePromise extends Observable2 {
536
591
  } catch (anotherError) {
537
592
  reject(anotherError);
538
593
  }
539
- };
540
- const fulfillmentCallback = (value) => {
594
+ }, "rejectionCallback");
595
+ const fulfillmentCallback = /* @__PURE__ */ __name((value) => {
541
596
  try {
542
597
  resolve(onFulfilled(value));
543
598
  } catch (ex) {
544
599
  const error = ex;
545
600
  rejectionCallback(error);
546
601
  }
547
- };
602
+ }, "fulfillmentCallback");
548
603
  if (!this.initHasRun) {
549
- this.subscribe({ error: rejectionCallback });
604
+ this.subscribe({
605
+ error: rejectionCallback
606
+ });
550
607
  }
551
608
  if (this.state === "fulfilled") {
552
609
  return resolve(onFulfilled(this.firstValue));
@@ -564,23 +621,20 @@ var ObservablePromise = class _ObservablePromise extends Observable2 {
564
621
  }
565
622
  finally(onCompleted) {
566
623
  const handler = onCompleted || doNothing2;
567
- return this.then(
568
- (value) => {
569
- handler();
570
- return value;
571
- },
572
- () => handler()
573
- );
624
+ return this.then((value) => {
625
+ handler();
626
+ return value;
627
+ }, () => handler());
574
628
  }
575
629
  static from(thing) {
576
630
  return isThenable(thing) ? new _ObservablePromise((observer) => {
577
- const onFulfilled = (value) => {
631
+ const onFulfilled = /* @__PURE__ */ __name((value) => {
578
632
  observer.next(value);
579
633
  observer.complete();
580
- };
581
- const onRejected = (error) => {
634
+ }, "onFulfilled");
635
+ const onRejected = /* @__PURE__ */ __name((error) => {
582
636
  observer.error(error);
583
- };
637
+ }, "onRejected");
584
638
  thing.then(onFulfilled, onRejected);
585
639
  }) : super.from(thing);
586
640
  }
@@ -591,14 +645,18 @@ function isTransferable(thing) {
591
645
  if (!thing || typeof thing !== "object") return false;
592
646
  return true;
593
647
  }
648
+ __name(isTransferable, "isTransferable");
594
649
  function isTransferDescriptor(thing) {
595
650
  return thing && typeof thing === "object" && thing[$transferable];
596
651
  }
652
+ __name(isTransferDescriptor, "isTransferDescriptor");
597
653
  function Transfer(payload, transferables) {
598
654
  console.log("Transfer");
599
655
  if (!transferables) {
600
656
  if (!isTransferable(payload)) throw new Error("Not transferable");
601
- transferables = [payload];
657
+ transferables = [
658
+ payload
659
+ ];
602
660
  }
603
661
  return {
604
662
  [$transferable]: true,
@@ -606,18 +664,36 @@ function Transfer(payload, transferables) {
606
664
  transferables
607
665
  };
608
666
  }
667
+ __name(Transfer, "Transfer");
668
+
669
+ // src/types/messages.ts
670
+ var MasterMessageType = /* @__PURE__ */ function(MasterMessageType2) {
671
+ MasterMessageType2["cancel"] = "cancel";
672
+ MasterMessageType2["run"] = "run";
673
+ return MasterMessageType2;
674
+ }({});
675
+ var WorkerMessageType = /* @__PURE__ */ function(WorkerMessageType2) {
676
+ WorkerMessageType2["error"] = "error";
677
+ WorkerMessageType2["init"] = "init";
678
+ WorkerMessageType2["result"] = "result";
679
+ WorkerMessageType2["running"] = "running";
680
+ WorkerMessageType2["uncaughtError"] = "uncaughtError";
681
+ return WorkerMessageType2;
682
+ }({});
609
683
 
610
684
  // src/master/invocation-proxy.ts
611
685
  var debugMessages = DebugLogger2("threads:master:messages");
612
686
  var nextJobUID = 1;
613
- var dedupe = (array) => [...new Set(array)];
614
- var isJobErrorMessage = (data) => data && data.type === "error" /* error */;
615
- var isJobResultMessage = (data) => data && data.type === "result" /* result */;
616
- var isJobStartMessage = (data) => data && data.type === "running" /* running */;
687
+ var dedupe = /* @__PURE__ */ __name((array) => [
688
+ ...new Set(array)
689
+ ], "dedupe");
690
+ var isJobErrorMessage = /* @__PURE__ */ __name((data) => data && data.type === WorkerMessageType.error, "isJobErrorMessage");
691
+ var isJobResultMessage = /* @__PURE__ */ __name((data) => data && data.type === WorkerMessageType.result, "isJobResultMessage");
692
+ var isJobStartMessage = /* @__PURE__ */ __name((data) => data && data.type === WorkerMessageType.running, "isJobStartMessage");
617
693
  function createObservableForJob(worker, jobUID) {
618
694
  return new Observable3((observer) => {
619
695
  let asyncType;
620
- const messageHandler = (event) => {
696
+ const messageHandler = /* @__PURE__ */ __name((event) => {
621
697
  debugMessages("Message from worker:", event.data);
622
698
  if (!event.data || event.data.uid !== jobUID) return;
623
699
  if (isJobStartMessage(event.data)) {
@@ -647,12 +723,12 @@ function createObservableForJob(worker, jobUID) {
647
723
  }
648
724
  worker.removeEventListener("message", messageHandler);
649
725
  }
650
- };
726
+ }, "messageHandler");
651
727
  worker.addEventListener("message", messageHandler);
652
728
  return () => {
653
729
  if (asyncType === "observable" || !asyncType) {
654
730
  const cancelMessage = {
655
- type: "cancel" /* cancel */,
731
+ type: MasterMessageType.cancel,
656
732
  uid: jobUID
657
733
  };
658
734
  worker.postMessage(cancelMessage);
@@ -661,6 +737,7 @@ function createObservableForJob(worker, jobUID) {
661
737
  };
662
738
  });
663
739
  }
740
+ __name(createObservableForJob, "createObservableForJob");
664
741
  function prepareArguments(rawArgs) {
665
742
  if (rawArgs.length === 0) {
666
743
  return {
@@ -683,6 +760,7 @@ function prepareArguments(rawArgs) {
683
760
  transferables: transferables.length === 0 ? transferables : dedupe(transferables)
684
761
  };
685
762
  }
763
+ __name(prepareArguments, "prepareArguments");
686
764
  function createProxyFunction(worker, method) {
687
765
  return (...rawArgs) => {
688
766
  const uid = nextJobUID++;
@@ -690,7 +768,7 @@ function createProxyFunction(worker, method) {
690
768
  const runMessage = {
691
769
  args,
692
770
  method,
693
- type: "run" /* run */,
771
+ type: MasterMessageType.run,
694
772
  uid
695
773
  };
696
774
  debugMessages("Sending command to run function to worker:", runMessage);
@@ -702,6 +780,7 @@ function createProxyFunction(worker, method) {
702
780
  return ObservablePromise.from(multicast2(createObservableForJob(worker, uid)));
703
781
  };
704
782
  }
783
+ __name(createProxyFunction, "createProxyFunction");
705
784
  function createProxyModule(worker, methodNames) {
706
785
  const proxy = {};
707
786
  for (const methodName of methodNames) {
@@ -709,26 +788,31 @@ function createProxyModule(worker, methodNames) {
709
788
  }
710
789
  return proxy;
711
790
  }
791
+ __name(createProxyModule, "createProxyModule");
712
792
 
713
793
  // src/master/spawn.ts
714
794
  var debugMessages2 = DebugLogger3("threads:master:messages");
715
795
  var debugSpawn = DebugLogger3("threads:master:spawn");
716
796
  var debugThreadUtils = DebugLogger3("threads:master:thread-utils");
717
- var isInitMessage = (data) => data && data.type === "init";
718
- var isUncaughtErrorMessage = (data) => data && data.type === "uncaughtError";
797
+ var isInitMessage = /* @__PURE__ */ __name((data) => data && data.type === "init", "isInitMessage");
798
+ var isUncaughtErrorMessage = /* @__PURE__ */ __name((data) => data && data.type === "uncaughtError", "isUncaughtErrorMessage");
719
799
  var initMessageTimeout = typeof process !== "undefined" && process.env !== void 0 && process.env.THREADS_WORKER_INIT_TIMEOUT ? Number.parseInt(process.env.THREADS_WORKER_INIT_TIMEOUT, 10) : 1e4;
720
800
  async function withTimeout(promise, timeoutInMs, errorMessage) {
721
801
  let timeoutHandle;
722
802
  const timeout = new Promise((resolve, reject) => {
723
803
  timeoutHandle = setTimeout(() => reject(new Error(errorMessage)), timeoutInMs);
724
804
  });
725
- const result = await Promise.race([promise, timeout]);
805
+ const result = await Promise.race([
806
+ promise,
807
+ timeout
808
+ ]);
726
809
  clearTimeout(timeoutHandle);
727
810
  return result;
728
811
  }
812
+ __name(withTimeout, "withTimeout");
729
813
  function receiveInitMessage(worker) {
730
814
  return new Promise((resolve, reject) => {
731
- const messageHandler = (event) => {
815
+ const messageHandler = /* @__PURE__ */ __name((event) => {
732
816
  debugMessages2("Message from worker before finishing initialization:", event.data);
733
817
  if (isInitMessage(event.data)) {
734
818
  worker.removeEventListener("message", messageHandler);
@@ -737,31 +821,34 @@ function receiveInitMessage(worker) {
737
821
  worker.removeEventListener("message", messageHandler);
738
822
  reject(deserialize(event.data.error));
739
823
  }
740
- };
824
+ }, "messageHandler");
741
825
  worker.addEventListener("message", messageHandler);
742
826
  });
743
827
  }
828
+ __name(receiveInitMessage, "receiveInitMessage");
744
829
  function createEventObservable(worker, workerTermination) {
745
830
  return new Observable4((observer) => {
746
- const messageHandler = (messageEvent) => {
831
+ const messageHandler = /* @__PURE__ */ __name((messageEvent) => {
747
832
  const workerEvent = {
748
833
  data: messageEvent.data,
749
- type: "message" /* message */
834
+ type: WorkerEventType.message
750
835
  };
751
836
  observer.next(workerEvent);
752
- };
753
- const rejectionHandler = (errorEvent) => {
837
+ }, "messageHandler");
838
+ const rejectionHandler = /* @__PURE__ */ __name((errorEvent) => {
754
839
  debugThreadUtils("Unhandled promise rejection event in thread:", errorEvent);
755
840
  const workerEvent = {
756
841
  error: new Error(errorEvent.reason),
757
- type: "internalError" /* internalError */
842
+ type: WorkerEventType.internalError
758
843
  };
759
844
  observer.next(workerEvent);
760
- };
845
+ }, "rejectionHandler");
761
846
  worker.addEventListener("message", messageHandler);
762
847
  worker.addEventListener("unhandledrejection", rejectionHandler);
763
848
  workerTermination.then(() => {
764
- const terminationEvent = { type: "termination" /* termination */ };
849
+ const terminationEvent = {
850
+ type: WorkerEventType.termination
851
+ };
765
852
  worker.removeEventListener("message", messageHandler);
766
853
  worker.removeEventListener("unhandledrejection", rejectionHandler);
767
854
  observer.next(terminationEvent);
@@ -769,17 +856,22 @@ function createEventObservable(worker, workerTermination) {
769
856
  });
770
857
  });
771
858
  }
859
+ __name(createEventObservable, "createEventObservable");
772
860
  function createTerminator(worker) {
773
861
  const [termination, resolver] = createPromiseWithResolver();
774
- const terminate = async () => {
862
+ const terminate = /* @__PURE__ */ __name(async () => {
775
863
  debugThreadUtils("Terminating worker");
776
864
  await worker.terminate();
777
865
  resolver();
866
+ }, "terminate");
867
+ return {
868
+ terminate,
869
+ termination
778
870
  };
779
- return { terminate, termination };
780
871
  }
872
+ __name(createTerminator, "createTerminator");
781
873
  function setPrivateThreadProps(raw, worker, workerEvents, terminate) {
782
- const workerErrors = workerEvents.filter((event) => event.type === "internalError" /* internalError */).map((errorEvent) => errorEvent.error);
874
+ const workerErrors = workerEvents.filter((event) => event.type === WorkerEventType.internalError).map((errorEvent) => errorEvent.error);
783
875
  return Object.assign(raw, {
784
876
  [$errors]: workerErrors,
785
877
  [$events]: workerEvents,
@@ -787,14 +879,11 @@ function setPrivateThreadProps(raw, worker, workerEvents, terminate) {
787
879
  [$worker]: worker
788
880
  });
789
881
  }
882
+ __name(setPrivateThreadProps, "setPrivateThreadProps");
790
883
  async function spawn(worker, options) {
791
884
  debugSpawn("Initializing new thread");
792
885
  const timeout = options && options.timeout ? options.timeout : initMessageTimeout;
793
- const initMessage = await withTimeout(
794
- receiveInitMessage(worker),
795
- timeout,
796
- `Timeout: Did not receive an init message from worker after ${timeout}ms. Make sure the worker calls expose().`
797
- );
886
+ const initMessage = await withTimeout(receiveInitMessage(worker), timeout, `Timeout: Did not receive an init message from worker after ${timeout}ms. Make sure the worker calls expose().`);
798
887
  const exposed = initMessage.exposed;
799
888
  const { termination, terminate } = createTerminator(worker);
800
889
  const events = createEventObservable(worker, termination);
@@ -809,6 +898,7 @@ async function spawn(worker, options) {
809
898
  throw new Error(`Worker init message states unexpected type of expose(): ${type}`);
810
899
  }
811
900
  }
901
+ __name(spawn, "spawn");
812
902
 
813
903
  // src/master/index-browser.ts
814
904
  var BlobWorker = getWorkerImplementation().blob;