@xylabs/threads 4.12.44 → 4.13.1
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.
- package/dist/browser/common-Cuiya5FG.d.ts +21 -0
- package/dist/browser/index-browser-B8TCfn7g.d.ts +20 -0
- package/dist/browser/index-browser.d.ts +8 -0
- package/dist/browser/index-browser.mjs +209 -119
- package/dist/browser/index-browser.mjs.map +1 -1
- package/dist/browser/master/implementation.browser.d.ts +9 -0
- package/dist/browser/master/implementation.browser.mjs +36 -11
- package/dist/browser/master/implementation.browser.mjs.map +1 -1
- package/dist/browser/master/index-browser.d.ts +7 -0
- package/dist/browser/master/index-browser.mjs +201 -117
- package/dist/browser/master/index-browser.mjs.map +1 -1
- package/dist/browser/master/pool-browser.d.ts +104 -0
- package/dist/browser/master/pool-browser.mjs +65 -53
- package/dist/browser/master/pool-browser.mjs.map +1 -1
- package/dist/browser/master-D4MAqspp.d.ts +109 -0
- package/dist/browser/transferable-Cv9t618f.d.ts +15 -0
- package/dist/{types → browser}/worker/worker.browser.d.ts +8 -8
- package/dist/browser/worker/worker.browser.mjs +79 -43
- package/dist/browser/worker/worker.browser.mjs.map +1 -1
- package/dist/{types/types/worker.d.ts → browser/worker-04t9iwDh.d.ts} +5 -5
- package/dist/neutral/master/register.d.ts +2 -0
- package/dist/neutral/master/register.mjs +223 -33
- package/dist/neutral/master/register.mjs.map +1 -1
- package/dist/neutral/master/spawn.d.ts +19 -0
- package/dist/neutral/master/spawn.mjs +106 -53
- package/dist/neutral/master/spawn.mjs.map +1 -1
- package/dist/neutral/master/thread.d.ts +12 -0
- package/dist/neutral/master/thread.mjs +4 -0
- package/dist/neutral/master/thread.mjs.map +1 -1
- package/dist/neutral/master-DDdg1BKb.d.ts +74 -0
- package/dist/{types → neutral}/observable-promise.d.ts +5 -18
- package/dist/neutral/observable-promise.mjs +27 -20
- package/dist/neutral/observable-promise.mjs.map +1 -1
- package/dist/neutral/observable.d.ts +13 -0
- package/dist/neutral/observable.mjs +12 -3
- package/dist/neutral/observable.mjs.map +1 -1
- package/dist/{types → neutral}/types/messages.d.ts +12 -11
- package/dist/neutral/types/messages.mjs +19 -0
- package/dist/neutral/types/messages.mjs.map +1 -0
- package/dist/node/common-Cuiya5FG.d.ts +21 -0
- package/dist/node/index-node-DB1sNl0d.d.ts +66 -0
- package/dist/node/index-node.d.ts +8 -0
- package/dist/node/index-node.mjs +396 -141
- package/dist/node/index-node.mjs.map +1 -1
- package/dist/node/master/implementation.node.d.ts +9 -0
- package/dist/node/master/implementation.node.mjs +223 -33
- package/dist/node/master/implementation.node.mjs.map +1 -1
- package/dist/node/master/index-node.d.ts +7 -0
- package/dist/node/master/index-node.mjs +388 -139
- package/dist/node/master/index-node.mjs.map +1 -1
- package/dist/node/master/pool-node.d.ts +51 -0
- package/dist/node/master/pool-node.mjs +285 -86
- package/dist/node/master/pool-node.mjs.map +1 -1
- package/dist/node/master-BjjSaJAj.d.ts +109 -0
- package/dist/{types/master/pool-types.d.ts → node/pool-types-Bzei07Nj.d.ts} +16 -24
- package/dist/node/transferable-Cv9t618f.d.ts +15 -0
- package/dist/{types → node}/worker/worker.node.d.ts +11 -10
- package/dist/node/worker/worker.node.mjs +80 -43
- package/dist/node/worker/worker.node.mjs.map +1 -1
- package/dist/node/worker-04t9iwDh.d.ts +12 -0
- package/package.json +29 -22
- package/src/master/invocation-proxy.ts +2 -0
- package/src/transferable.ts +2 -0
- package/src/types/worker.ts +1 -0
- package/src/worker/WorkerGlobalScope.ts +1 -0
- package/src/worker/worker.browser.ts +1 -1
- package/dist/types/common.d.ts +0 -8
- package/dist/types/common.d.ts.map +0 -1
- package/dist/types/index-browser.d.ts +0 -9
- package/dist/types/index-browser.d.ts.map +0 -1
- package/dist/types/index-node.d.ts +0 -9
- package/dist/types/index-node.d.ts.map +0 -1
- package/dist/types/master/get-bundle-url.browser.d.ts +0 -3
- package/dist/types/master/get-bundle-url.browser.d.ts.map +0 -1
- package/dist/types/master/implementation.browser.d.ts +0 -5
- package/dist/types/master/implementation.browser.d.ts.map +0 -1
- package/dist/types/master/implementation.node.d.ts +0 -5
- package/dist/types/master/implementation.node.d.ts.map +0 -1
- package/dist/types/master/index-browser.d.ts +0 -13
- package/dist/types/master/index-browser.d.ts.map +0 -1
- package/dist/types/master/index-node.d.ts +0 -13
- package/dist/types/master/index-node.d.ts.map +0 -1
- package/dist/types/master/invocation-proxy.d.ts +0 -4
- package/dist/types/master/invocation-proxy.d.ts.map +0 -1
- package/dist/types/master/pool-browser.d.ts +0 -93
- package/dist/types/master/pool-browser.d.ts.map +0 -1
- package/dist/types/master/pool-node.d.ts +0 -93
- package/dist/types/master/pool-node.d.ts.map +0 -1
- package/dist/types/master/pool-types.d.ts.map +0 -1
- package/dist/types/master/register.d.ts +0 -2
- package/dist/types/master/register.d.ts.map +0 -1
- package/dist/types/master/spawn.d.ts +0 -21
- package/dist/types/master/spawn.d.ts.map +0 -1
- package/dist/types/master/thread.d.ts +0 -13
- package/dist/types/master/thread.d.ts.map +0 -1
- package/dist/types/observable-promise.d.ts.map +0 -1
- package/dist/types/observable.d.ts +0 -21
- package/dist/types/observable.d.ts.map +0 -1
- package/dist/types/promise.d.ts +0 -6
- package/dist/types/promise.d.ts.map +0 -1
- package/dist/types/serializers.d.ts +0 -17
- package/dist/types/serializers.d.ts.map +0 -1
- package/dist/types/symbols.d.ts +0 -6
- package/dist/types/symbols.d.ts.map +0 -1
- package/dist/types/transferable.d.ts +0 -43
- package/dist/types/transferable.d.ts.map +0 -1
- package/dist/types/types/master.d.ts +0 -99
- package/dist/types/types/master.d.ts.map +0 -1
- package/dist/types/types/messages.d.ts.map +0 -1
- package/dist/types/types/worker.d.ts.map +0 -1
- package/dist/types/worker/WorkerGlobalScope.d.ts +0 -6
- package/dist/types/worker/WorkerGlobalScope.d.ts.map +0 -1
- package/dist/types/worker/expose.d.ts +0 -4
- package/dist/types/worker/expose.d.ts.map +0 -1
- package/dist/types/worker/worker.browser.d.ts.map +0 -1
- 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([
|
|
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
|
-
|
|
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([
|
|
116
|
-
|
|
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__ */ (
|
|
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
|
-
}
|
|
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) => [
|
|
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
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
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" ? {
|
|
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
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
(error)
|
|
233
|
-
|
|
234
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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({
|
|
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 ===
|
|
339
|
+
if (event.type === PoolEventType.taskCompleted && event.taskID === taskID) {
|
|
304
340
|
eventSubscription.unsubscribe();
|
|
305
341
|
resolve(event.returnValue);
|
|
306
|
-
} else if (event.type ===
|
|
342
|
+
} else if (event.type === PoolEventType.taskFailed && event.taskID === taskID) {
|
|
307
343
|
eventSubscription.unsubscribe();
|
|
308
344
|
reject(event.error);
|
|
309
|
-
} else if (event.type ===
|
|
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 ===
|
|
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 ===
|
|
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 ===
|
|
388
|
+
if (event.type === PoolEventType.taskQueueDrained) {
|
|
354
389
|
subscription.unsubscribe();
|
|
355
390
|
resolve(settlementPromise);
|
|
356
|
-
} else if (event.type ===
|
|
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([
|
|
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:
|
|
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:
|
|
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: [
|
|
419
|
-
|
|
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 [
|
|
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({
|
|
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
|
-
(
|
|
569
|
-
|
|
570
|
-
|
|
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 = [
|
|
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) => [
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
var
|
|
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:
|
|
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:
|
|
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([
|
|
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:
|
|
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:
|
|
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 = {
|
|
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 ===
|
|
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;
|