@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,17 +1,170 @@
|
|
|
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 Worker = function() {
|
|
54
|
+
function Worker2(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, Worker2);
|
|
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(Worker2, "Worker");
|
|
123
|
+
_createClass(Worker2, [
|
|
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 Worker2;
|
|
160
|
+
}();
|
|
161
|
+
module.exports = Worker;
|
|
162
|
+
}
|
|
163
|
+
});
|
|
7
164
|
|
|
8
165
|
// src/master/pool-node.ts
|
|
9
166
|
import DebugLogger from "debug";
|
|
10
|
-
import {
|
|
11
|
-
multicast,
|
|
12
|
-
Observable,
|
|
13
|
-
Subject
|
|
14
|
-
} from "observable-fns";
|
|
167
|
+
import { multicast, Observable, Subject } from "observable-fns";
|
|
15
168
|
|
|
16
169
|
// src/master/implementation.node.ts
|
|
17
170
|
import { EventEmitter } from "events";
|
|
@@ -21,15 +174,19 @@ import { cwd } from "process";
|
|
|
21
174
|
import { Worker as NativeWorker } from "worker_threads";
|
|
22
175
|
var defaultPoolSize = cpus().length;
|
|
23
176
|
function resolveScriptPath(scriptPath, baseURL) {
|
|
24
|
-
const makeAbsolute = (filePath) => {
|
|
177
|
+
const makeAbsolute = /* @__PURE__ */ __name((filePath) => {
|
|
25
178
|
return path.isAbsolute(filePath) ? filePath : path.join(baseURL ?? cwd(), filePath);
|
|
26
|
-
};
|
|
179
|
+
}, "makeAbsolute");
|
|
27
180
|
const absolutePath = makeAbsolute(scriptPath);
|
|
28
181
|
return absolutePath;
|
|
29
182
|
}
|
|
183
|
+
__name(resolveScriptPath, "resolveScriptPath");
|
|
30
184
|
function initWorkerThreadsWorker() {
|
|
31
185
|
let allWorkers = [];
|
|
32
|
-
class Worker extends NativeWorker {
|
|
186
|
+
let Worker = class Worker extends NativeWorker {
|
|
187
|
+
static {
|
|
188
|
+
__name(this, "Worker");
|
|
189
|
+
}
|
|
33
190
|
mappedEventListeners;
|
|
34
191
|
constructor(scriptPath, options) {
|
|
35
192
|
const resolvedScriptPath = options && options.fromSource ? null : resolveScriptPath(scriptPath, (options ?? {})._baseURL);
|
|
@@ -37,15 +194,20 @@ function initWorkerThreadsWorker() {
|
|
|
37
194
|
super(resolvedScriptPath, options);
|
|
38
195
|
} else {
|
|
39
196
|
const sourceCode = scriptPath;
|
|
40
|
-
super(sourceCode, {
|
|
197
|
+
super(sourceCode, {
|
|
198
|
+
...options,
|
|
199
|
+
eval: true
|
|
200
|
+
});
|
|
41
201
|
}
|
|
42
202
|
this.mappedEventListeners = /* @__PURE__ */ new WeakMap();
|
|
43
203
|
allWorkers.push(this);
|
|
44
204
|
}
|
|
45
205
|
addEventListener(eventName, rawListener) {
|
|
46
|
-
const listener = (message) => {
|
|
47
|
-
rawListener({
|
|
48
|
-
|
|
206
|
+
const listener = /* @__PURE__ */ __name((message) => {
|
|
207
|
+
rawListener({
|
|
208
|
+
data: message
|
|
209
|
+
});
|
|
210
|
+
}, "listener");
|
|
49
211
|
this.mappedEventListeners.set(rawListener, listener);
|
|
50
212
|
this.on(eventName, listener);
|
|
51
213
|
}
|
|
@@ -53,41 +215,55 @@ function initWorkerThreadsWorker() {
|
|
|
53
215
|
const listener = this.mappedEventListeners.get(rawListener) || rawListener;
|
|
54
216
|
this.off(eventName, listener);
|
|
55
217
|
}
|
|
56
|
-
}
|
|
57
|
-
const terminateWorkersAndMaster = () => {
|
|
58
|
-
Promise.all(allWorkers.map((worker) => worker.terminate())).then(
|
|
59
|
-
() => process.exit(0),
|
|
60
|
-
() => process.exit(1)
|
|
61
|
-
);
|
|
62
|
-
allWorkers = [];
|
|
63
218
|
};
|
|
219
|
+
const terminateWorkersAndMaster = /* @__PURE__ */ __name(() => {
|
|
220
|
+
Promise.all(allWorkers.map((worker) => worker.terminate())).then(() => process.exit(0), () => process.exit(1));
|
|
221
|
+
allWorkers = [];
|
|
222
|
+
}, "terminateWorkersAndMaster");
|
|
64
223
|
process.on("SIGINT", () => terminateWorkersAndMaster());
|
|
65
224
|
process.on("SIGTERM", () => terminateWorkersAndMaster());
|
|
66
|
-
class BlobWorker extends Worker {
|
|
225
|
+
let BlobWorker = class BlobWorker extends Worker {
|
|
226
|
+
static {
|
|
227
|
+
__name(this, "BlobWorker");
|
|
228
|
+
}
|
|
67
229
|
constructor(blob, options) {
|
|
68
|
-
super(Buffer.from(blob).toString("utf-8"), {
|
|
230
|
+
super(Buffer.from(blob).toString("utf-8"), {
|
|
231
|
+
...options,
|
|
232
|
+
fromSource: true
|
|
233
|
+
});
|
|
69
234
|
}
|
|
70
235
|
static fromText(source, options) {
|
|
71
|
-
return new Worker(source, {
|
|
236
|
+
return new Worker(source, {
|
|
237
|
+
...options,
|
|
238
|
+
fromSource: true
|
|
239
|
+
});
|
|
72
240
|
}
|
|
73
|
-
}
|
|
241
|
+
};
|
|
74
242
|
return {
|
|
75
243
|
blob: BlobWorker,
|
|
76
244
|
default: Worker
|
|
77
245
|
};
|
|
78
246
|
}
|
|
247
|
+
__name(initWorkerThreadsWorker, "initWorkerThreadsWorker");
|
|
79
248
|
function initTinyWorker() {
|
|
80
|
-
const TinyWorker =
|
|
249
|
+
const TinyWorker = require_lib();
|
|
81
250
|
let allWorkers = [];
|
|
82
|
-
class Worker extends TinyWorker {
|
|
251
|
+
let Worker = class Worker extends TinyWorker {
|
|
252
|
+
static {
|
|
253
|
+
__name(this, "Worker");
|
|
254
|
+
}
|
|
83
255
|
emitter;
|
|
84
256
|
constructor(scriptPath, options) {
|
|
85
257
|
const resolvedScriptPath = options && options.fromSource ? null : process.platform === "win32" ? `file:///${resolveScriptPath(scriptPath).replaceAll("\\", "/")}` : resolveScriptPath(scriptPath);
|
|
86
258
|
if (resolvedScriptPath) {
|
|
87
|
-
super(resolvedScriptPath, [], {
|
|
259
|
+
super(resolvedScriptPath, [], {
|
|
260
|
+
esm: true
|
|
261
|
+
});
|
|
88
262
|
} else {
|
|
89
263
|
const sourceCode = scriptPath;
|
|
90
|
-
super(new Function(sourceCode), [], {
|
|
264
|
+
super(new Function(sourceCode), [], {
|
|
265
|
+
esm: true
|
|
266
|
+
});
|
|
91
267
|
}
|
|
92
268
|
allWorkers.push(this);
|
|
93
269
|
this.emitter = new EventEmitter();
|
|
@@ -104,29 +280,36 @@ function initTinyWorker() {
|
|
|
104
280
|
allWorkers = allWorkers.filter((worker) => worker !== this);
|
|
105
281
|
return super.terminate();
|
|
106
282
|
}
|
|
107
|
-
}
|
|
108
|
-
const terminateWorkersAndMaster = () => {
|
|
109
|
-
Promise.all(allWorkers.map((worker) => worker.terminate())).then(
|
|
110
|
-
() => process.exit(0),
|
|
111
|
-
() => process.exit(1)
|
|
112
|
-
);
|
|
113
|
-
allWorkers = [];
|
|
114
283
|
};
|
|
284
|
+
const terminateWorkersAndMaster = /* @__PURE__ */ __name(() => {
|
|
285
|
+
Promise.all(allWorkers.map((worker) => worker.terminate())).then(() => process.exit(0), () => process.exit(1));
|
|
286
|
+
allWorkers = [];
|
|
287
|
+
}, "terminateWorkersAndMaster");
|
|
115
288
|
process.on("SIGINT", () => terminateWorkersAndMaster());
|
|
116
289
|
process.on("SIGTERM", () => terminateWorkersAndMaster());
|
|
117
|
-
class BlobWorker extends Worker {
|
|
290
|
+
let BlobWorker = class BlobWorker extends Worker {
|
|
291
|
+
static {
|
|
292
|
+
__name(this, "BlobWorker");
|
|
293
|
+
}
|
|
118
294
|
constructor(blob, options) {
|
|
119
|
-
super(Buffer.from(blob).toString("utf-8"), {
|
|
295
|
+
super(Buffer.from(blob).toString("utf-8"), {
|
|
296
|
+
...options,
|
|
297
|
+
fromSource: true
|
|
298
|
+
});
|
|
120
299
|
}
|
|
121
300
|
static fromText(source, options) {
|
|
122
|
-
return new Worker(source, {
|
|
301
|
+
return new Worker(source, {
|
|
302
|
+
...options,
|
|
303
|
+
fromSource: true
|
|
304
|
+
});
|
|
123
305
|
}
|
|
124
|
-
}
|
|
306
|
+
};
|
|
125
307
|
return {
|
|
126
308
|
blob: BlobWorker,
|
|
127
309
|
default: Worker
|
|
128
310
|
};
|
|
129
311
|
}
|
|
312
|
+
__name(initTinyWorker, "initTinyWorker");
|
|
130
313
|
var implementation;
|
|
131
314
|
var isTinyWorker;
|
|
132
315
|
function selectWorkerImplementation() {
|
|
@@ -140,12 +323,14 @@ function selectWorkerImplementation() {
|
|
|
140
323
|
return initTinyWorker();
|
|
141
324
|
}
|
|
142
325
|
}
|
|
326
|
+
__name(selectWorkerImplementation, "selectWorkerImplementation");
|
|
143
327
|
function getWorkerImplementation() {
|
|
144
328
|
if (!implementation) {
|
|
145
329
|
implementation = selectWorkerImplementation();
|
|
146
330
|
}
|
|
147
331
|
return implementation;
|
|
148
332
|
}
|
|
333
|
+
__name(getWorkerImplementation, "getWorkerImplementation");
|
|
149
334
|
function isWorkerRuntime() {
|
|
150
335
|
if (isTinyWorker) {
|
|
151
336
|
return globalThis !== void 0 && self["postMessage"] ? true : false;
|
|
@@ -154,9 +339,10 @@ function isWorkerRuntime() {
|
|
|
154
339
|
return !isMainThread;
|
|
155
340
|
}
|
|
156
341
|
}
|
|
342
|
+
__name(isWorkerRuntime, "isWorkerRuntime");
|
|
157
343
|
|
|
158
344
|
// src/master/pool-types.ts
|
|
159
|
-
var PoolEventType = /* @__PURE__ */ (
|
|
345
|
+
var PoolEventType = /* @__PURE__ */ function(PoolEventType2) {
|
|
160
346
|
PoolEventType2["initialized"] = "initialized";
|
|
161
347
|
PoolEventType2["taskCanceled"] = "taskCanceled";
|
|
162
348
|
PoolEventType2["taskCompleted"] = "taskCompleted";
|
|
@@ -166,7 +352,7 @@ var PoolEventType = /* @__PURE__ */ ((PoolEventType2) => {
|
|
|
166
352
|
PoolEventType2["taskStart"] = "taskStart";
|
|
167
353
|
PoolEventType2["terminated"] = "terminated";
|
|
168
354
|
return PoolEventType2;
|
|
169
|
-
}
|
|
355
|
+
}({});
|
|
170
356
|
|
|
171
357
|
// src/symbols.ts
|
|
172
358
|
var $errors = Symbol("thread.errors");
|
|
@@ -179,6 +365,7 @@ var $worker = Symbol("thread.worker");
|
|
|
179
365
|
function fail(message) {
|
|
180
366
|
throw new Error(message);
|
|
181
367
|
}
|
|
368
|
+
__name(fail, "fail");
|
|
182
369
|
var Thread = {
|
|
183
370
|
/** Return an observable that can be used to subscribe to all errors happening in the thread. */
|
|
184
371
|
errors(thread) {
|
|
@@ -203,24 +390,33 @@ function createArray(size) {
|
|
|
203
390
|
}
|
|
204
391
|
return array;
|
|
205
392
|
}
|
|
393
|
+
__name(createArray, "createArray");
|
|
206
394
|
function delay(ms) {
|
|
207
395
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
208
396
|
}
|
|
397
|
+
__name(delay, "delay");
|
|
209
398
|
function flatMap(array, mapper) {
|
|
210
|
-
return array.reduce((flattened, element) => [
|
|
399
|
+
return array.reduce((flattened, element) => [
|
|
400
|
+
...flattened,
|
|
401
|
+
...mapper(element)
|
|
402
|
+
], []);
|
|
211
403
|
}
|
|
404
|
+
__name(flatMap, "flatMap");
|
|
212
405
|
function slugify(text) {
|
|
213
406
|
return text.replaceAll(/\W/g, " ").trim().replaceAll(/\s+/g, "-");
|
|
214
407
|
}
|
|
408
|
+
__name(slugify, "slugify");
|
|
215
409
|
function spawnWorkers(spawnWorker, count) {
|
|
216
|
-
return createArray(count).map(
|
|
217
|
-
()
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
})
|
|
221
|
-
);
|
|
410
|
+
return createArray(count).map(() => ({
|
|
411
|
+
init: spawnWorker(),
|
|
412
|
+
runningTasks: []
|
|
413
|
+
}));
|
|
222
414
|
}
|
|
223
|
-
|
|
415
|
+
__name(spawnWorkers, "spawnWorkers");
|
|
416
|
+
var WorkerPool = class WorkerPool2 {
|
|
417
|
+
static {
|
|
418
|
+
__name(this, "WorkerPool");
|
|
419
|
+
}
|
|
224
420
|
static EventType = PoolEventType;
|
|
225
421
|
debug;
|
|
226
422
|
eventObservable;
|
|
@@ -232,23 +428,22 @@ var WorkerPool = class {
|
|
|
232
428
|
nextTaskID = 1;
|
|
233
429
|
taskQueue = [];
|
|
234
430
|
constructor(spawnWorker, optionsOrSize) {
|
|
235
|
-
const options = typeof optionsOrSize === "number" ? {
|
|
431
|
+
const options = typeof optionsOrSize === "number" ? {
|
|
432
|
+
size: optionsOrSize
|
|
433
|
+
} : optionsOrSize || {};
|
|
236
434
|
const { size = defaultPoolSize } = options;
|
|
237
435
|
this.debug = DebugLogger(`threads:pool:${slugify(options.name || String(nextPoolID++))}`);
|
|
238
436
|
this.options = options;
|
|
239
437
|
this.workers = spawnWorkers(spawnWorker, size);
|
|
240
438
|
this.eventObservable = multicast(Observable.from(this.eventSubject));
|
|
241
|
-
Promise.all(this.workers.map((worker) => worker.init)).then(
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
(error)
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
this.initErrors.push(error);
|
|
250
|
-
}
|
|
251
|
-
);
|
|
439
|
+
Promise.all(this.workers.map((worker) => worker.init)).then(() => this.eventSubject.next({
|
|
440
|
+
size: this.workers.length,
|
|
441
|
+
type: PoolEventType.initialized
|
|
442
|
+
}), (error) => {
|
|
443
|
+
this.debug("Error while initializing pool worker:", error);
|
|
444
|
+
this.eventSubject.error(error);
|
|
445
|
+
this.initErrors.push(error);
|
|
446
|
+
});
|
|
252
447
|
}
|
|
253
448
|
findIdlingWorker() {
|
|
254
449
|
const { concurrency = 1 } = this.options;
|
|
@@ -259,7 +454,7 @@ var WorkerPool = class {
|
|
|
259
454
|
this.debug(`Running task #${task.id} on worker #${workerID}...`);
|
|
260
455
|
this.eventSubject.next({
|
|
261
456
|
taskID: task.id,
|
|
262
|
-
type:
|
|
457
|
+
type: PoolEventType.taskStart,
|
|
263
458
|
workerID
|
|
264
459
|
});
|
|
265
460
|
try {
|
|
@@ -268,7 +463,7 @@ var WorkerPool = class {
|
|
|
268
463
|
this.eventSubject.next({
|
|
269
464
|
returnValue,
|
|
270
465
|
taskID: task.id,
|
|
271
|
-
type:
|
|
466
|
+
type: PoolEventType.taskCompleted,
|
|
272
467
|
workerID
|
|
273
468
|
});
|
|
274
469
|
} catch (ex) {
|
|
@@ -277,16 +472,16 @@ var WorkerPool = class {
|
|
|
277
472
|
this.eventSubject.next({
|
|
278
473
|
error,
|
|
279
474
|
taskID: task.id,
|
|
280
|
-
type:
|
|
475
|
+
type: PoolEventType.taskFailed,
|
|
281
476
|
workerID
|
|
282
477
|
});
|
|
283
478
|
}
|
|
284
479
|
}
|
|
285
480
|
run(worker, task) {
|
|
286
481
|
const runPromise = (async () => {
|
|
287
|
-
const removeTaskFromWorkersRunningTasks = () => {
|
|
482
|
+
const removeTaskFromWorkersRunningTasks = /* @__PURE__ */ __name(() => {
|
|
288
483
|
worker.runningTasks = worker.runningTasks.filter((someRunPromise) => someRunPromise !== runPromise);
|
|
289
|
-
};
|
|
484
|
+
}, "removeTaskFromWorkersRunningTasks");
|
|
290
485
|
await delay(0);
|
|
291
486
|
try {
|
|
292
487
|
await this.runPoolTask(worker, task);
|
|
@@ -306,7 +501,9 @@ var WorkerPool = class {
|
|
|
306
501
|
const nextTask = this.taskQueue.shift();
|
|
307
502
|
if (!nextTask) {
|
|
308
503
|
this.debug("Task queue is empty");
|
|
309
|
-
this.eventSubject.next({
|
|
504
|
+
this.eventSubject.next({
|
|
505
|
+
type: PoolEventType.taskQueueDrained
|
|
506
|
+
});
|
|
310
507
|
return;
|
|
311
508
|
}
|
|
312
509
|
this.run(availableWorker, nextTask);
|
|
@@ -314,13 +511,13 @@ var WorkerPool = class {
|
|
|
314
511
|
taskCompletion(taskID) {
|
|
315
512
|
return new Promise((resolve, reject) => {
|
|
316
513
|
const eventSubscription = this.events().subscribe((event) => {
|
|
317
|
-
if (event.type ===
|
|
514
|
+
if (event.type === PoolEventType.taskCompleted && event.taskID === taskID) {
|
|
318
515
|
eventSubscription.unsubscribe();
|
|
319
516
|
resolve(event.returnValue);
|
|
320
|
-
} else if (event.type ===
|
|
517
|
+
} else if (event.type === PoolEventType.taskFailed && event.taskID === taskID) {
|
|
321
518
|
eventSubscription.unsubscribe();
|
|
322
519
|
reject(event.error);
|
|
323
|
-
} else if (event.type ===
|
|
520
|
+
} else if (event.type === PoolEventType.terminated) {
|
|
324
521
|
eventSubscription.unsubscribe();
|
|
325
522
|
reject(new Error("Pool has been terminated before task was run."));
|
|
326
523
|
}
|
|
@@ -328,10 +525,10 @@ var WorkerPool = class {
|
|
|
328
525
|
});
|
|
329
526
|
}
|
|
330
527
|
async settled(allowResolvingImmediately = false) {
|
|
331
|
-
const getCurrentlyRunningTasks = () => flatMap(this.workers, (worker) => worker.runningTasks);
|
|
528
|
+
const getCurrentlyRunningTasks = /* @__PURE__ */ __name(() => flatMap(this.workers, (worker) => worker.runningTasks), "getCurrentlyRunningTasks");
|
|
332
529
|
const taskFailures = [];
|
|
333
530
|
const failureSubscription = this.eventObservable.subscribe((event) => {
|
|
334
|
-
if (event.type ===
|
|
531
|
+
if (event.type === PoolEventType.taskFailed) {
|
|
335
532
|
taskFailures.push(event.error);
|
|
336
533
|
}
|
|
337
534
|
});
|
|
@@ -346,12 +543,11 @@ var WorkerPool = class {
|
|
|
346
543
|
const subscription = this.eventObservable.subscribe({
|
|
347
544
|
error: reject,
|
|
348
545
|
next(event) {
|
|
349
|
-
if (event.type ===
|
|
546
|
+
if (event.type === PoolEventType.taskQueueDrained) {
|
|
350
547
|
subscription.unsubscribe();
|
|
351
548
|
resolve(void 0);
|
|
352
549
|
}
|
|
353
550
|
}
|
|
354
|
-
// make a pool-wide error reject the completed() result promise
|
|
355
551
|
});
|
|
356
552
|
});
|
|
357
553
|
await Promise.allSettled(getCurrentlyRunningTasks());
|
|
@@ -364,18 +560,20 @@ var WorkerPool = class {
|
|
|
364
560
|
const subscription = this.eventObservable.subscribe({
|
|
365
561
|
error: reject,
|
|
366
562
|
next(event) {
|
|
367
|
-
if (event.type ===
|
|
563
|
+
if (event.type === PoolEventType.taskQueueDrained) {
|
|
368
564
|
subscription.unsubscribe();
|
|
369
565
|
resolve(settlementPromise);
|
|
370
|
-
} else if (event.type ===
|
|
566
|
+
} else if (event.type === PoolEventType.taskFailed) {
|
|
371
567
|
subscription.unsubscribe();
|
|
372
568
|
reject(event.error);
|
|
373
569
|
}
|
|
374
570
|
}
|
|
375
|
-
// make a pool-wide error reject the completed() result promise
|
|
376
571
|
});
|
|
377
572
|
});
|
|
378
|
-
const errors = await Promise.race([
|
|
573
|
+
const errors = await Promise.race([
|
|
574
|
+
settlementPromise,
|
|
575
|
+
earlyExitPromise
|
|
576
|
+
]);
|
|
379
577
|
if (errors.length > 0) {
|
|
380
578
|
throw errors[0];
|
|
381
579
|
}
|
|
@@ -397,28 +595,26 @@ var WorkerPool = class {
|
|
|
397
595
|
this.debug(`Task #${taskID} errored:`, error);
|
|
398
596
|
});
|
|
399
597
|
const task = {
|
|
400
|
-
cancel: () => {
|
|
598
|
+
cancel: /* @__PURE__ */ __name(() => {
|
|
401
599
|
if (!this.taskQueue.includes(task)) return;
|
|
402
600
|
this.taskQueue = this.taskQueue.filter((someTask) => someTask !== task);
|
|
403
601
|
this.eventSubject.next({
|
|
404
602
|
taskID: task.id,
|
|
405
|
-
type:
|
|
603
|
+
type: PoolEventType.taskCanceled
|
|
406
604
|
});
|
|
407
|
-
},
|
|
605
|
+
}, "cancel"),
|
|
408
606
|
id: taskID,
|
|
409
607
|
run: taskFunction,
|
|
410
608
|
then: taskCompletion.then.bind(taskCompletion)
|
|
411
609
|
};
|
|
412
610
|
if (this.taskQueue.length >= maxQueuedJobs) {
|
|
413
|
-
throw new Error(
|
|
414
|
-
"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."
|
|
415
|
-
);
|
|
611
|
+
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.");
|
|
416
612
|
}
|
|
417
613
|
this.debug(`Queueing task #${task.id}...`);
|
|
418
614
|
this.taskQueue.push(task);
|
|
419
615
|
this.eventSubject.next({
|
|
420
616
|
taskID: task.id,
|
|
421
|
-
type:
|
|
617
|
+
type: PoolEventType.taskQueued
|
|
422
618
|
});
|
|
423
619
|
this.scheduleWork();
|
|
424
620
|
return task;
|
|
@@ -429,8 +625,10 @@ var WorkerPool = class {
|
|
|
429
625
|
await this.completed(true);
|
|
430
626
|
}
|
|
431
627
|
this.eventSubject.next({
|
|
432
|
-
remainingQueue: [
|
|
433
|
-
|
|
628
|
+
remainingQueue: [
|
|
629
|
+
...this.taskQueue
|
|
630
|
+
],
|
|
631
|
+
type: PoolEventType.terminated
|
|
434
632
|
});
|
|
435
633
|
this.eventSubject.complete();
|
|
436
634
|
await Promise.all(this.workers.map(async (worker) => Thread.terminate(await worker.init)));
|
|
@@ -439,6 +637,7 @@ var WorkerPool = class {
|
|
|
439
637
|
function PoolConstructor(spawnWorker, optionsOrSize) {
|
|
440
638
|
return new WorkerPool(spawnWorker, optionsOrSize);
|
|
441
639
|
}
|
|
640
|
+
__name(PoolConstructor, "PoolConstructor");
|
|
442
641
|
PoolConstructor.EventType = PoolEventType;
|
|
443
642
|
var Pool = PoolConstructor;
|
|
444
643
|
export {
|