@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,9 +1,166 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
1
4
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
5
|
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
6
|
}) : x)(function(x) {
|
|
4
7
|
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
5
8
|
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
6
9
|
});
|
|
10
|
+
var __commonJS = (cb, mod) => function __require2() {
|
|
11
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
// ../../node_modules/.store/tiny-worker-npm-2.3.0-38c7100e1d/package/lib/index.js
|
|
15
|
+
var require_lib = __commonJS({
|
|
16
|
+
"../../node_modules/.store/tiny-worker-npm-2.3.0-38c7100e1d/package/lib/index.js"(exports, module) {
|
|
17
|
+
"use strict";
|
|
18
|
+
var _createClass = /* @__PURE__ */ function() {
|
|
19
|
+
function defineProperties(target, props) {
|
|
20
|
+
for (var i = 0; i < props.length; i++) {
|
|
21
|
+
var descriptor = props[i];
|
|
22
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
23
|
+
descriptor.configurable = true;
|
|
24
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
25
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
__name(defineProperties, "defineProperties");
|
|
29
|
+
return function(Constructor, protoProps, staticProps) {
|
|
30
|
+
if (protoProps) defineProperties(Constructor.prototype, protoProps);
|
|
31
|
+
if (staticProps) defineProperties(Constructor, staticProps);
|
|
32
|
+
return Constructor;
|
|
33
|
+
};
|
|
34
|
+
}();
|
|
35
|
+
function _classCallCheck(instance, Constructor) {
|
|
36
|
+
if (!(instance instanceof Constructor)) {
|
|
37
|
+
throw new TypeError("Cannot call a class as a function");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
__name(_classCallCheck, "_classCallCheck");
|
|
41
|
+
var path2 = __require("path");
|
|
42
|
+
var fork = __require("child_process").fork;
|
|
43
|
+
var worker = path2.join(__dirname, "worker.js");
|
|
44
|
+
var events = /^(error|message)$/;
|
|
45
|
+
var defaultPorts = {
|
|
46
|
+
inspect: 9229,
|
|
47
|
+
debug: 5858
|
|
48
|
+
};
|
|
49
|
+
var range = {
|
|
50
|
+
min: 1,
|
|
51
|
+
max: 300
|
|
52
|
+
};
|
|
53
|
+
var Worker3 = function() {
|
|
54
|
+
function Worker4(arg) {
|
|
55
|
+
var _this = this;
|
|
56
|
+
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
|
+
};
|
|
60
|
+
_classCallCheck(this, Worker4);
|
|
61
|
+
var isfn = typeof arg === "function", input = isfn ? arg.toString() : arg;
|
|
62
|
+
if (!options.cwd) {
|
|
63
|
+
options.cwd = process.cwd();
|
|
64
|
+
}
|
|
65
|
+
var debugVars = process.execArgv.filter(function(execArg) {
|
|
66
|
+
return /(debug|inspect)/.test(execArg);
|
|
67
|
+
});
|
|
68
|
+
if (debugVars.length > 0 && !options.noDebugRedirection) {
|
|
69
|
+
if (!options.execArgv) {
|
|
70
|
+
debugVars = Array.from(process.execArgv);
|
|
71
|
+
options.execArgv = [];
|
|
72
|
+
}
|
|
73
|
+
var inspectIndex = debugVars.findIndex(function(debugArg) {
|
|
74
|
+
return /^--inspect(-brk)?(=\d+)?$/.test(debugArg);
|
|
75
|
+
});
|
|
76
|
+
var debugIndex = debugVars.findIndex(function(debugArg) {
|
|
77
|
+
return /^--debug(-brk)?(=\d+)?$/.test(debugArg);
|
|
78
|
+
});
|
|
79
|
+
var portIndex = inspectIndex >= 0 ? inspectIndex : debugIndex;
|
|
80
|
+
if (portIndex >= 0) {
|
|
81
|
+
var match = /^--(debug|inspect)(?:-brk)?(?:=(\d+))?$/.exec(debugVars[portIndex]);
|
|
82
|
+
var port = defaultPorts[match[1]];
|
|
83
|
+
if (match[2]) {
|
|
84
|
+
port = parseInt(match[2]);
|
|
85
|
+
}
|
|
86
|
+
debugVars[portIndex] = "--" + match[1] + "=" + (port + range.min + Math.floor(Math.random() * (range.max - range.min)));
|
|
87
|
+
if (debugIndex >= 0 && debugIndex !== portIndex) {
|
|
88
|
+
match = /^(--debug)(?:-brk)?(.*)/.exec(debugVars[debugIndex]);
|
|
89
|
+
debugVars[debugIndex] = match[1] + (match[2] ? match[2] : "");
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
options.execArgv = options.execArgv.concat(debugVars);
|
|
93
|
+
}
|
|
94
|
+
delete options.noDebugRedirection;
|
|
95
|
+
this.child = fork(worker, args, options);
|
|
96
|
+
this.onerror = void 0;
|
|
97
|
+
this.onmessage = void 0;
|
|
98
|
+
this.child.on("error", function(e) {
|
|
99
|
+
if (_this.onerror) {
|
|
100
|
+
_this.onerror.call(_this, e);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
this.child.on("message", function(msg) {
|
|
104
|
+
var message = JSON.parse(msg);
|
|
105
|
+
var error = void 0;
|
|
106
|
+
if (!message.error && _this.onmessage) {
|
|
107
|
+
_this.onmessage.call(_this, message);
|
|
108
|
+
}
|
|
109
|
+
if (message.error && _this.onerror) {
|
|
110
|
+
error = new Error(message.error);
|
|
111
|
+
error.stack = message.stack;
|
|
112
|
+
_this.onerror.call(_this, error);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
this.child.send({
|
|
116
|
+
input,
|
|
117
|
+
isfn,
|
|
118
|
+
cwd: options.cwd,
|
|
119
|
+
esm: options.esm
|
|
120
|
+
});
|
|
121
|
+
}
|
|
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")
|
|
145
|
+
}
|
|
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")
|
|
157
|
+
}
|
|
158
|
+
]);
|
|
159
|
+
return Worker4;
|
|
160
|
+
}();
|
|
161
|
+
module.exports = Worker3;
|
|
162
|
+
}
|
|
163
|
+
});
|
|
7
164
|
|
|
8
165
|
// src/master/implementation.node.ts
|
|
9
166
|
import { EventEmitter } from "events";
|
|
@@ -13,15 +170,19 @@ import { cwd } from "process";
|
|
|
13
170
|
import { Worker as NativeWorker } from "worker_threads";
|
|
14
171
|
var defaultPoolSize = cpus().length;
|
|
15
172
|
function resolveScriptPath(scriptPath, baseURL) {
|
|
16
|
-
const makeAbsolute = (filePath) => {
|
|
173
|
+
const makeAbsolute = /* @__PURE__ */ __name((filePath) => {
|
|
17
174
|
return path.isAbsolute(filePath) ? filePath : path.join(baseURL ?? cwd(), filePath);
|
|
18
|
-
};
|
|
175
|
+
}, "makeAbsolute");
|
|
19
176
|
const absolutePath = makeAbsolute(scriptPath);
|
|
20
177
|
return absolutePath;
|
|
21
178
|
}
|
|
179
|
+
__name(resolveScriptPath, "resolveScriptPath");
|
|
22
180
|
function initWorkerThreadsWorker() {
|
|
23
181
|
let allWorkers = [];
|
|
24
|
-
|
|
182
|
+
let Worker3 = class Worker extends NativeWorker {
|
|
183
|
+
static {
|
|
184
|
+
__name(this, "Worker");
|
|
185
|
+
}
|
|
25
186
|
mappedEventListeners;
|
|
26
187
|
constructor(scriptPath, options) {
|
|
27
188
|
const resolvedScriptPath = options && options.fromSource ? null : resolveScriptPath(scriptPath, (options ?? {})._baseURL);
|
|
@@ -29,15 +190,20 @@ function initWorkerThreadsWorker() {
|
|
|
29
190
|
super(resolvedScriptPath, options);
|
|
30
191
|
} else {
|
|
31
192
|
const sourceCode = scriptPath;
|
|
32
|
-
super(sourceCode, {
|
|
193
|
+
super(sourceCode, {
|
|
194
|
+
...options,
|
|
195
|
+
eval: true
|
|
196
|
+
});
|
|
33
197
|
}
|
|
34
198
|
this.mappedEventListeners = /* @__PURE__ */ new WeakMap();
|
|
35
199
|
allWorkers.push(this);
|
|
36
200
|
}
|
|
37
201
|
addEventListener(eventName, rawListener) {
|
|
38
|
-
const listener = (message) => {
|
|
39
|
-
rawListener({
|
|
40
|
-
|
|
202
|
+
const listener = /* @__PURE__ */ __name((message) => {
|
|
203
|
+
rawListener({
|
|
204
|
+
data: message
|
|
205
|
+
});
|
|
206
|
+
}, "listener");
|
|
41
207
|
this.mappedEventListeners.set(rawListener, listener);
|
|
42
208
|
this.on(eventName, listener);
|
|
43
209
|
}
|
|
@@ -45,41 +211,55 @@ function initWorkerThreadsWorker() {
|
|
|
45
211
|
const listener = this.mappedEventListeners.get(rawListener) || rawListener;
|
|
46
212
|
this.off(eventName, listener);
|
|
47
213
|
}
|
|
48
|
-
}
|
|
49
|
-
const terminateWorkersAndMaster = () => {
|
|
50
|
-
Promise.all(allWorkers.map((worker) => worker.terminate())).then(
|
|
51
|
-
() => process.exit(0),
|
|
52
|
-
() => process.exit(1)
|
|
53
|
-
);
|
|
54
|
-
allWorkers = [];
|
|
55
214
|
};
|
|
215
|
+
const terminateWorkersAndMaster = /* @__PURE__ */ __name(() => {
|
|
216
|
+
Promise.all(allWorkers.map((worker) => worker.terminate())).then(() => process.exit(0), () => process.exit(1));
|
|
217
|
+
allWorkers = [];
|
|
218
|
+
}, "terminateWorkersAndMaster");
|
|
56
219
|
process.on("SIGINT", () => terminateWorkersAndMaster());
|
|
57
220
|
process.on("SIGTERM", () => terminateWorkersAndMaster());
|
|
58
|
-
|
|
221
|
+
let BlobWorker2 = class BlobWorker extends Worker3 {
|
|
222
|
+
static {
|
|
223
|
+
__name(this, "BlobWorker");
|
|
224
|
+
}
|
|
59
225
|
constructor(blob, options) {
|
|
60
|
-
super(Buffer.from(blob).toString("utf-8"), {
|
|
226
|
+
super(Buffer.from(blob).toString("utf-8"), {
|
|
227
|
+
...options,
|
|
228
|
+
fromSource: true
|
|
229
|
+
});
|
|
61
230
|
}
|
|
62
231
|
static fromText(source, options) {
|
|
63
|
-
return new Worker3(source, {
|
|
232
|
+
return new Worker3(source, {
|
|
233
|
+
...options,
|
|
234
|
+
fromSource: true
|
|
235
|
+
});
|
|
64
236
|
}
|
|
65
|
-
}
|
|
237
|
+
};
|
|
66
238
|
return {
|
|
67
239
|
blob: BlobWorker2,
|
|
68
240
|
default: Worker3
|
|
69
241
|
};
|
|
70
242
|
}
|
|
243
|
+
__name(initWorkerThreadsWorker, "initWorkerThreadsWorker");
|
|
71
244
|
function initTinyWorker() {
|
|
72
|
-
const TinyWorker =
|
|
245
|
+
const TinyWorker = require_lib();
|
|
73
246
|
let allWorkers = [];
|
|
74
|
-
|
|
247
|
+
let Worker3 = class Worker extends TinyWorker {
|
|
248
|
+
static {
|
|
249
|
+
__name(this, "Worker");
|
|
250
|
+
}
|
|
75
251
|
emitter;
|
|
76
252
|
constructor(scriptPath, options) {
|
|
77
253
|
const resolvedScriptPath = options && options.fromSource ? null : process.platform === "win32" ? `file:///${resolveScriptPath(scriptPath).replaceAll("\\", "/")}` : resolveScriptPath(scriptPath);
|
|
78
254
|
if (resolvedScriptPath) {
|
|
79
|
-
super(resolvedScriptPath, [], {
|
|
255
|
+
super(resolvedScriptPath, [], {
|
|
256
|
+
esm: true
|
|
257
|
+
});
|
|
80
258
|
} else {
|
|
81
259
|
const sourceCode = scriptPath;
|
|
82
|
-
super(new Function(sourceCode), [], {
|
|
260
|
+
super(new Function(sourceCode), [], {
|
|
261
|
+
esm: true
|
|
262
|
+
});
|
|
83
263
|
}
|
|
84
264
|
allWorkers.push(this);
|
|
85
265
|
this.emitter = new EventEmitter();
|
|
@@ -96,29 +276,36 @@ function initTinyWorker() {
|
|
|
96
276
|
allWorkers = allWorkers.filter((worker) => worker !== this);
|
|
97
277
|
return super.terminate();
|
|
98
278
|
}
|
|
99
|
-
}
|
|
100
|
-
const terminateWorkersAndMaster = () => {
|
|
101
|
-
Promise.all(allWorkers.map((worker) => worker.terminate())).then(
|
|
102
|
-
() => process.exit(0),
|
|
103
|
-
() => process.exit(1)
|
|
104
|
-
);
|
|
105
|
-
allWorkers = [];
|
|
106
279
|
};
|
|
280
|
+
const terminateWorkersAndMaster = /* @__PURE__ */ __name(() => {
|
|
281
|
+
Promise.all(allWorkers.map((worker) => worker.terminate())).then(() => process.exit(0), () => process.exit(1));
|
|
282
|
+
allWorkers = [];
|
|
283
|
+
}, "terminateWorkersAndMaster");
|
|
107
284
|
process.on("SIGINT", () => terminateWorkersAndMaster());
|
|
108
285
|
process.on("SIGTERM", () => terminateWorkersAndMaster());
|
|
109
|
-
|
|
286
|
+
let BlobWorker2 = class BlobWorker extends Worker3 {
|
|
287
|
+
static {
|
|
288
|
+
__name(this, "BlobWorker");
|
|
289
|
+
}
|
|
110
290
|
constructor(blob, options) {
|
|
111
|
-
super(Buffer.from(blob).toString("utf-8"), {
|
|
291
|
+
super(Buffer.from(blob).toString("utf-8"), {
|
|
292
|
+
...options,
|
|
293
|
+
fromSource: true
|
|
294
|
+
});
|
|
112
295
|
}
|
|
113
296
|
static fromText(source, options) {
|
|
114
|
-
return new Worker3(source, {
|
|
297
|
+
return new Worker3(source, {
|
|
298
|
+
...options,
|
|
299
|
+
fromSource: true
|
|
300
|
+
});
|
|
115
301
|
}
|
|
116
|
-
}
|
|
302
|
+
};
|
|
117
303
|
return {
|
|
118
304
|
blob: BlobWorker2,
|
|
119
305
|
default: Worker3
|
|
120
306
|
};
|
|
121
307
|
}
|
|
308
|
+
__name(initTinyWorker, "initTinyWorker");
|
|
122
309
|
var implementation;
|
|
123
310
|
var isTinyWorker;
|
|
124
311
|
function selectWorkerImplementation() {
|
|
@@ -132,12 +319,14 @@ function selectWorkerImplementation() {
|
|
|
132
319
|
return initTinyWorker();
|
|
133
320
|
}
|
|
134
321
|
}
|
|
322
|
+
__name(selectWorkerImplementation, "selectWorkerImplementation");
|
|
135
323
|
function getWorkerImplementation() {
|
|
136
324
|
if (!implementation) {
|
|
137
325
|
implementation = selectWorkerImplementation();
|
|
138
326
|
}
|
|
139
327
|
return implementation;
|
|
140
328
|
}
|
|
329
|
+
__name(getWorkerImplementation, "getWorkerImplementation");
|
|
141
330
|
function isWorkerRuntime() {
|
|
142
331
|
if (isTinyWorker) {
|
|
143
332
|
return globalThis !== void 0 && self["postMessage"] ? true : false;
|
|
@@ -146,20 +335,17 @@ function isWorkerRuntime() {
|
|
|
146
335
|
return !isMainThread;
|
|
147
336
|
}
|
|
148
337
|
}
|
|
338
|
+
__name(isWorkerRuntime, "isWorkerRuntime");
|
|
149
339
|
|
|
150
340
|
// src/master/pool-browser.ts
|
|
151
341
|
import DebugLogger from "debug";
|
|
152
|
-
import {
|
|
153
|
-
multicast,
|
|
154
|
-
Observable,
|
|
155
|
-
Subject
|
|
156
|
-
} from "observable-fns";
|
|
342
|
+
import { multicast, Observable, Subject } from "observable-fns";
|
|
157
343
|
|
|
158
344
|
// src/master/implementation.browser.ts
|
|
159
345
|
var defaultPoolSize2 = typeof navigator !== "undefined" && navigator.hardwareConcurrency ? navigator.hardwareConcurrency : 4;
|
|
160
346
|
|
|
161
347
|
// src/master/pool-types.ts
|
|
162
|
-
var PoolEventType = /* @__PURE__ */ (
|
|
348
|
+
var PoolEventType = /* @__PURE__ */ function(PoolEventType2) {
|
|
163
349
|
PoolEventType2["initialized"] = "initialized";
|
|
164
350
|
PoolEventType2["taskCanceled"] = "taskCanceled";
|
|
165
351
|
PoolEventType2["taskCompleted"] = "taskCompleted";
|
|
@@ -169,7 +355,7 @@ var PoolEventType = /* @__PURE__ */ ((PoolEventType2) => {
|
|
|
169
355
|
PoolEventType2["taskStart"] = "taskStart";
|
|
170
356
|
PoolEventType2["terminated"] = "terminated";
|
|
171
357
|
return PoolEventType2;
|
|
172
|
-
}
|
|
358
|
+
}({});
|
|
173
359
|
|
|
174
360
|
// src/symbols.ts
|
|
175
361
|
var $errors = Symbol("thread.errors");
|
|
@@ -182,6 +368,7 @@ var $worker = Symbol("thread.worker");
|
|
|
182
368
|
function fail(message) {
|
|
183
369
|
throw new Error(message);
|
|
184
370
|
}
|
|
371
|
+
__name(fail, "fail");
|
|
185
372
|
var Thread = {
|
|
186
373
|
/** Return an observable that can be used to subscribe to all errors happening in the thread. */
|
|
187
374
|
errors(thread) {
|
|
@@ -206,24 +393,33 @@ function createArray(size) {
|
|
|
206
393
|
}
|
|
207
394
|
return array;
|
|
208
395
|
}
|
|
396
|
+
__name(createArray, "createArray");
|
|
209
397
|
function delay(ms) {
|
|
210
398
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
211
399
|
}
|
|
400
|
+
__name(delay, "delay");
|
|
212
401
|
function flatMap(array, mapper) {
|
|
213
|
-
return array.reduce((flattened, element) => [
|
|
402
|
+
return array.reduce((flattened, element) => [
|
|
403
|
+
...flattened,
|
|
404
|
+
...mapper(element)
|
|
405
|
+
], []);
|
|
214
406
|
}
|
|
407
|
+
__name(flatMap, "flatMap");
|
|
215
408
|
function slugify(text) {
|
|
216
409
|
return text.replaceAll(/\W/g, " ").trim().replaceAll(/\s+/g, "-");
|
|
217
410
|
}
|
|
411
|
+
__name(slugify, "slugify");
|
|
218
412
|
function spawnWorkers(spawnWorker, count) {
|
|
219
|
-
return createArray(count).map(
|
|
220
|
-
()
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
})
|
|
224
|
-
);
|
|
413
|
+
return createArray(count).map(() => ({
|
|
414
|
+
init: spawnWorker(),
|
|
415
|
+
runningTasks: []
|
|
416
|
+
}));
|
|
225
417
|
}
|
|
226
|
-
|
|
418
|
+
__name(spawnWorkers, "spawnWorkers");
|
|
419
|
+
var WorkerPool = class WorkerPool2 {
|
|
420
|
+
static {
|
|
421
|
+
__name(this, "WorkerPool");
|
|
422
|
+
}
|
|
227
423
|
static EventType = PoolEventType;
|
|
228
424
|
debug;
|
|
229
425
|
eventObservable;
|
|
@@ -235,23 +431,22 @@ var WorkerPool = class {
|
|
|
235
431
|
nextTaskID = 1;
|
|
236
432
|
taskQueue = [];
|
|
237
433
|
constructor(spawnWorker, optionsOrSize) {
|
|
238
|
-
const options = typeof optionsOrSize === "number" ? {
|
|
434
|
+
const options = typeof optionsOrSize === "number" ? {
|
|
435
|
+
size: optionsOrSize
|
|
436
|
+
} : optionsOrSize || {};
|
|
239
437
|
const { size = defaultPoolSize2 } = options;
|
|
240
438
|
this.debug = DebugLogger(`threads:pool:${slugify(options.name || String(nextPoolID++))}`);
|
|
241
439
|
this.options = options;
|
|
242
440
|
this.workers = spawnWorkers(spawnWorker, size);
|
|
243
441
|
this.eventObservable = multicast(Observable.from(this.eventSubject));
|
|
244
|
-
Promise.all(this.workers.map((worker) => worker.init)).then(
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
(error)
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
this.initErrors.push(error);
|
|
253
|
-
}
|
|
254
|
-
);
|
|
442
|
+
Promise.all(this.workers.map((worker) => worker.init)).then(() => this.eventSubject.next({
|
|
443
|
+
size: this.workers.length,
|
|
444
|
+
type: PoolEventType.initialized
|
|
445
|
+
}), (error) => {
|
|
446
|
+
this.debug("Error while initializing pool worker:", error);
|
|
447
|
+
this.eventSubject.error(error);
|
|
448
|
+
this.initErrors.push(error);
|
|
449
|
+
});
|
|
255
450
|
}
|
|
256
451
|
findIdlingWorker() {
|
|
257
452
|
const { concurrency = 1 } = this.options;
|
|
@@ -262,7 +457,7 @@ var WorkerPool = class {
|
|
|
262
457
|
this.debug(`Running task #${task.id} on worker #${workerID}...`);
|
|
263
458
|
this.eventSubject.next({
|
|
264
459
|
taskID: task.id,
|
|
265
|
-
type:
|
|
460
|
+
type: PoolEventType.taskStart,
|
|
266
461
|
workerID
|
|
267
462
|
});
|
|
268
463
|
try {
|
|
@@ -271,7 +466,7 @@ var WorkerPool = class {
|
|
|
271
466
|
this.eventSubject.next({
|
|
272
467
|
returnValue,
|
|
273
468
|
taskID: task.id,
|
|
274
|
-
type:
|
|
469
|
+
type: PoolEventType.taskCompleted,
|
|
275
470
|
workerID
|
|
276
471
|
});
|
|
277
472
|
} catch (ex) {
|
|
@@ -280,16 +475,16 @@ var WorkerPool = class {
|
|
|
280
475
|
this.eventSubject.next({
|
|
281
476
|
error,
|
|
282
477
|
taskID: task.id,
|
|
283
|
-
type:
|
|
478
|
+
type: PoolEventType.taskFailed,
|
|
284
479
|
workerID
|
|
285
480
|
});
|
|
286
481
|
}
|
|
287
482
|
}
|
|
288
483
|
run(worker, task) {
|
|
289
484
|
const runPromise = (async () => {
|
|
290
|
-
const removeTaskFromWorkersRunningTasks = () => {
|
|
485
|
+
const removeTaskFromWorkersRunningTasks = /* @__PURE__ */ __name(() => {
|
|
291
486
|
worker.runningTasks = worker.runningTasks.filter((someRunPromise) => someRunPromise !== runPromise);
|
|
292
|
-
};
|
|
487
|
+
}, "removeTaskFromWorkersRunningTasks");
|
|
293
488
|
await delay(0);
|
|
294
489
|
try {
|
|
295
490
|
await this.runPoolTask(worker, task);
|
|
@@ -309,7 +504,9 @@ var WorkerPool = class {
|
|
|
309
504
|
const nextTask = this.taskQueue.shift();
|
|
310
505
|
if (!nextTask) {
|
|
311
506
|
this.debug("Task queue is empty");
|
|
312
|
-
this.eventSubject.next({
|
|
507
|
+
this.eventSubject.next({
|
|
508
|
+
type: PoolEventType.taskQueueDrained
|
|
509
|
+
});
|
|
313
510
|
return;
|
|
314
511
|
}
|
|
315
512
|
this.run(availableWorker, nextTask);
|
|
@@ -317,13 +514,13 @@ var WorkerPool = class {
|
|
|
317
514
|
taskCompletion(taskID) {
|
|
318
515
|
return new Promise((resolve, reject) => {
|
|
319
516
|
const eventSubscription = this.events().subscribe((event) => {
|
|
320
|
-
if (event.type ===
|
|
517
|
+
if (event.type === PoolEventType.taskCompleted && event.taskID === taskID) {
|
|
321
518
|
eventSubscription.unsubscribe();
|
|
322
519
|
resolve(event.returnValue);
|
|
323
|
-
} else if (event.type ===
|
|
520
|
+
} else if (event.type === PoolEventType.taskFailed && event.taskID === taskID) {
|
|
324
521
|
eventSubscription.unsubscribe();
|
|
325
522
|
reject(event.error);
|
|
326
|
-
} else if (event.type ===
|
|
523
|
+
} else if (event.type === PoolEventType.terminated) {
|
|
327
524
|
eventSubscription.unsubscribe();
|
|
328
525
|
reject(new Error("Pool has been terminated before task was run."));
|
|
329
526
|
}
|
|
@@ -331,10 +528,10 @@ var WorkerPool = class {
|
|
|
331
528
|
});
|
|
332
529
|
}
|
|
333
530
|
async settled(allowResolvingImmediately = false) {
|
|
334
|
-
const getCurrentlyRunningTasks = () => flatMap(this.workers, (worker) => worker.runningTasks);
|
|
531
|
+
const getCurrentlyRunningTasks = /* @__PURE__ */ __name(() => flatMap(this.workers, (worker) => worker.runningTasks), "getCurrentlyRunningTasks");
|
|
335
532
|
const taskFailures = [];
|
|
336
533
|
const failureSubscription = this.eventObservable.subscribe((event) => {
|
|
337
|
-
if (event.type ===
|
|
534
|
+
if (event.type === PoolEventType.taskFailed) {
|
|
338
535
|
taskFailures.push(event.error);
|
|
339
536
|
}
|
|
340
537
|
});
|
|
@@ -349,12 +546,11 @@ var WorkerPool = class {
|
|
|
349
546
|
const subscription = this.eventObservable.subscribe({
|
|
350
547
|
error: reject,
|
|
351
548
|
next(event) {
|
|
352
|
-
if (event.type ===
|
|
549
|
+
if (event.type === PoolEventType.taskQueueDrained) {
|
|
353
550
|
subscription.unsubscribe();
|
|
354
551
|
resolve(void 0);
|
|
355
552
|
}
|
|
356
553
|
}
|
|
357
|
-
// make a pool-wide error reject the completed() result promise
|
|
358
554
|
});
|
|
359
555
|
});
|
|
360
556
|
await Promise.allSettled(getCurrentlyRunningTasks());
|
|
@@ -367,18 +563,20 @@ var WorkerPool = class {
|
|
|
367
563
|
const subscription = this.eventObservable.subscribe({
|
|
368
564
|
error: reject,
|
|
369
565
|
next(event) {
|
|
370
|
-
if (event.type ===
|
|
566
|
+
if (event.type === PoolEventType.taskQueueDrained) {
|
|
371
567
|
subscription.unsubscribe();
|
|
372
568
|
resolve(settlementPromise);
|
|
373
|
-
} else if (event.type ===
|
|
569
|
+
} else if (event.type === PoolEventType.taskFailed) {
|
|
374
570
|
subscription.unsubscribe();
|
|
375
571
|
reject(event.error);
|
|
376
572
|
}
|
|
377
573
|
}
|
|
378
|
-
// make a pool-wide error reject the completed() result promise
|
|
379
574
|
});
|
|
380
575
|
});
|
|
381
|
-
const errors = await Promise.race([
|
|
576
|
+
const errors = await Promise.race([
|
|
577
|
+
settlementPromise,
|
|
578
|
+
earlyExitPromise
|
|
579
|
+
]);
|
|
382
580
|
if (errors.length > 0) {
|
|
383
581
|
throw errors[0];
|
|
384
582
|
}
|
|
@@ -400,28 +598,26 @@ var WorkerPool = class {
|
|
|
400
598
|
this.debug(`Task #${taskID} errored:`, error);
|
|
401
599
|
});
|
|
402
600
|
const task = {
|
|
403
|
-
cancel: () => {
|
|
601
|
+
cancel: /* @__PURE__ */ __name(() => {
|
|
404
602
|
if (!this.taskQueue.includes(task)) return;
|
|
405
603
|
this.taskQueue = this.taskQueue.filter((someTask) => someTask !== task);
|
|
406
604
|
this.eventSubject.next({
|
|
407
605
|
taskID: task.id,
|
|
408
|
-
type:
|
|
606
|
+
type: PoolEventType.taskCanceled
|
|
409
607
|
});
|
|
410
|
-
},
|
|
608
|
+
}, "cancel"),
|
|
411
609
|
id: taskID,
|
|
412
610
|
run: taskFunction,
|
|
413
611
|
then: taskCompletion.then.bind(taskCompletion)
|
|
414
612
|
};
|
|
415
613
|
if (this.taskQueue.length >= maxQueuedJobs) {
|
|
416
|
-
throw new Error(
|
|
417
|
-
"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."
|
|
418
|
-
);
|
|
614
|
+
throw new Error("Maximum number of pool tasks queued. Refusing to queue another one.\nThis usually happens for one of two reasons: We are either at peak workload right now or some tasks just won't finish, thus blocking the pool.");
|
|
419
615
|
}
|
|
420
616
|
this.debug(`Queueing task #${task.id}...`);
|
|
421
617
|
this.taskQueue.push(task);
|
|
422
618
|
this.eventSubject.next({
|
|
423
619
|
taskID: task.id,
|
|
424
|
-
type:
|
|
620
|
+
type: PoolEventType.taskQueued
|
|
425
621
|
});
|
|
426
622
|
this.scheduleWork();
|
|
427
623
|
return task;
|
|
@@ -432,8 +628,10 @@ var WorkerPool = class {
|
|
|
432
628
|
await this.completed(true);
|
|
433
629
|
}
|
|
434
630
|
this.eventSubject.next({
|
|
435
|
-
remainingQueue: [
|
|
436
|
-
|
|
631
|
+
remainingQueue: [
|
|
632
|
+
...this.taskQueue
|
|
633
|
+
],
|
|
634
|
+
type: PoolEventType.terminated
|
|
437
635
|
});
|
|
438
636
|
this.eventSubject.complete();
|
|
439
637
|
await Promise.all(this.workers.map(async (worker) => Thread.terminate(await worker.init)));
|
|
@@ -442,6 +640,7 @@ var WorkerPool = class {
|
|
|
442
640
|
function PoolConstructor(spawnWorker, optionsOrSize) {
|
|
443
641
|
return new WorkerPool(spawnWorker, optionsOrSize);
|
|
444
642
|
}
|
|
643
|
+
__name(PoolConstructor, "PoolConstructor");
|
|
445
644
|
PoolConstructor.EventType = PoolEventType;
|
|
446
645
|
var Pool = PoolConstructor;
|
|
447
646
|
|
|
@@ -466,7 +665,7 @@ var DefaultErrorSerializer = {
|
|
|
466
665
|
};
|
|
467
666
|
}
|
|
468
667
|
};
|
|
469
|
-
var isSerializedError = (thing) => thing && typeof thing === "object" && "__error_marker" in thing && thing.__error_marker === "$$error";
|
|
668
|
+
var isSerializedError = /* @__PURE__ */ __name((thing) => thing && typeof thing === "object" && "__error_marker" in thing && thing.__error_marker === "$$error", "isSerializedError");
|
|
470
669
|
var DefaultSerializer = {
|
|
471
670
|
deserialize(message) {
|
|
472
671
|
return isSerializedError(message) ? DefaultErrorSerializer.deserialize(message) : message;
|
|
@@ -481,12 +680,14 @@ globalThis.registeredSerializer = globalThis.registeredSerializer ?? DefaultSeri
|
|
|
481
680
|
function deserialize(message) {
|
|
482
681
|
return globalThis.registeredSerializer.deserialize(message);
|
|
483
682
|
}
|
|
683
|
+
__name(deserialize, "deserialize");
|
|
484
684
|
function serialize(input) {
|
|
485
685
|
return globalThis.registeredSerializer.serialize(input);
|
|
486
686
|
}
|
|
687
|
+
__name(serialize, "serialize");
|
|
487
688
|
|
|
488
689
|
// src/promise.ts
|
|
489
|
-
var doNothing = () => void 0;
|
|
690
|
+
var doNothing = /* @__PURE__ */ __name(() => void 0, "doNothing");
|
|
490
691
|
function createPromiseWithResolver() {
|
|
491
692
|
let alreadyResolved = false;
|
|
492
693
|
let resolvedTo;
|
|
@@ -498,13 +699,25 @@ function createPromiseWithResolver() {
|
|
|
498
699
|
resolver = resolve;
|
|
499
700
|
}
|
|
500
701
|
});
|
|
501
|
-
const exposedResolver = (value) => {
|
|
702
|
+
const exposedResolver = /* @__PURE__ */ __name((value) => {
|
|
502
703
|
alreadyResolved = true;
|
|
503
704
|
resolvedTo = value;
|
|
504
705
|
resolver(resolvedTo);
|
|
505
|
-
};
|
|
506
|
-
return [
|
|
706
|
+
}, "exposedResolver");
|
|
707
|
+
return [
|
|
708
|
+
promise,
|
|
709
|
+
exposedResolver
|
|
710
|
+
];
|
|
507
711
|
}
|
|
712
|
+
__name(createPromiseWithResolver, "createPromiseWithResolver");
|
|
713
|
+
|
|
714
|
+
// src/types/master.ts
|
|
715
|
+
var WorkerEventType = /* @__PURE__ */ function(WorkerEventType2) {
|
|
716
|
+
WorkerEventType2["internalError"] = "internalError";
|
|
717
|
+
WorkerEventType2["message"] = "message";
|
|
718
|
+
WorkerEventType2["termination"] = "termination";
|
|
719
|
+
return WorkerEventType2;
|
|
720
|
+
}({});
|
|
508
721
|
|
|
509
722
|
// src/master/invocation-proxy.ts
|
|
510
723
|
import DebugLogger2 from "debug";
|
|
@@ -512,17 +725,22 @@ import { multicast as multicast2, Observable as Observable3 } from "observable-f
|
|
|
512
725
|
|
|
513
726
|
// src/observable-promise.ts
|
|
514
727
|
import { Observable as Observable2 } from "observable-fns";
|
|
515
|
-
var doNothing2 = () => {
|
|
516
|
-
};
|
|
517
|
-
var returnInput = (input) => input;
|
|
518
|
-
var runDeferred = (fn) => Promise.resolve().then(fn);
|
|
728
|
+
var doNothing2 = /* @__PURE__ */ __name(() => {
|
|
729
|
+
}, "doNothing");
|
|
730
|
+
var returnInput = /* @__PURE__ */ __name((input) => input, "returnInput");
|
|
731
|
+
var runDeferred = /* @__PURE__ */ __name((fn) => Promise.resolve().then(fn), "runDeferred");
|
|
519
732
|
function fail2(error) {
|
|
520
733
|
throw error;
|
|
521
734
|
}
|
|
735
|
+
__name(fail2, "fail");
|
|
522
736
|
function isThenable(thing) {
|
|
523
737
|
return thing && typeof thing.then === "function";
|
|
524
738
|
}
|
|
739
|
+
__name(isThenable, "isThenable");
|
|
525
740
|
var ObservablePromise = class _ObservablePromise extends Observable2 {
|
|
741
|
+
static {
|
|
742
|
+
__name(this, "ObservablePromise");
|
|
743
|
+
}
|
|
526
744
|
[Symbol.toStringTag] = "[object ObservablePromise]";
|
|
527
745
|
initHasRun = false;
|
|
528
746
|
fulfillmentCallbacks = [];
|
|
@@ -581,7 +799,7 @@ var ObservablePromise = class _ObservablePromise extends Observable2 {
|
|
|
581
799
|
const onRejected = onRejectedRaw || fail2;
|
|
582
800
|
let onRejectedCalled = false;
|
|
583
801
|
return new Promise((resolve, reject) => {
|
|
584
|
-
const rejectionCallback = (error) => {
|
|
802
|
+
const rejectionCallback = /* @__PURE__ */ __name((error) => {
|
|
585
803
|
if (onRejectedCalled) return;
|
|
586
804
|
onRejectedCalled = true;
|
|
587
805
|
try {
|
|
@@ -589,17 +807,19 @@ var ObservablePromise = class _ObservablePromise extends Observable2 {
|
|
|
589
807
|
} catch (anotherError) {
|
|
590
808
|
reject(anotherError);
|
|
591
809
|
}
|
|
592
|
-
};
|
|
593
|
-
const fulfillmentCallback = (value) => {
|
|
810
|
+
}, "rejectionCallback");
|
|
811
|
+
const fulfillmentCallback = /* @__PURE__ */ __name((value) => {
|
|
594
812
|
try {
|
|
595
813
|
resolve(onFulfilled(value));
|
|
596
814
|
} catch (ex) {
|
|
597
815
|
const error = ex;
|
|
598
816
|
rejectionCallback(error);
|
|
599
817
|
}
|
|
600
|
-
};
|
|
818
|
+
}, "fulfillmentCallback");
|
|
601
819
|
if (!this.initHasRun) {
|
|
602
|
-
this.subscribe({
|
|
820
|
+
this.subscribe({
|
|
821
|
+
error: rejectionCallback
|
|
822
|
+
});
|
|
603
823
|
}
|
|
604
824
|
if (this.state === "fulfilled") {
|
|
605
825
|
return resolve(onFulfilled(this.firstValue));
|
|
@@ -617,23 +837,20 @@ var ObservablePromise = class _ObservablePromise extends Observable2 {
|
|
|
617
837
|
}
|
|
618
838
|
finally(onCompleted) {
|
|
619
839
|
const handler = onCompleted || doNothing2;
|
|
620
|
-
return this.then(
|
|
621
|
-
(
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
},
|
|
625
|
-
() => handler()
|
|
626
|
-
);
|
|
840
|
+
return this.then((value) => {
|
|
841
|
+
handler();
|
|
842
|
+
return value;
|
|
843
|
+
}, () => handler());
|
|
627
844
|
}
|
|
628
845
|
static from(thing) {
|
|
629
846
|
return isThenable(thing) ? new _ObservablePromise((observer) => {
|
|
630
|
-
const onFulfilled = (value) => {
|
|
847
|
+
const onFulfilled = /* @__PURE__ */ __name((value) => {
|
|
631
848
|
observer.next(value);
|
|
632
849
|
observer.complete();
|
|
633
|
-
};
|
|
634
|
-
const onRejected = (error) => {
|
|
850
|
+
}, "onFulfilled");
|
|
851
|
+
const onRejected = /* @__PURE__ */ __name((error) => {
|
|
635
852
|
observer.error(error);
|
|
636
|
-
};
|
|
853
|
+
}, "onRejected");
|
|
637
854
|
thing.then(onFulfilled, onRejected);
|
|
638
855
|
}) : super.from(thing);
|
|
639
856
|
}
|
|
@@ -643,18 +860,36 @@ var ObservablePromise = class _ObservablePromise extends Observable2 {
|
|
|
643
860
|
function isTransferDescriptor(thing) {
|
|
644
861
|
return thing && typeof thing === "object" && thing[$transferable];
|
|
645
862
|
}
|
|
863
|
+
__name(isTransferDescriptor, "isTransferDescriptor");
|
|
864
|
+
|
|
865
|
+
// src/types/messages.ts
|
|
866
|
+
var MasterMessageType = /* @__PURE__ */ function(MasterMessageType2) {
|
|
867
|
+
MasterMessageType2["cancel"] = "cancel";
|
|
868
|
+
MasterMessageType2["run"] = "run";
|
|
869
|
+
return MasterMessageType2;
|
|
870
|
+
}({});
|
|
871
|
+
var WorkerMessageType = /* @__PURE__ */ function(WorkerMessageType2) {
|
|
872
|
+
WorkerMessageType2["error"] = "error";
|
|
873
|
+
WorkerMessageType2["init"] = "init";
|
|
874
|
+
WorkerMessageType2["result"] = "result";
|
|
875
|
+
WorkerMessageType2["running"] = "running";
|
|
876
|
+
WorkerMessageType2["uncaughtError"] = "uncaughtError";
|
|
877
|
+
return WorkerMessageType2;
|
|
878
|
+
}({});
|
|
646
879
|
|
|
647
880
|
// src/master/invocation-proxy.ts
|
|
648
881
|
var debugMessages = DebugLogger2("threads:master:messages");
|
|
649
882
|
var nextJobUID = 1;
|
|
650
|
-
var dedupe = (array) => [
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
var
|
|
883
|
+
var dedupe = /* @__PURE__ */ __name((array) => [
|
|
884
|
+
...new Set(array)
|
|
885
|
+
], "dedupe");
|
|
886
|
+
var isJobErrorMessage = /* @__PURE__ */ __name((data) => data && data.type === WorkerMessageType.error, "isJobErrorMessage");
|
|
887
|
+
var isJobResultMessage = /* @__PURE__ */ __name((data) => data && data.type === WorkerMessageType.result, "isJobResultMessage");
|
|
888
|
+
var isJobStartMessage = /* @__PURE__ */ __name((data) => data && data.type === WorkerMessageType.running, "isJobStartMessage");
|
|
654
889
|
function createObservableForJob(worker, jobUID) {
|
|
655
890
|
return new Observable3((observer) => {
|
|
656
891
|
let asyncType;
|
|
657
|
-
const messageHandler = (event) => {
|
|
892
|
+
const messageHandler = /* @__PURE__ */ __name((event) => {
|
|
658
893
|
debugMessages("Message from worker:", event.data);
|
|
659
894
|
if (!event.data || event.data.uid !== jobUID) return;
|
|
660
895
|
if (isJobStartMessage(event.data)) {
|
|
@@ -684,12 +919,12 @@ function createObservableForJob(worker, jobUID) {
|
|
|
684
919
|
}
|
|
685
920
|
worker.removeEventListener("message", messageHandler);
|
|
686
921
|
}
|
|
687
|
-
};
|
|
922
|
+
}, "messageHandler");
|
|
688
923
|
worker.addEventListener("message", messageHandler);
|
|
689
924
|
return () => {
|
|
690
925
|
if (asyncType === "observable" || !asyncType) {
|
|
691
926
|
const cancelMessage = {
|
|
692
|
-
type:
|
|
927
|
+
type: MasterMessageType.cancel,
|
|
693
928
|
uid: jobUID
|
|
694
929
|
};
|
|
695
930
|
worker.postMessage(cancelMessage);
|
|
@@ -698,6 +933,7 @@ function createObservableForJob(worker, jobUID) {
|
|
|
698
933
|
};
|
|
699
934
|
});
|
|
700
935
|
}
|
|
936
|
+
__name(createObservableForJob, "createObservableForJob");
|
|
701
937
|
function prepareArguments(rawArgs) {
|
|
702
938
|
if (rawArgs.length === 0) {
|
|
703
939
|
return {
|
|
@@ -720,6 +956,7 @@ function prepareArguments(rawArgs) {
|
|
|
720
956
|
transferables: transferables.length === 0 ? transferables : dedupe(transferables)
|
|
721
957
|
};
|
|
722
958
|
}
|
|
959
|
+
__name(prepareArguments, "prepareArguments");
|
|
723
960
|
function createProxyFunction(worker, method) {
|
|
724
961
|
return (...rawArgs) => {
|
|
725
962
|
const uid = nextJobUID++;
|
|
@@ -727,7 +964,7 @@ function createProxyFunction(worker, method) {
|
|
|
727
964
|
const runMessage = {
|
|
728
965
|
args,
|
|
729
966
|
method,
|
|
730
|
-
type:
|
|
967
|
+
type: MasterMessageType.run,
|
|
731
968
|
uid
|
|
732
969
|
};
|
|
733
970
|
debugMessages("Sending command to run function to worker:", runMessage);
|
|
@@ -739,6 +976,7 @@ function createProxyFunction(worker, method) {
|
|
|
739
976
|
return ObservablePromise.from(multicast2(createObservableForJob(worker, uid)));
|
|
740
977
|
};
|
|
741
978
|
}
|
|
979
|
+
__name(createProxyFunction, "createProxyFunction");
|
|
742
980
|
function createProxyModule(worker, methodNames) {
|
|
743
981
|
const proxy = {};
|
|
744
982
|
for (const methodName of methodNames) {
|
|
@@ -746,26 +984,31 @@ function createProxyModule(worker, methodNames) {
|
|
|
746
984
|
}
|
|
747
985
|
return proxy;
|
|
748
986
|
}
|
|
987
|
+
__name(createProxyModule, "createProxyModule");
|
|
749
988
|
|
|
750
989
|
// src/master/spawn.ts
|
|
751
990
|
var debugMessages2 = DebugLogger3("threads:master:messages");
|
|
752
991
|
var debugSpawn = DebugLogger3("threads:master:spawn");
|
|
753
992
|
var debugThreadUtils = DebugLogger3("threads:master:thread-utils");
|
|
754
|
-
var isInitMessage = (data) => data && data.type === "init";
|
|
755
|
-
var isUncaughtErrorMessage = (data) => data && data.type === "uncaughtError";
|
|
993
|
+
var isInitMessage = /* @__PURE__ */ __name((data) => data && data.type === "init", "isInitMessage");
|
|
994
|
+
var isUncaughtErrorMessage = /* @__PURE__ */ __name((data) => data && data.type === "uncaughtError", "isUncaughtErrorMessage");
|
|
756
995
|
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;
|
|
757
996
|
async function withTimeout(promise, timeoutInMs, errorMessage) {
|
|
758
997
|
let timeoutHandle;
|
|
759
998
|
const timeout = new Promise((resolve, reject) => {
|
|
760
999
|
timeoutHandle = setTimeout(() => reject(new Error(errorMessage)), timeoutInMs);
|
|
761
1000
|
});
|
|
762
|
-
const result = await Promise.race([
|
|
1001
|
+
const result = await Promise.race([
|
|
1002
|
+
promise,
|
|
1003
|
+
timeout
|
|
1004
|
+
]);
|
|
763
1005
|
clearTimeout(timeoutHandle);
|
|
764
1006
|
return result;
|
|
765
1007
|
}
|
|
1008
|
+
__name(withTimeout, "withTimeout");
|
|
766
1009
|
function receiveInitMessage(worker) {
|
|
767
1010
|
return new Promise((resolve, reject) => {
|
|
768
|
-
const messageHandler = (event) => {
|
|
1011
|
+
const messageHandler = /* @__PURE__ */ __name((event) => {
|
|
769
1012
|
debugMessages2("Message from worker before finishing initialization:", event.data);
|
|
770
1013
|
if (isInitMessage(event.data)) {
|
|
771
1014
|
worker.removeEventListener("message", messageHandler);
|
|
@@ -774,31 +1017,34 @@ function receiveInitMessage(worker) {
|
|
|
774
1017
|
worker.removeEventListener("message", messageHandler);
|
|
775
1018
|
reject(deserialize(event.data.error));
|
|
776
1019
|
}
|
|
777
|
-
};
|
|
1020
|
+
}, "messageHandler");
|
|
778
1021
|
worker.addEventListener("message", messageHandler);
|
|
779
1022
|
});
|
|
780
1023
|
}
|
|
1024
|
+
__name(receiveInitMessage, "receiveInitMessage");
|
|
781
1025
|
function createEventObservable(worker, workerTermination) {
|
|
782
1026
|
return new Observable4((observer) => {
|
|
783
|
-
const messageHandler = (messageEvent) => {
|
|
1027
|
+
const messageHandler = /* @__PURE__ */ __name((messageEvent) => {
|
|
784
1028
|
const workerEvent = {
|
|
785
1029
|
data: messageEvent.data,
|
|
786
|
-
type:
|
|
1030
|
+
type: WorkerEventType.message
|
|
787
1031
|
};
|
|
788
1032
|
observer.next(workerEvent);
|
|
789
|
-
};
|
|
790
|
-
const rejectionHandler = (errorEvent) => {
|
|
1033
|
+
}, "messageHandler");
|
|
1034
|
+
const rejectionHandler = /* @__PURE__ */ __name((errorEvent) => {
|
|
791
1035
|
debugThreadUtils("Unhandled promise rejection event in thread:", errorEvent);
|
|
792
1036
|
const workerEvent = {
|
|
793
1037
|
error: new Error(errorEvent.reason),
|
|
794
|
-
type:
|
|
1038
|
+
type: WorkerEventType.internalError
|
|
795
1039
|
};
|
|
796
1040
|
observer.next(workerEvent);
|
|
797
|
-
};
|
|
1041
|
+
}, "rejectionHandler");
|
|
798
1042
|
worker.addEventListener("message", messageHandler);
|
|
799
1043
|
worker.addEventListener("unhandledrejection", rejectionHandler);
|
|
800
1044
|
workerTermination.then(() => {
|
|
801
|
-
const terminationEvent = {
|
|
1045
|
+
const terminationEvent = {
|
|
1046
|
+
type: WorkerEventType.termination
|
|
1047
|
+
};
|
|
802
1048
|
worker.removeEventListener("message", messageHandler);
|
|
803
1049
|
worker.removeEventListener("unhandledrejection", rejectionHandler);
|
|
804
1050
|
observer.next(terminationEvent);
|
|
@@ -806,17 +1052,22 @@ function createEventObservable(worker, workerTermination) {
|
|
|
806
1052
|
});
|
|
807
1053
|
});
|
|
808
1054
|
}
|
|
1055
|
+
__name(createEventObservable, "createEventObservable");
|
|
809
1056
|
function createTerminator(worker) {
|
|
810
1057
|
const [termination, resolver] = createPromiseWithResolver();
|
|
811
|
-
const terminate = async () => {
|
|
1058
|
+
const terminate = /* @__PURE__ */ __name(async () => {
|
|
812
1059
|
debugThreadUtils("Terminating worker");
|
|
813
1060
|
await worker.terminate();
|
|
814
1061
|
resolver();
|
|
1062
|
+
}, "terminate");
|
|
1063
|
+
return {
|
|
1064
|
+
terminate,
|
|
1065
|
+
termination
|
|
815
1066
|
};
|
|
816
|
-
return { terminate, termination };
|
|
817
1067
|
}
|
|
1068
|
+
__name(createTerminator, "createTerminator");
|
|
818
1069
|
function setPrivateThreadProps(raw, worker, workerEvents, terminate) {
|
|
819
|
-
const workerErrors = workerEvents.filter((event) => event.type ===
|
|
1070
|
+
const workerErrors = workerEvents.filter((event) => event.type === WorkerEventType.internalError).map((errorEvent) => errorEvent.error);
|
|
820
1071
|
return Object.assign(raw, {
|
|
821
1072
|
[$errors]: workerErrors,
|
|
822
1073
|
[$events]: workerEvents,
|
|
@@ -824,14 +1075,11 @@ function setPrivateThreadProps(raw, worker, workerEvents, terminate) {
|
|
|
824
1075
|
[$worker]: worker
|
|
825
1076
|
});
|
|
826
1077
|
}
|
|
1078
|
+
__name(setPrivateThreadProps, "setPrivateThreadProps");
|
|
827
1079
|
async function spawn(worker, options) {
|
|
828
1080
|
debugSpawn("Initializing new thread");
|
|
829
1081
|
const timeout = options && options.timeout ? options.timeout : initMessageTimeout;
|
|
830
|
-
const initMessage = await withTimeout(
|
|
831
|
-
receiveInitMessage(worker),
|
|
832
|
-
timeout,
|
|
833
|
-
`Timeout: Did not receive an init message from worker after ${timeout}ms. Make sure the worker calls expose().`
|
|
834
|
-
);
|
|
1082
|
+
const initMessage = await withTimeout(receiveInitMessage(worker), timeout, `Timeout: Did not receive an init message from worker after ${timeout}ms. Make sure the worker calls expose().`);
|
|
835
1083
|
const exposed = initMessage.exposed;
|
|
836
1084
|
const { termination, terminate } = createTerminator(worker);
|
|
837
1085
|
const events = createEventObservable(worker, termination);
|
|
@@ -846,6 +1094,7 @@ async function spawn(worker, options) {
|
|
|
846
1094
|
throw new Error(`Worker init message states unexpected type of expose(): ${type}`);
|
|
847
1095
|
}
|
|
848
1096
|
}
|
|
1097
|
+
__name(spawn, "spawn");
|
|
849
1098
|
|
|
850
1099
|
// src/master/index-node.ts
|
|
851
1100
|
var BlobWorker = getWorkerImplementation().blob;
|