@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 Worker3 = function() {
54
44
  function Worker4(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, Worker4);
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(Worker4, "Worker");
123
- _createClass(Worker4, [
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(Worker4, [{
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");
121
+ }
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;
157
131
  }
158
- ]);
132
+ }]);
159
133
  return Worker4;
160
134
  }();
161
135
  module.exports = Worker3;
@@ -170,19 +144,15 @@ import { cwd } from "process";
170
144
  import { Worker as NativeWorker } from "worker_threads";
171
145
  var defaultPoolSize = cpus().length;
172
146
  function resolveScriptPath(scriptPath, baseURL) {
173
- const makeAbsolute = /* @__PURE__ */ __name((filePath) => {
147
+ const makeAbsolute = (filePath) => {
174
148
  return path.isAbsolute(filePath) ? filePath : path.join(baseURL ?? cwd(), filePath);
175
- }, "makeAbsolute");
149
+ };
176
150
  const absolutePath = makeAbsolute(scriptPath);
177
151
  return absolutePath;
178
152
  }
179
- __name(resolveScriptPath, "resolveScriptPath");
180
153
  function initWorkerThreadsWorker() {
181
154
  let allWorkers = [];
182
- let Worker3 = class Worker extends NativeWorker {
183
- static {
184
- __name(this, "Worker");
185
- }
155
+ class Worker3 extends NativeWorker {
186
156
  mappedEventListeners;
187
157
  constructor(scriptPath, options) {
188
158
  const resolvedScriptPath = options && options.fromSource ? null : resolveScriptPath(scriptPath, (options ?? {})._baseURL);
@@ -190,20 +160,15 @@ function initWorkerThreadsWorker() {
190
160
  super(resolvedScriptPath, options);
191
161
  } else {
192
162
  const sourceCode = scriptPath;
193
- super(sourceCode, {
194
- ...options,
195
- eval: true
196
- });
163
+ super(sourceCode, { ...options, eval: true });
197
164
  }
198
165
  this.mappedEventListeners = /* @__PURE__ */ new WeakMap();
199
166
  allWorkers.push(this);
200
167
  }
201
168
  addEventListener(eventName, rawListener) {
202
- const listener = /* @__PURE__ */ __name((message) => {
203
- rawListener({
204
- data: message
205
- });
206
- }, "listener");
169
+ const listener = (message) => {
170
+ rawListener({ data: message });
171
+ };
207
172
  this.mappedEventListeners.set(rawListener, listener);
208
173
  this.on(eventName, listener);
209
174
  }
@@ -211,55 +176,41 @@ function initWorkerThreadsWorker() {
211
176
  const listener = this.mappedEventListeners.get(rawListener) || rawListener;
212
177
  this.off(eventName, listener);
213
178
  }
214
- };
215
- const terminateWorkersAndMaster = /* @__PURE__ */ __name(() => {
216
- Promise.all(allWorkers.map((worker) => worker.terminate())).then(() => process.exit(0), () => process.exit(1));
179
+ }
180
+ const terminateWorkersAndMaster = () => {
181
+ Promise.all(allWorkers.map((worker) => worker.terminate())).then(
182
+ () => process.exit(0),
183
+ () => process.exit(1)
184
+ );
217
185
  allWorkers = [];
218
- }, "terminateWorkersAndMaster");
186
+ };
219
187
  process.on("SIGINT", () => terminateWorkersAndMaster());
220
188
  process.on("SIGTERM", () => terminateWorkersAndMaster());
221
- let BlobWorker2 = class BlobWorker extends Worker3 {
222
- static {
223
- __name(this, "BlobWorker");
224
- }
189
+ class BlobWorker2 extends Worker3 {
225
190
  constructor(blob, options) {
226
- super(Buffer.from(blob).toString("utf-8"), {
227
- ...options,
228
- fromSource: true
229
- });
191
+ super(Buffer.from(blob).toString("utf-8"), { ...options, fromSource: true });
230
192
  }
231
193
  static fromText(source, options) {
232
- return new Worker3(source, {
233
- ...options,
234
- fromSource: true
235
- });
194
+ return new Worker3(source, { ...options, fromSource: true });
236
195
  }
237
- };
196
+ }
238
197
  return {
239
198
  blob: BlobWorker2,
240
199
  default: Worker3
241
200
  };
242
201
  }
