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