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