243
- __name(initWorkerThreadsWorker, "initWorkerThreadsWorker");
244
202
  function initTinyWorker() {
245
203
  const TinyWorker = require_lib();
246
204
  let allWorkers = [];
247
- let Worker3 = class Worker extends TinyWorker {
248
- static {
249
- __name(this, "Worker");
250
- }
205
+ class Worker3 extends TinyWorker {
251
206
  emitter;
252
207
  constructor(scriptPath, options) {
253
208
  const resolvedScriptPath = options && options.fromSource ? null : process.platform === "win32" ? `file:///${resolveScriptPath(scriptPath).replaceAll("\\", "/")}` : resolveScriptPath(scriptPath);
254
209
  if (resolvedScriptPath) {
255
- super(resolvedScriptPath, [], {
256
- esm: true
257
- });
210
+ super(resolvedScriptPath, [], { esm: true });
258
211
  } else {
259
212
  const sourceCode = scriptPath;
260
- super(new Function(sourceCode), [], {
261
- esm: true
262
- });
213
+ super(new Function(sourceCode), [], { esm: true });
263
214
  }
264
215
  allWorkers.push(this);
265
216
  this.emitter = new EventEmitter();
@@ -276,36 +227,29 @@ function initTinyWorker() {
276
227
  allWorkers = allWorkers.filter((worker) => worker !== this);
277
228
  return super.terminate();
278
229
  }
279
- };
280
- const terminateWorkersAndMaster = /* @__PURE__ */ __name(() => {
281
- Promise.all(allWorkers.map((worker) => worker.terminate())).then(() => process.exit(0), () => process.exit(1));
230
+ }
231
+ const terminateWorkersAndMaster = () => {
232
+ Promise.all(allWorkers.map((worker) => worker.terminate())).then(
233
+ () => process.exit(0),
234
+ () => process.exit(1)
235
+ );
282
236
  allWorkers = [];
283
- }, "terminateWorkersAndMaster");
237
+ };
284
238
  process.on("SIGINT", () => terminateWorkersAndMaster());
285
239
  process.on("SIGTERM", () => terminateWorkersAndMaster());
286
- let BlobWorker2 = class BlobWorker extends Worker3 {
287
- static {
288
- __name(this, "BlobWorker");
289
- }
240
+ class BlobWorker2 extends Worker3 {
290
241
  constructor(blob, options) {
291
- super(Buffer.from(blob).toString("utf-8"), {
292
- ...options,
293
- fromSource: true
294
- });
242
+ super(Buffer.from(blob).toString("utf-8"), { ...options, fromSource: true });
295
243
  }
296
244
  static fromText(source, options) {
297
- return new Worker3(source, {
298
- ...options,
299
- fromSource: true
300
- });
245
+ return new Worker3(source, { ...options, fromSource: true });
301
246
  }
302
- };
247
+ }
303
248
  return {
304
249
  blob: BlobWorker2,
305
250
  default: Worker3
306
251
  };
307
252
  }
308
- __name(initTinyWorker, "initTinyWorker");
309
253
  var implementation;
310
254
  var isTinyWorker;
311
255
  function selectWorkerImplementation() {
@@ -319,14 +263,12 @@ function selectWorkerImplementation() {
319
263
  return initTinyWorker();
320
264
  }
321
265
  }
322
- __name(selectWorkerImplementation, "selectWorkerImplementation");
323
266
  function getWorkerImplementation() {
324
267
  if (!implementation) {
325
268
  implementation = selectWorkerImplementation();
326
269
  }
327
270
  return implementation;
328
271
  }
329
- __name(getWorkerImplementation, "getWorkerImplementation");
330
272
  function isWorkerRuntime() {
331
273
  if (isTinyWorker) {
332
274
  return globalThis !== void 0 && self["postMessage"] ? true : false;
@@ -335,17 +277,20 @@ function isWorkerRuntime() {
335
277
  return !isMainThread;
336
278
  }
337
279
  }
338
- __name(isWorkerRuntime, "isWorkerRuntime");
339
280
 
340
281
  // src/master/pool-browser.ts
341
282
  import DebugLogger from "debug";
342
- import { multicast, Observable, Subject } from "observable-fns";
283
+ import {
284
+ multicast,
285
+ Observable,
286
+ Subject
287
+ } from "observable-fns";
343
288
 
344
289
  // src/master/implementation.browser.ts
345
290
  var defaultPoolSize2 = typeof navigator !== "undefined" && navigator.hardwareConcurrency ? navigator.hardwareConcurrency : 4;
346
291
 
347
292
  // src/master/pool-types.ts
348
- var PoolEventType = /* @__PURE__ */ function(PoolEventType2) {
293
+ var PoolEventType = /* @__PURE__ */ ((PoolEventType2) => {
349
294
  PoolEventType2["initialized"] = "initialized";
350
295
  PoolEventType2["taskCanceled"] = "taskCanceled";
351
296
  PoolEventType2["taskCompleted"] = "taskCompleted";
@@ -355,7 +300,7 @@ var PoolEventType = /* @__PURE__ */ function(PoolEventType2) {
355
300
  PoolEventType2["taskStart"] = "taskStart";
356
301
  PoolEventType2["terminated"] = "terminated";
357
302
  return PoolEventType2;
358
- }({});
303
+ })(PoolEventType || {});
359
304
 
360
305
  // src/symbols.ts
361
306
  var $errors = Symbol("thread.errors");
@@ -368,7 +313,6 @@ var $worker = Symbol("thread.worker");
368
313
  function fail(message) {
369
314
  throw new Error(message);
370
315
  }
371
- __name(fail, "fail");
372
316
  var Thread = {
373
317
  /** Return an observable that can be used to subscribe to all errors happening in the thread. */
374
318
  errors(thread) {
@@ -393,33 +337,24 @@ function createArray(size) {
393
337
  }
394
338
  return array;
395
339
  }
396
- __name(createArray, "createArray");
397
340
  function delay(ms) {
398
341
  return new Promise((resolve) => setTimeout(resolve, ms));
399
342
  }
400
- __name(delay, "delay");
401
343
  function flatMap(array, mapper) {
402
- return array.reduce((flattened, element) => [
403
- ...flattened,
404
- ...mapper(element)
405
- ], []);
344
+ return array.reduce((flattened, element) => [...flattened, ...mapper(element)], []);
406
345
  }
407
- __name(flatMap, "flatMap");
408
346
  function slugify(text) {
409
347
  return text.replaceAll(/\W/g, " ").trim().replaceAll(/\s+/g, "-");
410
348
  }
411
- __name(slugify, "slugify");
412
349
  function spawnWorkers(spawnWorker, count) {
413
- return createArray(count).map(() => ({
414
- init: spawnWorker(),
415
- runningTasks: []
416
- }));
350
+ return createArray(count).map(
351
+ () => ({
352
+ init: spawnWorker(),
353
+ runningTasks: []
354
+ })
355
+ );
417
356
  }
418
- __name(spawnWorkers, "spawnWorkers");
419
- var WorkerPool = class WorkerPool2 {
420
- static {
421
- __name(this, "WorkerPool");
422
- }
357
+ var WorkerPool = class {
423
358
  static EventType = PoolEventType;
424
359
  debug;
425
360
  eventObservable;
@@ -431,22 +366,23 @@ var WorkerPool = class WorkerPool2 {
431
366
  nextTaskID = 1;
432
367
  taskQueue = [];
433
368
  constructor(spawnWorker, optionsOrSize) {
434
- const options = typeof optionsOrSize === "number" ? {
435
- size: optionsOrSize
436
- } : optionsOrSize || {};
369
+ const options = typeof optionsOrSize === "number" ? { size: optionsOrSize } : optionsOrSize || {};
437
370
  const { size = defaultPoolSize2 } = options;
438
371
  this.debug = DebugLogger(`threads:pool:${slugify(options.name || String(nextPoolID++))}`);
439
372
  this.options = options;
440
373
  this.workers = spawnWorkers(spawnWorker, size);
441
374
  this.eventObservable = multicast(Observable.from(this.eventSubject));
442
- Promise.all(this.workers.map((worker) => worker.init)).then(() => this.eventSubject.next({
443
- size: this.workers.length,
444
- type: PoolEventType.initialized
445
- }), (error) => {
446
- this.debug("Error while initializing pool worker:", error);
447
- this.eventSubject.error(error);
448
- this.initErrors.push(error);
449
- });
375
+ Promise.all(this.workers.map((worker) => worker.init)).then(
376
+ () => this.eventSubject.next({
377
+ size: this.workers.length,
378
+ type: "initialized" /* initialized */
379
+ }),
380
+ (error) => {
381
+ this.debug("Error while initializing pool worker:", error);
382
+ this.eventSubject.error(error);
383
+ this.initErrors.push(error);
384
+ }
385
+ );
450
386
  }
451
387
  findIdlingWorker() {
452
388
  const { concurrency = 1 } = this.options;
@@ -457,7 +393,7 @@ var WorkerPool = class WorkerPool2 {
457
393
  this.debug(`Running task #${task.id} on worker #${workerID}...`);
458
394
  this.eventSubject.next({
459
395
  taskID: task.id,
460
- type: PoolEventType.taskStart,
396
+ type: "taskStart" /* taskStart */,
461
397
  workerID
462
398
  });
463
399
  try {
@@ -466,7 +402,7 @@ var WorkerPool = class WorkerPool2 {
466
402
  this.eventSubject.next({
467
403
  returnValue,
468
404
  taskID: task.id,
469
- type: PoolEventType.taskCompleted,
405
+ type: "taskCompleted" /* taskCompleted */,
470
406
  workerID
471
407
  });
472
408
  } catch (ex) {
@@ -475,16 +411,16 @@ var WorkerPool = class WorkerPool2 {
475
411
  this.eventSubject.next({
476
412
  error,
477
413
  taskID: task.id,
478
- type: PoolEventType.taskFailed,
414
+ type: "taskFailed" /* taskFailed */,
479
415
  workerID
480
416
  });
481
417
  }
482
418
  }
483
419
  run(worker, task) {
484
420
  const runPromise = (async () => {
485
- const removeTaskFromWorkersRunningTasks = /* @__PURE__ */ __name(() => {
421
+ const removeTaskFromWorkersRunningTasks = () => {
486
422
  worker.runningTasks = worker.runningTasks.filter((someRunPromise) => someRunPromise !== runPromise);
487
- }, "removeTaskFromWorkersRunningTasks");
423
+ };
488
424
  await delay(0);
489
425
  try {
490
426
  await this.runPoolTask(worker, task);
@@ -504,9 +440,7 @@ var WorkerPool = class WorkerPool2 {
504
440
  const nextTask = this.taskQueue.shift();
505
441
  if (!nextTask) {
506
442
  this.debug("Task queue is empty");
507
- this.eventSubject.next({
508
- type: PoolEventType.taskQueueDrained
509
- });
443
+ this.eventSubject.next({ type: "taskQueueDrained" /* taskQueueDrained */ });
510
444
  return;
511
445
  }
512
446
  this.run(availableWorker, nextTask);
@@ -514,13 +448,13 @@ var WorkerPool = class WorkerPool2 {
514
448
  taskCompletion(taskID) {
515
449
  return new Promise((resolve, reject) => {
516
450
  const eventSubscription = this.events().subscribe((event) => {
517
- if (event.type === PoolEventType.taskCompleted && event.taskID === taskID) {
451
+ if (event.type === "taskCompleted" /* taskCompleted */ && event.taskID === taskID) {
518
452
  eventSubscription.unsubscribe();
519
453
  resolve(event.returnValue);
520
- } else if (event.type === PoolEventType.taskFailed && event.taskID === taskID) {
454
+ } else if (event.type === "taskFailed" /* taskFailed */ && event.taskID === taskID) {
521
455
  eventSubscription.unsubscribe();
522
456
  reject(event.error);
523
- } else if (event.type === PoolEventType.terminated) {
457
+ } else if (event.type === "terminated" /* terminated */) {
524
458
  eventSubscription.unsubscribe();
525
459
  reject(new Error("Pool has been terminated before task was run."));
526
460
  }
@@ -528,10 +462,10 @@ var WorkerPool = class WorkerPool2 {
528
462
  });
529
463
  }
530
464
  async settled(allowResolvingImmediately = false) {
531
- const getCurrentlyRunningTasks = /* @__PURE__ */ __name(() => flatMap(this.workers, (worker) => worker.runningTasks), "getCurrentlyRunningTasks");
465
+ const getCurrentlyRunningTasks = () => flatMap(this.workers, (worker) => worker.runningTasks);
532
466
  const taskFailures = [];
533
467
  const failureSubscription = this.eventObservable.subscribe((event) => {
534
- if (event.type === PoolEventType.taskFailed) {
468
+ if (event.type === "taskFailed" /* taskFailed */) {
535
469
  taskFailures.push(event.error);
536
470
  }
537
471
  });
@@ -546,11 +480,12 @@ var WorkerPool = class WorkerPool2 {
546
480
  const subscription = this.eventObservable.subscribe({
547
481
  error: reject,
548
482
  next(event) {
549
- if (event.type === PoolEventType.taskQueueDrained) {
483
+ if (event.type === "taskQueueDrained" /* taskQueueDrained */) {
550
484
  subscription.unsubscribe();
551
485
  resolve(void 0);
552
486
  }
553
487
  }
488
+ // make a pool-wide error reject the completed() result promise
554
489
  });
555
490
  });
556
491
  await Promise.allSettled(getCurrentlyRunningTasks());
@@ -563,20 +498,18 @@ var WorkerPool = class WorkerPool2 {
563
498
  const subscription = this.eventObservable.subscribe({
564
499
  error: reject,
565
500
  next(event) {
566
- if (event.type === PoolEventType.taskQueueDrained) {
501
+ if (event.type === "taskQueueDrained" /* taskQueueDrained */) {
567
502
  subscription.unsubscribe();
568
503
  resolve(settlementPromise);
569
- } else if (event.type === PoolEventType.taskFailed) {
504
+ } else if (event.type === "taskFailed" /* taskFailed */) {
570
505
  subscription.unsubscribe();
571
506
  reject(event.error);
572
507
  }
573
508
  }
509
+ // make a pool-wide error reject the completed() result promise
574
510
  });
575
511
  });
576
- const errors = await Promise.race([
577
- settlementPromise,
578
- earlyExitPromise
579
- ]);
512
+ const errors = await Promise.race([settlementPromise, earlyExitPromise]);
580
513
  if (errors.length > 0) {
581
514
  throw errors[0];
582
515
  }
@@ -598,26 +531,28 @@ var WorkerPool = class WorkerPool2 {
598
531
  this.debug(`Task #${taskID} errored:`, error);
599
532
  });
600
533
  const task = {
601
- cancel: /* @__PURE__ */ __name(() => {
534
+ cancel: () => {
602
535
  if (!this.taskQueue.includes(task)) return;
603
536
  this.taskQueue = this.taskQueue.filter((someTask) => someTask !== task);
604
537
  this.eventSubject.next({
605
538
  taskID: task.id,
606
- type: PoolEventType.taskCanceled
539
+ type: "taskCanceled" /* taskCanceled */
607
540
  });
608
- }, "cancel"),
541
+ },
609
542
  id: taskID,
610
543
  run: taskFunction,
611
544
  then: taskCompletion.then.bind(taskCompletion)
612
545
  };
613
546
  if (this.taskQueue.length >= maxQueuedJobs) {
614
- 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.");
547
+ throw new Error(
548
+ "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."
549
+ );
615
550
  }
616
551
  this.debug(`Queueing task #${task.id}...`);
617
552
  this.taskQueue.push(task);
618
553
  this.eventSubject.next({
619
554
  taskID: task.id,
620
- type: PoolEventType.taskQueued
555
+ type: "taskQueued" /* taskQueued */
621
556
  });
622
557
  this.scheduleWork();
623
558
  return task;
@@ -628,10 +563,8 @@ var WorkerPool = class WorkerPool2 {
628
563
  await this.completed(true);
629
564
  }
630
565
  this.eventSubject.next({
631
- remainingQueue: [
632
- ...this.taskQueue
633
- ],
634
- type: PoolEventType.terminated
566
+ remainingQueue: [...this.taskQueue],
567
+ type: "terminated" /* terminated */
635
568
  });
636
569
  this.eventSubject.complete();
637
570
  await Promise.all(this.workers.map(async (worker) => Thread.terminate(await worker.init)));
@@ -640,7 +573,6 @@ var WorkerPool = class WorkerPool2 {
640
573
  function PoolConstructor(spawnWorker, optionsOrSize) {
641
574
  return new WorkerPool(spawnWorker, optionsOrSize);
642
575
  }
643
- __name(PoolConstructor, "PoolConstructor");
644
576
  PoolConstructor.EventType = PoolEventType;
645
577
  var Pool = PoolConstructor;
646
578
 
@@ -665,7 +597,7 @@ var DefaultErrorSerializer = {
665
597
  };
666
598
  }
667
599
  };
668
- var isSerializedError = /* @__PURE__ */ __name((thing) => thing && typeof thing === "object" && "__error_marker" in thing && thing.__error_marker === "$$error", "isSerializedError");
600
+ var isSerializedError = (thing) => thing && typeof thing === "object" && "__error_marker" in thing && thing.__error_marker === "$$error";
669
601
  var DefaultSerializer = {
670
602
  deserialize(message) {
671
603
  return isSerializedError(message) ? DefaultErrorSerializer.deserialize(message) : message;
@@ -680,14 +612,12 @@ globalThis.registeredSerializer = globalThis.registeredSerializer ?? DefaultSeri
680
612
  function deserialize(message) {
681
613
  return globalThis.registeredSerializer.deserialize(message);
682
614
  }
683
- __name(deserialize, "deserialize");
684
615
  function serialize(input) {
685
616
  return globalThis.registeredSerializer.serialize(input);
686
617
  }
687
- __name(serialize, "serialize");
688
618
 
689
619
  // src/promise.ts
690
- var doNothing = /* @__PURE__ */ __name(() => void 0, "doNothing");
620
+ var doNothing = () => void 0;
691
621
  function createPromiseWithResolver() {
692
622
  let alreadyResolved = false;
693
623
  let resolvedTo;
@@ -699,25 +629,13 @@ function createPromiseWithResolver() {
699
629
  resolver = resolve;
700
630
  }
701
631
  });
702
- const exposedResolver = /* @__PURE__ */ __name((value) => {
632
+ const exposedResolver = (value) => {
703
633
  alreadyResolved = true;
704
634
  resolvedTo = value;
705
635
  resolver(resolvedTo);
706
- }, "exposedResolver");
707
- return [
708
- promise,
709
- exposedResolver
710
- ];
636
+ };
637
+ return [promise, exposedResolver];
711
638
  }
712
- __name(createPromiseWithResolver, "createPromiseWithResolver");
713
-
714
- // src/types/master.ts
715
- var WorkerEventType = /* @__PURE__ */ function(WorkerEventType2) {
716
- WorkerEventType2["internalError"] = "internalError";
717
- WorkerEventType2["message"] = "message";
718
- WorkerEventType2["termination"] = "termination";
719
- return WorkerEventType2;
720
- }({});
721
639
 
722
640
  // src/master/invocation-proxy.ts
723
641
  import DebugLogger2 from "debug";
@@ -725,22 +643,17 @@ import { multicast as multicast2, Observable as Observable3 } from "observable-f
725
643
 
726
644
  // src/observable-promise.ts
727
645
  import { Observable as Observable2 } from "observable-fns";
728
- var doNothing2 = /* @__PURE__ */ __name(() => {
729
- }, "doNothing");
730
- var returnInput = /* @__PURE__ */ __name((input) => input, "returnInput");
731
- var runDeferred = /* @__PURE__ */ __name((fn) => Promise.resolve().then(fn), "runDeferred");
646
+ var doNothing2 = () => {
647
+ };
648
+ var returnInput = (input) => input;
649
+ var runDeferred = (fn) => Promise.resolve().then(fn);
732
650
  function fail2(error) {
733
651
  throw error;
734
652
  }
735
- __name(fail2, "fail");
736
653
  function isThenable(thing) {
737
654
  return thing && typeof thing.then === "function";
738
655
  }
739
- __name(isThenable, "isThenable");
740
656
  var ObservablePromise = class _ObservablePromise extends Observable2 {
741
- static {
742
- __name(this, "ObservablePromise");
743
- }
744
657
  [Symbol.toStringTag] = "[object ObservablePromise]";
745
658
  initHasRun = false;
746
659
  fulfillmentCallbacks = [];
@@ -799,7 +712,7 @@ var ObservablePromise = class _ObservablePromise extends Observable2 {
799
712
  const onRejected = onRejectedRaw || fail2;
800
713
  let onRejectedCalled = false;
801
714
  return new Promise((resolve, reject) => {
802
- const rejectionCallback = /* @__PURE__ */ __name((error) => {
715
+ const rejectionCallback = (error) => {
803
716
  if (onRejectedCalled) return;
804
717
  onRejectedCalled = true;
805
718
  try {
@@ -807,19 +720,17 @@ var ObservablePromise = class _ObservablePromise extends Observable2 {
807
720
  } catch (anotherError) {
808
721
  reject(anotherError);
809
722
  }
810
- }, "rejectionCallback");
811
- const fulfillmentCallback = /* @__PURE__ */ __name((value) => {
723
+ };
724
+ const fulfillmentCallback = (value) => {
812
725
  try {
813
726
  resolve(onFulfilled(value));
814
727
  } catch (ex) {
815
728
  const error = ex;
816
729
  rejectionCallback(error);
817
730
  }
818
- }, "fulfillmentCallback");
731
+ };
819
732
  if (!this.initHasRun) {
820
- this.subscribe({
821
- error: rejectionCallback
822
- });
733
+ this.subscribe({ error: rejectionCallback });
823
734
  }
824
735
  if (this.state === "fulfilled") {
825
736
  return resolve(onFulfilled(this.firstValue));
@@ -837,20 +748,23 @@ var ObservablePromise = class _ObservablePromise extends Observable2 {
837
748
  }
838
749
  finally(onCompleted) {
839
750
  const handler = onCompleted || doNothing2;
840
- return this.then((value) => {
841
- handler();
842
- return value;
843
- }, () => handler());
751
+ return this.then(
752
+ (value) => {
753
+ handler();
754
+ return value;
755
+ },
756
+ () => handler()
757
+ );
844
758
  }
845
759
  static from(thing) {
846
760
  return isThenable(thing) ? new _ObservablePromise((observer) => {
847
- const onFulfilled = /* @__PURE__ */ __name((value) => {
761
+ const onFulfilled = (value) => {
848
762
  observer.next(value);
849
763
  observer.complete();
850
- }, "onFulfilled");
851
- const onRejected = /* @__PURE__ */ __name((error) => {
764
+ };
765
+ const onRejected = (error) => {
852
766
  observer.error(error);
853
- }, "onRejected");
767
+ };
854
768
  thing.then(onFulfilled, onRejected);
855
769
  }) : super.from(thing);
856
770
  }
@@ -860,36 +774,18 @@ var ObservablePromise = class _ObservablePromise extends Observable2 {
860
774
  function isTransferDescriptor(thing) {
861
775
  return thing && typeof thing === "object" && thing[$transferable];
862
776
  }
863
- __name(isTransferDescriptor, "isTransferDescriptor");
864
-
865
- // src/types/messages.ts
866
- var MasterMessageType = /* @__PURE__ */ function(MasterMessageType2) {
867
- MasterMessageType2["cancel"] = "cancel";
868
- MasterMessageType2["run"] = "run";
869
- return MasterMessageType2;
870
- }({});
871
- var WorkerMessageType = /* @__PURE__ */ function(WorkerMessageType2) {
872
- WorkerMessageType2["error"] = "error";
873
- WorkerMessageType2["init"] = "init";
874
- WorkerMessageType2["result"] = "result";
875
- WorkerMessageType2["running"] = "running";
876
- WorkerMessageType2["uncaughtError"] = "uncaughtError";
877
- return WorkerMessageType2;
878
- }({});
879
777
 
880
778
  // src/master/invocation-proxy.ts
881
779
  var debugMessages = DebugLogger2("threads:master:messages");
882
780
  var nextJobUID = 1;
883
- var dedupe = /* @__PURE__ */ __name((array) => [
884
- ...new Set(array)
885
- ], "dedupe");
886
- var isJobErrorMessage = /* @__PURE__ */ __name((data) => data && data.type === WorkerMessageType.error, "isJobErrorMessage");
887
- var isJobResultMessage = /* @__PURE__ */ __name((data) => data && data.type === WorkerMessageType.result, "isJobResultMessage");
888
- var isJobStartMessage = /* @__PURE__ */ __name((data) => data && data.type === WorkerMessageType.running, "isJobStartMessage");
781
+ var dedupe = (array) => [...new Set(array)];
782
+ var isJobErrorMessage = (data) => data && data.type === "error" /* error */;
783
+ var isJobResultMessage = (data) => data && data.type === "result" /* result */;
784
+ var isJobStartMessage = (data) => data && data.type === "running" /* running */;
889
785
  function createObservableForJob(worker, jobUID) {
890
786
  return new Observable3((observer) => {
891
787
  let asyncType;
892
- const messageHandler = /* @__PURE__ */ __name((event) => {
788
+ const messageHandler = (event) => {
893
789
  debugMessages("Message from worker:", event.data);
894
790
  if (!event.data || event.data.uid !== jobUID) return;
895
791
  if (isJobStartMessage(event.data)) {
@@ -919,12 +815,12 @@ function createObservableForJob(worker, jobUID) {
919
815
  }
920
816
  worker.removeEventListener("message", messageHandler);
921
817
  }
922
- }, "messageHandler");
818
+ };
923
819
  worker.addEventListener("message", messageHandler);
924
820
  return () => {
925
821
  if (asyncType === "observable" || !asyncType) {
926
822
  const cancelMessage = {
927
- type: MasterMessageType.cancel,
823
+ type: "cancel" /* cancel */,
928
824
  uid: jobUID
929
825
  };
930
826
  worker.postMessage(cancelMessage);
@@ -933,7 +829,6 @@ function createObservableForJob(worker, jobUID) {
933
829
  };
934
830
  });
935
831
  }
936
- __name(createObservableForJob, "createObservableForJob");
937
832
  function prepareArguments(rawArgs) {
938
833
  if (rawArgs.length === 0) {
939
834
  return {
@@ -956,7 +851,6 @@ function prepareArguments(rawArgs) {
956
851
  transferables: transferables.length === 0 ? transferables : dedupe(transferables)
957
852
  };
958
853
  }
959
- __name(prepareArguments, "prepareArguments");
960
854
  function createProxyFunction(worker, method) {
961
855
  return (...rawArgs) => {
962
856
  const uid = nextJobUID++;
@@ -964,7 +858,7 @@ function createProxyFunction(worker, method) {
964
858
  const runMessage = {
965
859
  args,
966
860
  method,
967
- type: MasterMessageType.run,
861
+ type: "run" /* run */,
968
862
  uid
969
863
  };
970
864
  debugMessages("Sending command to run function to worker:", runMessage);
@@ -976,7 +870,6 @@ function createProxyFunction(worker, method) {
976
870
  return ObservablePromise.from(multicast2(createObservableForJob(worker, uid)));
977
871
  };
978
872
  }
979
- __name(createProxyFunction, "createProxyFunction");
980
873
  function createProxyModule(worker, methodNames) {
981
874
  const proxy = {};
982
875
  for (const methodName of methodNames) {
@@ -984,31 +877,26 @@ function createProxyModule(worker, methodNames) {
984
877
  }
985
878
  return proxy;
986
879
  }
987
- __name(createProxyModule, "createProxyModule");
988
880
 
989
881
  // src/master/spawn.ts
990
882
  var debugMessages2 = DebugLogger3("threads:master:messages");
991
883
  var debugSpawn = DebugLogger3("threads:master:spawn");
992
884
  var debugThreadUtils = DebugLogger3("threads:master:thread-utils");
993
- var isInitMessage = /* @__PURE__ */ __name((data) => data && data.type === "init", "isInitMessage");
994
- var isUncaughtErrorMessage = /* @__PURE__ */ __name((data) => data && data.type === "uncaughtError", "isUncaughtErrorMessage");
885
+ var isInitMessage = (data) => data && data.type === "init";
886
+ var isUncaughtErrorMessage = (data) => data && data.type === "uncaughtError";
995
887
  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;
996
888
  async function withTimeout(promise, timeoutInMs, errorMessage) {
997
889
  let timeoutHandle;
998
890
  const timeout = new Promise((resolve, reject) => {
999
891
  timeoutHandle = setTimeout(() => reject(new Error(errorMessage)), timeoutInMs);
1000
892
  });
1001
- const result = await Promise.race([
1002
- promise,
1003
- timeout
1004
- ]);
893
+ const result = await Promise.race([promise, timeout]);
1005
894
  clearTimeout(timeoutHandle);
1006
895
  return result;
1007
896
  }
1008
- __name(withTimeout, "withTimeout");
1009
897
  function receiveInitMessage(worker) {
1010
898
  return new Promise((resolve, reject) => {
1011
- const messageHandler = /* @__PURE__ */ __name((event) => {
899
+ const messageHandler = (event) => {
1012
900
  debugMessages2("Message from worker before finishing initialization:", event.data);
1013
901
  if (isInitMessage(event.data)) {
1014
902
  worker.removeEventListener("message", messageHandler);
@@ -1017,34 +905,31 @@ function receiveInitMessage(worker) {
1017
905
  worker.removeEventListener("message", messageHandler);
1018
906
  reject(deserialize(event.data.error));
1019
907
  }
1020
- }, "messageHandler");
908
+ };
1021
909
  worker.addEventListener("message", messageHandler);
1022
910
  });
1023
911
  }
1024
- __name(receiveInitMessage, "receiveInitMessage");
1025
912
  function createEventObservable(worker, workerTermination) {
1026
913
  return new Observable4((observer) => {
1027
- const messageHandler = /* @__PURE__ */ __name((messageEvent) => {
914
+ const messageHandler = (messageEvent) => {
1028
915
  const workerEvent = {
1029
916
  data: messageEvent.data,
1030
- type: WorkerEventType.message
917
+ type: "message" /* message */
1031
918
  };
1032
919
  observer.next(workerEvent);
1033
- }, "messageHandler");
1034
- const rejectionHandler = /* @__PURE__ */ __name((errorEvent) => {
920
+ };
921
+ const rejectionHandler = (errorEvent) => {
1035
922
  debugThreadUtils("Unhandled promise rejection event in thread:", errorEvent);
1036
923
  const workerEvent = {
1037
924
  error: new Error(errorEvent.reason),
1038
- type: WorkerEventType.internalError
925
+ type: "internalError" /* internalError */
1039
926
  };
1040
927
  observer.next(workerEvent);
1041
- }, "rejectionHandler");
928
+ };
1042
929
  worker.addEventListener("message", messageHandler);
1043
930
  worker.addEventListener("unhandledrejection", rejectionHandler);
1044
931
  workerTermination.then(() => {
1045
- const terminationEvent = {
1046
- type: WorkerEventType.termination
1047
- };
932
+ const terminationEvent = { type: "termination" /* termination */ };
1048
933
  worker.removeEventListener("message", messageHandler);
1049
934
  worker.removeEventListener("unhandledrejection", rejectionHandler);
1050
935
  observer.next(terminationEvent);
@@ -1052,22 +937,17 @@ function createEventObservable(worker, workerTermination) {
1052
937
  });
1053
938
  });
1054
939
  }
1055
- __name(createEventObservable, "createEventObservable");
1056
940
  function createTerminator(worker) {
1057
941
  const [termination, resolver] = createPromiseWithResolver();
1058
- const terminate = /* @__PURE__ */ __name(async () => {
942
+ const terminate = async () => {
1059
943
  debugThreadUtils("Terminating worker");
1060
944
  await worker.terminate();
1061
945
  resolver();
1062
- }, "terminate");
1063
- return {
1064
- terminate,
1065
- termination
1066
946
  };
947
+ return { terminate, termination };
1067
948
  }
1068
- __name(createTerminator, "createTerminator");
1069
949
  function setPrivateThreadProps(raw, worker, workerEvents, terminate) {
1070
- const workerErrors = workerEvents.filter((event) => event.type === WorkerEventType.internalError).map((errorEvent) => errorEvent.error);
950
+ const workerErrors = workerEvents.filter((event) => event.type === "internalError" /* internalError */).map((errorEvent) => errorEvent.error);
1071
951
  return Object.assign(raw, {
1072
952
  [$errors]: workerErrors,
1073
953
  [$events]: workerEvents,
@@ -1075,11 +955,14 @@ function setPrivateThreadProps(raw, worker, workerEvents, terminate) {
1075
955
  [$worker]: worker
1076
956
  });
1077
957
  }
1078
- __name(setPrivateThreadProps, "setPrivateThreadProps");
1079
958
  async function spawn(worker, options) {
1080
959
  debugSpawn("Initializing new thread");
1081
960
  const timeout = options && options.timeout ? options.timeout : initMessageTimeout;
1082
- 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().`);
961
+ const initMessage = await withTimeout(
962
+ receiveInitMessage(worker),
963
+ timeout,
964
+ `Timeout: Did not receive an init message from worker after ${timeout}ms. Make sure the worker calls expose().`
965
+ );
1083
966
  const exposed = initMessage.exposed;
1084
967
  const { termination, terminate } = createTerminator(worker);
1085
968
  const events = createEventObservable(worker, termination);
@@ -1094,7 +977,6 @@ async function spawn(worker, options) {
1094
977
  throw new Error(`Worker init message states unexpected type of expose(): ${type}`);
1095
978
  }
1096
979
  }
1097
- __name(spawn, "spawn");
1098
980
 
1099
981
  // src/master/index-node.ts
1100
982
  var BlobWorker = getWorkerImplementation().blob;