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