nestworker 2.0.8 → 2.1.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/README.md +388 -117
- package/dist/core/worker.interfaces.d.ts +89 -10
- package/dist/core/worker.module.d.ts +21 -11
- package/dist/core/worker.module.js +38 -10
- package/dist/core/worker.module.js.map +1 -1
- package/dist/core/worker.pool.d.ts +26 -6
- package/dist/core/worker.pool.js +288 -103
- package/dist/core/worker.pool.js.map +1 -1
- package/dist/core/worker.service.d.ts +28 -74
- package/dist/core/worker.service.js +132 -79
- package/dist/core/worker.service.js.map +1 -1
- package/dist/decorators/worker-task.decorator.d.ts +7 -25
- package/dist/decorators/worker-task.decorator.js +5 -26
- package/dist/decorators/worker-task.decorator.js.map +1 -1
- package/dist/discovery/discovery.service.d.ts +2 -9
- package/dist/discovery/discovery.service.js +86 -21
- package/dist/discovery/discovery.service.js.map +1 -1
- package/dist/example/bench.d.ts +13 -0
- package/dist/example/bench.js +85 -0
- package/dist/example/bench.js.map +1 -0
- package/dist/example/main.js +14 -2
- package/dist/example/main.js.map +1 -1
- package/dist/health/worker.health.d.ts +46 -0
- package/dist/health/worker.health.js +77 -0
- package/dist/health/worker.health.js.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/metrics/worker.metrics.d.ts +65 -0
- package/dist/metrics/worker.metrics.js +122 -0
- package/dist/metrics/worker.metrics.js.map +1 -0
- package/dist/worker/worker-runtime.js +139 -29
- package/dist/worker/worker-runtime.js.map +1 -1
- package/package.json +2 -1
package/dist/core/worker.pool.js
CHANGED
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.WorkerPool = void 0;
|
|
7
7
|
const node_worker_threads_1 = require("node:worker_threads");
|
|
8
|
+
const node_events_1 = require("node:events");
|
|
8
9
|
const node_os_1 = __importDefault(require("node:os"));
|
|
9
10
|
const node_path_1 = __importDefault(require("node:path"));
|
|
10
11
|
const PRIORITY_WEIGHT = {
|
|
@@ -12,89 +13,141 @@ const PRIORITY_WEIGHT = {
|
|
|
12
13
|
NORMAL: 2,
|
|
13
14
|
LOW: 1,
|
|
14
15
|
};
|
|
15
|
-
class WorkerPool {
|
|
16
|
+
class WorkerPool extends node_events_1.EventEmitter {
|
|
16
17
|
services;
|
|
17
18
|
size;
|
|
19
|
+
shutdownTimeout;
|
|
18
20
|
workers = [];
|
|
19
21
|
idle = [];
|
|
22
|
+
warmingUp = new Set();
|
|
20
23
|
queue = [];
|
|
21
24
|
destroyed = false;
|
|
22
25
|
active = new Map();
|
|
23
|
-
|
|
26
|
+
/** Maps abortSignalId → worker currently running that job */
|
|
27
|
+
signalWorkerMap = new Map();
|
|
28
|
+
proxyMap = new Map();
|
|
29
|
+
constructor(services, proxyInstances, size = node_os_1.default.cpus().length, shutdownTimeout = 30_000) {
|
|
30
|
+
super();
|
|
24
31
|
this.services = services;
|
|
25
32
|
this.size = size;
|
|
33
|
+
this.shutdownTimeout = shutdownTimeout;
|
|
34
|
+
for (const { propertyKey, instance } of proxyInstances) {
|
|
35
|
+
this.proxyMap.set(propertyKey, instance);
|
|
36
|
+
}
|
|
26
37
|
for (let i = 0; i < this.size; i++) {
|
|
27
|
-
|
|
28
|
-
this.workers.push(worker);
|
|
29
|
-
this.idle.push(worker);
|
|
38
|
+
this.spawnWorker();
|
|
30
39
|
}
|
|
31
40
|
}
|
|
32
|
-
execute(job) {
|
|
33
|
-
if (this.destroyed)
|
|
41
|
+
execute(job, signal) {
|
|
42
|
+
if (this.destroyed)
|
|
34
43
|
return Promise.reject(new Error('WorkerPool destroyed'));
|
|
35
|
-
|
|
36
|
-
|
|
44
|
+
return new Promise((resolve, reject) => {
|
|
45
|
+
// Reject immediately if already aborted
|
|
46
|
+
if (signal?.aborted) {
|
|
47
|
+
reject(new DOMException('Task aborted before enqueue', 'AbortError'));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
37
50
|
const task = {
|
|
38
51
|
job,
|
|
39
52
|
resolve: resolve,
|
|
40
53
|
reject,
|
|
54
|
+
attempts: 0,
|
|
55
|
+
signal,
|
|
41
56
|
};
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
57
|
+
if (signal) {
|
|
58
|
+
signal.addEventListener('abort', () => {
|
|
59
|
+
// Remove from queue if not yet dispatched
|
|
60
|
+
const idx = this.queue.indexOf(task);
|
|
61
|
+
if (idx >= 0) {
|
|
62
|
+
this.queue.splice(idx, 1);
|
|
63
|
+
reject(new DOMException('Task aborted', 'AbortError'));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// Already running — send abort signal to worker
|
|
67
|
+
if (job.abortSignalId) {
|
|
68
|
+
const worker = this.signalWorkerMap.get(job.abortSignalId);
|
|
69
|
+
if (worker) {
|
|
70
|
+
try {
|
|
71
|
+
worker.postMessage({ type: 'abort', abortSignalId: job.abortSignalId });
|
|
72
|
+
}
|
|
73
|
+
catch { /* worker gone */
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}, { once: true });
|
|
78
|
+
}
|
|
45
79
|
this.enqueue(task);
|
|
46
|
-
// process queue
|
|
47
80
|
this.schedule();
|
|
48
81
|
});
|
|
49
82
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
83
|
+
stats() {
|
|
84
|
+
return {
|
|
85
|
+
poolSize: this.size,
|
|
86
|
+
idle: this.idle.length,
|
|
87
|
+
busy: this.active.size,
|
|
88
|
+
queued: this.queue.length,
|
|
89
|
+
warmingUp: this.warmingUp.size,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
spawnWorker() {
|
|
93
|
+
const worker = new node_worker_threads_1.Worker(node_path_1.default.resolve(__dirname, '../worker/worker-runtime.js'), { workerData: { services: this.services } });
|
|
94
|
+
this.workers.push(worker);
|
|
95
|
+
this.warmingUp.add(worker);
|
|
96
|
+
// ── Single persistent message listener ───────────────────────────────
|
|
97
|
+
// We used to add/remove a listener per dispatch — that allocated several
|
|
98
|
+
// closures and mutated the EventEmitter's listener array on every task.
|
|
99
|
+
// Instead we install one listener whose behaviour switches based on
|
|
100
|
+
// whether this worker is currently warming up or running a task.
|
|
101
|
+
const onMessage = (msg) => {
|
|
102
|
+
const message = msg;
|
|
103
|
+
if (this.warmingUp.has(worker)) {
|
|
104
|
+
if (message?.type !== 'worker:ready')
|
|
105
|
+
return;
|
|
106
|
+
this.warmingUp.delete(worker);
|
|
107
|
+
if (!this.destroyed) {
|
|
108
|
+
this.idle.push(worker);
|
|
109
|
+
this.schedule();
|
|
65
110
|
}
|
|
66
|
-
|
|
67
|
-
const replacement = this.spawnWorker();
|
|
68
|
-
this.workers.push(replacement);
|
|
69
|
-
// dispatch HIGH immediately
|
|
70
|
-
this.dispatch(replacement, incoming);
|
|
71
|
-
return true;
|
|
111
|
+
return;
|
|
72
112
|
}
|
|
73
|
-
|
|
74
|
-
|
|
113
|
+
// Spurious `worker:ready` after warmup → ignore.
|
|
114
|
+
if (message?.type === 'worker:ready')
|
|
115
|
+
return;
|
|
116
|
+
const running = this.active.get(worker);
|
|
117
|
+
if (!running)
|
|
118
|
+
return; // late message for an aborted/timed-out task
|
|
119
|
+
running.handler(message);
|
|
120
|
+
};
|
|
121
|
+
worker.on('message', onMessage);
|
|
122
|
+
worker.once('error', (err) => this.handleWorkerError(worker, err));
|
|
123
|
+
worker.once('exit', (code) => this.handleWorkerExit(worker, code));
|
|
124
|
+
return worker;
|
|
75
125
|
}
|
|
76
126
|
enqueue(task) {
|
|
77
127
|
const weight = PRIORITY_WEIGHT[task.job.priority];
|
|
78
|
-
|
|
79
|
-
|
|
128
|
+
const q = this.queue;
|
|
129
|
+
const n = q.length;
|
|
130
|
+
// Fast path: empty queue, or tail has >= priority → just push (O(1)).
|
|
131
|
+
// This is by far the most common case under steady-state load.
|
|
132
|
+
if (n === 0 || PRIORITY_WEIGHT[q[n - 1].job.priority] >= weight) {
|
|
133
|
+
q.push(task);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
let lo = 0, hi = n;
|
|
80
137
|
while (lo < hi) {
|
|
81
138
|
const mid = (lo + hi) >>> 1;
|
|
82
|
-
if (PRIORITY_WEIGHT[
|
|
139
|
+
if (PRIORITY_WEIGHT[q[mid].job.priority] < weight)
|
|
83
140
|
hi = mid;
|
|
84
|
-
|
|
85
|
-
else {
|
|
141
|
+
else
|
|
86
142
|
lo = mid + 1;
|
|
87
|
-
}
|
|
88
143
|
}
|
|
89
|
-
|
|
144
|
+
q.splice(lo, 0, task);
|
|
90
145
|
}
|
|
91
146
|
schedule() {
|
|
92
147
|
if (this.destroyed)
|
|
93
148
|
return;
|
|
94
|
-
while (this.idle.length > 0 &&
|
|
95
|
-
this.queue.length > 0) {
|
|
149
|
+
while (this.idle.length > 0 && this.queue.length > 0) {
|
|
96
150
|
const worker = this.idle.pop();
|
|
97
|
-
// highest priority task first
|
|
98
151
|
const task = this.queue.shift();
|
|
99
152
|
this.dispatch(worker, task);
|
|
100
153
|
}
|
|
@@ -102,109 +155,241 @@ class WorkerPool {
|
|
|
102
155
|
dispatch(worker, task) {
|
|
103
156
|
let settled = false;
|
|
104
157
|
let timeoutHandle;
|
|
158
|
+
const startedAt = Date.now();
|
|
159
|
+
task.attempts++;
|
|
160
|
+
task.job.attempt = task.attempts - 1;
|
|
161
|
+
if (task.job.abortSignalId) {
|
|
162
|
+
this.signalWorkerMap.set(task.job.abortSignalId, worker);
|
|
163
|
+
}
|
|
105
164
|
const cleanup = () => {
|
|
106
|
-
|
|
107
|
-
worker.removeListener('error', onError);
|
|
108
|
-
worker.removeListener('exit', onExit);
|
|
109
|
-
if (timeoutHandle) {
|
|
165
|
+
if (timeoutHandle)
|
|
110
166
|
clearTimeout(timeoutHandle);
|
|
167
|
+
if (task.job.abortSignalId) {
|
|
168
|
+
this.signalWorkerMap.delete(task.job.abortSignalId);
|
|
111
169
|
}
|
|
112
170
|
};
|
|
113
171
|
const recycle = () => {
|
|
114
172
|
cleanup();
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
173
|
+
this.active.delete(worker);
|
|
174
|
+
if (!this.destroyed) {
|
|
175
|
+
this.idle.push(worker);
|
|
176
|
+
this.schedule();
|
|
177
|
+
}
|
|
120
178
|
};
|
|
121
179
|
const settle = (fn) => {
|
|
122
180
|
if (settled)
|
|
123
181
|
return;
|
|
124
182
|
settled = true;
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
183
|
+
fn();
|
|
184
|
+
recycle();
|
|
185
|
+
};
|
|
186
|
+
const handleFailure = (serializedError) => {
|
|
187
|
+
const { retry = 0, retryDelay = 0 } = task.job;
|
|
188
|
+
this.emit('taskError', task.job, serializedError);
|
|
189
|
+
if (task.attempts < retry + 1) {
|
|
190
|
+
// Re-enqueue with delay
|
|
191
|
+
const delay = typeof retryDelay === 'number' ? retryDelay : 0;
|
|
192
|
+
const scheduleRetry = () => {
|
|
193
|
+
this.enqueue(task);
|
|
194
|
+
this.schedule();
|
|
195
|
+
};
|
|
196
|
+
if (delay > 0)
|
|
197
|
+
setTimeout(scheduleRetry, delay);
|
|
198
|
+
else
|
|
199
|
+
scheduleRetry();
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
// All attempts exhausted → dead letter
|
|
203
|
+
const dlEvent = {
|
|
204
|
+
jobId: task.job.jobId,
|
|
205
|
+
serviceName: task.job.serviceName,
|
|
206
|
+
methodName: task.job.methodName,
|
|
207
|
+
args: task.job.args,
|
|
208
|
+
attempts: task.attempts,
|
|
209
|
+
error: serializedError,
|
|
210
|
+
failedAt: new Date(),
|
|
211
|
+
};
|
|
212
|
+
this.emit('dead', dlEvent);
|
|
213
|
+
task.reject(deserializeError(serializedError));
|
|
130
214
|
};
|
|
131
|
-
const
|
|
215
|
+
const handler = (msg) => {
|
|
216
|
+
const message = msg;
|
|
217
|
+
// ── IPC invoke from worker ────────────────────────────────────────
|
|
218
|
+
if (message.type === 'ipc:invoke') {
|
|
219
|
+
const req = message;
|
|
220
|
+
const svcInstance = this.proxyMap.get(req.propertyKey);
|
|
221
|
+
const reply = (res) => {
|
|
222
|
+
try {
|
|
223
|
+
worker.postMessage(res);
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
try {
|
|
227
|
+
worker.postMessage({
|
|
228
|
+
type: 'ipc:result', callId: res.callId, ok: false,
|
|
229
|
+
error: `IPC result for "${req.propertyKey}.${req.methodName}" ` +
|
|
230
|
+
`is not structuredClone-compatible.`,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
catch { /* worker gone */
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
if (!svcInstance) {
|
|
238
|
+
reply({
|
|
239
|
+
type: 'ipc:result', callId: req.callId, ok: false,
|
|
240
|
+
error: `No proxy registered for "${req.propertyKey}"`,
|
|
241
|
+
});
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
const method = svcInstance[req.methodName];
|
|
245
|
+
if (typeof method !== 'function') {
|
|
246
|
+
reply({
|
|
247
|
+
type: 'ipc:result', callId: req.callId, ok: false,
|
|
248
|
+
error: `Method "${req.methodName}" not found on "${req.propertyKey}"`,
|
|
249
|
+
});
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
// Invoke via svcInstance[methodName](...) to preserve `this` binding.
|
|
253
|
+
// Use Promise.resolve to handle both sync and async returns without
|
|
254
|
+
// forcing an async function allocation per call.
|
|
255
|
+
let p;
|
|
256
|
+
try {
|
|
257
|
+
p = svcInstance[req.methodName](...req.args);
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
reply({
|
|
261
|
+
type: 'ipc:result', callId: req.callId, ok: false,
|
|
262
|
+
error: err.message ?? String(err),
|
|
263
|
+
});
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
Promise.resolve(p).then((data) => reply({ type: 'ipc:result', callId: req.callId, ok: true, data }), (err) => reply({
|
|
267
|
+
type: 'ipc:result', callId: req.callId, ok: false,
|
|
268
|
+
error: err.message ?? String(err),
|
|
269
|
+
}));
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
if (message.type === 'worker:ready')
|
|
273
|
+
return;
|
|
274
|
+
// ── Job result ────────────────────────────────────────────────────
|
|
275
|
+
const result = message;
|
|
276
|
+
const durationMs = Date.now() - startedAt;
|
|
132
277
|
settle(() => {
|
|
133
278
|
if (result.ok) {
|
|
279
|
+
this.emit('taskEnd', task.job, durationMs);
|
|
134
280
|
task.resolve(result.data);
|
|
135
281
|
}
|
|
136
282
|
else {
|
|
137
|
-
|
|
138
|
-
|
|
283
|
+
handleFailure(result.error ?? {
|
|
284
|
+
name: 'Error',
|
|
285
|
+
message: 'Unknown worker error',
|
|
286
|
+
});
|
|
139
287
|
}
|
|
140
288
|
});
|
|
141
289
|
};
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
await this.replaceWorker(worker);
|
|
146
|
-
});
|
|
147
|
-
};
|
|
148
|
-
const onExit = async (code) => {
|
|
149
|
-
if (this.destroyed)
|
|
150
|
-
return;
|
|
151
|
-
settle(async () => {
|
|
152
|
-
task.reject(new Error(`Worker exited unexpectedly with code ${code} ` +
|
|
153
|
-
`while running "${task.job.serviceName}.${task.job.methodName}"`));
|
|
154
|
-
await this.replaceWorker(worker);
|
|
155
|
-
});
|
|
156
|
-
};
|
|
157
|
-
worker.once('message', onMessage);
|
|
158
|
-
worker.once('error', onError);
|
|
159
|
-
worker.once('exit', onExit);
|
|
160
|
-
if (task.job.timeout &&
|
|
161
|
-
task.job.timeout > 0) {
|
|
290
|
+
this.active.set(worker, { task, priority: task.job.priority, startedAt, handler });
|
|
291
|
+
this.emit('taskStart', task.job);
|
|
292
|
+
if (task.job.timeout && task.job.timeout > 0) {
|
|
162
293
|
timeoutHandle = setTimeout(async () => {
|
|
163
294
|
if (settled)
|
|
164
295
|
return;
|
|
165
296
|
settled = true;
|
|
166
297
|
cleanup();
|
|
167
|
-
|
|
298
|
+
this.active.delete(worker);
|
|
299
|
+
const serializedError = {
|
|
300
|
+
name: 'TimeoutError',
|
|
301
|
+
message: `Task "${task.job.serviceName}.${task.job.methodName}" ` +
|
|
302
|
+
`timed out after ${task.job.timeout}ms`,
|
|
303
|
+
};
|
|
304
|
+
handleFailure(serializedError);
|
|
168
305
|
try {
|
|
169
306
|
await worker.terminate();
|
|
170
307
|
}
|
|
171
|
-
catch {
|
|
172
|
-
|
|
308
|
+
catch {
|
|
309
|
+
}
|
|
310
|
+
this.replaceWorker(worker);
|
|
173
311
|
this.schedule();
|
|
174
312
|
}, task.job.timeout);
|
|
175
313
|
}
|
|
176
314
|
worker.postMessage(task.job);
|
|
177
315
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
|
|
316
|
+
handleWorkerError(worker, err) {
|
|
317
|
+
const running = this.active.get(worker);
|
|
318
|
+
if (running) {
|
|
319
|
+
const { serviceName, methodName } = running.task.job;
|
|
320
|
+
const wrapped = new Error(`Worker crashed in "${serviceName}.${methodName}": ${err.message}`);
|
|
321
|
+
wrapped.stack = err.stack;
|
|
322
|
+
this.emit('error', wrapped, running.task.job);
|
|
323
|
+
running.task.reject(wrapped);
|
|
324
|
+
this.active.delete(worker);
|
|
325
|
+
}
|
|
326
|
+
this.replaceWorker(worker);
|
|
184
327
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
328
|
+
handleWorkerExit(worker, code) {
|
|
329
|
+
if (this.destroyed)
|
|
330
|
+
return;
|
|
331
|
+
const running = this.active.get(worker);
|
|
332
|
+
if (running) {
|
|
333
|
+
running.task.reject(new Error(`Worker exited with code ${code} while running ` +
|
|
334
|
+
`"${running.task.job.serviceName}.${running.task.job.methodName}"`));
|
|
335
|
+
this.active.delete(worker);
|
|
189
336
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
337
|
+
this.replaceWorker(worker);
|
|
338
|
+
}
|
|
339
|
+
replaceWorker(oldWorker) {
|
|
340
|
+
const remove = (arr) => {
|
|
341
|
+
const i = arr.indexOf(oldWorker);
|
|
342
|
+
if (i >= 0)
|
|
343
|
+
arr.splice(i, 1);
|
|
344
|
+
};
|
|
345
|
+
remove(this.workers);
|
|
346
|
+
remove(this.idle);
|
|
347
|
+
this.warmingUp.delete(oldWorker);
|
|
348
|
+
if (!this.destroyed) {
|
|
349
|
+
this.spawnWorker();
|
|
350
|
+
this.schedule();
|
|
193
351
|
}
|
|
194
|
-
const newWorker = this.spawnWorker();
|
|
195
|
-
this.workers.push(newWorker);
|
|
196
|
-
this.idle.push(newWorker);
|
|
197
352
|
}
|
|
198
353
|
async destroy() {
|
|
199
354
|
this.destroyed = true;
|
|
355
|
+
// Drain: wait for all active jobs to finish, up to shutdownTimeout
|
|
356
|
+
if (this.active.size > 0) {
|
|
357
|
+
await Promise.race([
|
|
358
|
+
// Wait for all active jobs to settle
|
|
359
|
+
Promise.allSettled(Array.from(this.active.values()).map(({ task }) => new Promise((res) => {
|
|
360
|
+
const orig = task.resolve;
|
|
361
|
+
const origRej = task.reject;
|
|
362
|
+
task.resolve = (v) => {
|
|
363
|
+
orig(v);
|
|
364
|
+
res();
|
|
365
|
+
};
|
|
366
|
+
task.reject = (e) => {
|
|
367
|
+
origRej(e);
|
|
368
|
+
res();
|
|
369
|
+
};
|
|
370
|
+
}))),
|
|
371
|
+
// Force after timeout
|
|
372
|
+
new Promise((res) => setTimeout(res, this.shutdownTimeout)),
|
|
373
|
+
]);
|
|
374
|
+
}
|
|
375
|
+
// Reject anything still queued
|
|
200
376
|
for (const queued of this.queue) {
|
|
201
377
|
queued.reject(new Error('WorkerPool destroyed'));
|
|
202
378
|
}
|
|
203
379
|
this.queue.length = 0;
|
|
204
|
-
await Promise.allSettled(this.workers.map((
|
|
380
|
+
await Promise.allSettled(this.workers.map((w) => w.terminate()));
|
|
205
381
|
this.workers.length = 0;
|
|
206
382
|
this.idle.length = 0;
|
|
207
383
|
}
|
|
208
384
|
}
|
|
209
385
|
exports.WorkerPool = WorkerPool;
|
|
386
|
+
function deserializeError(serialized) {
|
|
387
|
+
const err = new Error(serialized.message);
|
|
388
|
+
err.name = serialized.name;
|
|
389
|
+
if (serialized.stack)
|
|
390
|
+
err.stack = serialized.stack;
|
|
391
|
+
if (serialized.extra)
|
|
392
|
+
Object.assign(err, serialized.extra);
|
|
393
|
+
return err;
|
|
394
|
+
}
|
|
210
395
|
//# sourceMappingURL=worker.pool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.pool.js","sourceRoot":"","sources":["../../src/core/worker.pool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worker.pool.js","sourceRoot":"","sources":["../../src/core/worker.pool.ts"],"names":[],"mappings":";;;;;;AAAA,6DAA6C;AAC7C,6CAA2C;AAC3C,sDAAyB;AACzB,0DAA6B;AAiB7B,MAAM,eAAe,GAAiC;IACpD,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;CACP,CAAC;AAkCF,MAAa,UAAW,SAAQ,0BAAY;IAoBvB;IAEA;IACA;IAtBF,OAAO,GAAa,EAAE,CAAC;IACvB,IAAI,GAAa,EAAE,CAAC;IACpB,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,GAAkB,EAAE,CAAC;IACnC,SAAS,GAAG,KAAK,CAAC;IACT,MAAM,GAAG,IAAI,GAAG,EAG9B,CAAC;IAEJ,6DAA6D;IAC5C,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,QAAQ,GAAG,IAAI,GAAG,EAGhC,CAAC;IAEJ,YACmB,QAA6B,EAC9C,cAA+B,EACd,OAAO,iBAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EACvB,kBAAkB,MAAM;QAEzC,KAAK,EAAE,CAAC;QALS,aAAQ,GAAR,QAAQ,CAAqB;QAE7B,SAAI,GAAJ,IAAI,CAAmB;QACvB,oBAAe,GAAf,eAAe,CAAS;QAGzC,KAAK,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,cAAc,EAAE,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,CAAc,GAAc,EAAE,MAAoB;QACvD,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAE7E,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,wCAAwC;YACxC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,YAAY,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC,CAAC;gBACtE,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAgB;gBACxB,GAAG;gBACH,OAAO,EAAE,OAA+B;gBACxC,MAAM;gBACN,QAAQ,EAAE,CAAC;gBACX,MAAM;aACP,CAAC;YAEF,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oBACpC,0CAA0C;oBAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACrC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;wBACb,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;wBAC1B,MAAM,CAAC,IAAI,YAAY,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;wBACvD,OAAO;oBACT,CAAC;oBACD,gDAAgD;oBAChD,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;wBACtB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;wBAC3D,IAAI,MAAM,EAAE,CAAC;4BACX,IAAI,CAAC;gCACH,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;4BAC1E,CAAC;4BAAC,MAAM,CAAC,CAAC,iBAAiB;4BAC3B,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACrB,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;YACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;SAC/B,CAAC;IACJ,CAAC;IAEO,WAAW;QACjB,MAAM,MAAM,GAAG,IAAI,4BAAM,CACvB,mBAAI,CAAC,OAAO,CAAC,SAAS,EAAE,6BAA6B,CAAC,EACtD,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAC5C,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE3B,wEAAwE;QACxE,yEAAyE;QACzE,wEAAwE;QACxE,oEAAoE;QACpE,iEAAiE;QACjE,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,EAAE;YACjC,MAAM,OAAO,GAAG,GAAwB,CAAC;YAEzC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/B,IAAI,OAAO,EAAE,IAAI,KAAK,cAAc;oBAAE,OAAO;gBAC7C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,CAAC;gBACD,OAAO;YACT,CAAC;YAED,iDAAiD;YACjD,IAAI,OAAO,EAAE,IAAI,KAAK,cAAc;gBAAE,OAAO;YAE7C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO;gBAAE,OAAO,CAAC,6CAA6C;YACnE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACnE,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,OAAO,CAAC,IAAiB;QAC/B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACnB,sEAAsE;QACtE,+DAA+D;QAC/D,IAAI,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC;YAChE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QACD,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,MAAM;gBAAE,EAAE,GAAG,GAAG,CAAC;;gBACvD,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IAEO,QAAQ;QACd,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAG,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAG,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,MAAc,EAAE,IAAiB;QAChD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,aAAyC,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAErC,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAC3B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC;QAGD,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,aAAa;gBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBAC3B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,EAAc,EAAE,EAAE;YAChC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,EAAE,EAAE,CAAC;YACL,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,CAAC,eAAgC,EAAE,EAAE;YACzD,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;YAElD,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC9B,wBAAwB;gBACxB,MAAM,KAAK,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9D,MAAM,aAAa,GAAG,GAAG,EAAE;oBACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACnB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,CAAC,CAAC;gBACF,IAAI,KAAK,GAAG,CAAC;oBAAE,UAAU,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;;oBAC3C,aAAa,EAAE,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,uCAAuC;YACvC,MAAM,OAAO,GAAoB;gBAC/B,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;gBACrB,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW;gBACjC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU;gBAC/B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,eAAe;gBACtB,QAAQ,EAAE,IAAI,IAAI,EAAE;aACrB,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,GAAY,EAAE,EAAE;YAC/B,MAAM,OAAO,GAAG,GAA4B,CAAC;YAE7C,qEAAqE;YACrE,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAG,OAA2B,CAAC;gBACxC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAEvD,MAAM,KAAK,GAAG,CAAC,GAAsB,EAAE,EAAE;oBACvC,IAAI,CAAC;wBACH,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBAC1B,CAAC;oBAAC,MAAM,CAAC;wBACP,IAAI,CAAC;4BACH,MAAM,CAAC,WAAW,CAAC;gCACjB,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK;gCACjD,KAAK,EAAE,mBAAmB,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,UAAU,IAAI;oCAC7D,oCAAoC;6BACX,CAAC,CAAC;wBACjC,CAAC;wBAAC,MAAM,CAAC,CAAC,iBAAiB;wBAC3B,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC;gBAEF,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,KAAK,CAAC;wBACJ,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK;wBACjD,KAAK,EAAE,4BAA4B,GAAG,CAAC,WAAW,GAAG;qBACtD,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC3C,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjC,KAAK,CAAC;wBACJ,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK;wBACjD,KAAK,EAAE,WAAW,GAAG,CAAC,UAAU,mBAAmB,GAAG,CAAC,WAAW,GAAG;qBACtE,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,sEAAsE;gBACtE,oEAAoE;gBACpE,iDAAiD;gBACjD,IAAI,CAAU,CAAC;gBACf,IAAI,CAAC;oBACH,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAI,GAAG,CAAC,IAAkB,CAAC,CAAC;gBAC9D,CAAC;gBAAC,OAAO,GAAY,EAAE,CAAC;oBACtB,KAAK,CAAC;wBACJ,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK;wBACjD,KAAK,EAAG,GAAa,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;qBAC7C,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CACrB,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAC3E,CAAC,GAAY,EAAE,EAAE,CAAC,KAAK,CAAC;oBACtB,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK;oBACjD,KAAK,EAAG,GAAa,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;iBAC7C,CAAC,CACH,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc;gBAAE,OAAO;YAE5C,qEAAqE;YACrE,MAAM,MAAM,GAAG,OAAuB,CAAC;YACvC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAE1C,MAAM,CAAC,GAAG,EAAE;gBACV,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;oBACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;oBAC3C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI;wBAC5B,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,sBAAsB;qBAChC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YAC7C,aAAa,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;gBACpC,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE3B,MAAM,eAAe,GAAoB;oBACvC,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,SAAS,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI;wBAC/D,mBAAmB,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI;iBAC1C,CAAC;gBACF,aAAa,CAAC,eAAe,CAAC,CAAC;gBAE/B,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC3B,CAAC;gBAAC,MAAM,CAAC;gBACT,CAAC;gBACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAED,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAEO,iBAAiB,CAAC,MAAc,EAAE,GAAU;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,sBAAsB,WAAW,IAAI,UAAU,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9F,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAEO,gBAAgB,CAAC,MAAc,EAAE,IAAY;QACnD,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAC3B,2BAA2B,IAAI,iBAAiB;gBAChD,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CACnE,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAEO,aAAa,CAAC,SAAiB;QACrC,MAAM,MAAM,GAAG,CAAC,GAAa,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,mEAAmE;QACnE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,qCAAqC;gBACrC,OAAO,CAAC,UAAU,CAChB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAClC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE;oBACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;oBAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC5B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE;wBACnB,IAAI,CAAC,CAAC,CAAC,CAAC;wBACR,GAAG,EAAE,CAAC;oBACR,CAAC,CAAC;oBACF,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE;wBAClB,OAAO,CAAC,CAAC,CAAC,CAAC;wBACX,GAAG,EAAE,CAAC;oBACR,CAAC,CAAC;gBACJ,CAAC,CAAC,CACH,CACF;gBACD,sBAAsB;gBACtB,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;aAClE,CAAC,CAAC;QACL,CAAC;QAED,+BAA+B;QAC/B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAEtB,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACvB,CAAC;CACF;AA1ZD,gCA0ZC;AAED,SAAS,gBAAgB,CAAC,UAA2B;IACnD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC1C,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;IAC3B,IAAI,UAAU,CAAC,KAAK;QAAE,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;IACnD,IAAI,UAAU,CAAC,KAAK;QAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,88 +1,42 @@
|
|
|
1
1
|
import { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
|
|
2
2
|
import { WorkerDiscoveryService } from '../discovery/discovery.service';
|
|
3
|
-
import type { TaskPriority, WorkerModuleOptions } from './worker.interfaces';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
* - Priority queue support
|
|
13
|
-
* - Timeout support
|
|
14
|
-
* - Worker thread execution
|
|
15
|
-
* - NestJS dependency integration
|
|
16
|
-
*
|
|
17
|
-
* Lifecycle:
|
|
18
|
-
* 1. Discovers worker-enabled services
|
|
19
|
-
* 2. Serializes metadata for worker runtime
|
|
20
|
-
* 3. Creates WorkerPool
|
|
21
|
-
* 4. Dispatches tasks to workers
|
|
22
|
-
* 5. Handles graceful shutdown
|
|
23
|
-
*
|
|
24
|
-
* Example:
|
|
25
|
-
*
|
|
26
|
-
* ```ts
|
|
27
|
-
* await workerService.run(
|
|
28
|
-
* 'ImageService',
|
|
29
|
-
* 'resizeImage',
|
|
30
|
-
* [500],
|
|
31
|
-
* {
|
|
32
|
-
* priority: 'HIGH',
|
|
33
|
-
* timeout: 5000,
|
|
34
|
-
* },
|
|
35
|
-
* );
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
3
|
+
import type { TaskPriority, WorkerModuleOptions, DeadLetterEvent, PoolStats, SerializedError, WorkerJob } from './worker.interfaces';
|
|
4
|
+
export type { DeadLetterEvent, PoolStats };
|
|
5
|
+
export interface RunOptions {
|
|
6
|
+
priority?: TaskPriority;
|
|
7
|
+
timeout?: number;
|
|
8
|
+
retry?: number;
|
|
9
|
+
retryDelay?: number;
|
|
10
|
+
signal?: AbortSignal;
|
|
11
|
+
}
|
|
38
12
|
export declare class WorkerService implements OnModuleInit, OnModuleDestroy {
|
|
39
13
|
private readonly discovery;
|
|
40
14
|
private readonly options;
|
|
15
|
+
private readonly logger;
|
|
41
16
|
private pool;
|
|
42
|
-
private readonly
|
|
17
|
+
private readonly taskDefaults;
|
|
18
|
+
private readonly taskProxies;
|
|
19
|
+
/** Cached array of ALS storages — avoids `?? []` + entries() per call. */
|
|
20
|
+
private alsStorages;
|
|
43
21
|
constructor(discovery: WorkerDiscoveryService, options: WorkerModuleOptions);
|
|
44
22
|
onModuleInit(): void;
|
|
45
23
|
private initPool;
|
|
46
24
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* Parameters:
|
|
50
|
-
* - serviceName: target service
|
|
51
|
-
* - methodName: target method
|
|
52
|
-
* - args: serialized arguments
|
|
53
|
-
* - overrides: runtime priority/timeout overrides
|
|
54
|
-
*
|
|
55
|
-
* Priority:
|
|
56
|
-
* - HIGH
|
|
57
|
-
* - NORMAL
|
|
58
|
-
* - LOW
|
|
59
|
-
*
|
|
60
|
-
* Timeout:
|
|
61
|
-
* Automatically terminates timed-out workers.
|
|
62
|
-
*
|
|
63
|
-
* Example:
|
|
64
|
-
*
|
|
65
|
-
* ```ts
|
|
66
|
-
* await workerService.run(
|
|
67
|
-
* 'ImageService',
|
|
68
|
-
* 'generateThumbnail',
|
|
69
|
-
* [1920, 1080],
|
|
70
|
-
* {
|
|
71
|
-
* priority: 'HIGH',
|
|
72
|
-
* timeout: 3000,
|
|
73
|
-
* },
|
|
74
|
-
* );
|
|
75
|
-
* ```
|
|
76
|
-
*/
|
|
77
|
-
run<T = unknown>(serviceName: string, methodName: string, args?: unknown[], overrides?: {
|
|
78
|
-
priority?: TaskPriority;
|
|
79
|
-
timeout?: number;
|
|
80
|
-
}): Promise<T>;
|
|
81
|
-
/**
|
|
82
|
-
* Gracefully shuts down worker pool.
|
|
25
|
+
* Run a @WorkerTask method in a worker thread.
|
|
83
26
|
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
27
|
+
* @param serviceName Class name of the @WorkerClass provider
|
|
28
|
+
* @param methodName Method decorated with @WorkerTask
|
|
29
|
+
* @param args structuredClone-compatible arguments
|
|
30
|
+
* @param options Optional priority / timeout / retry / AbortSignal overrides
|
|
86
31
|
*/
|
|
32
|
+
run<T = unknown>(serviceName: string, methodName: string, args?: unknown[], options?: RunOptions): Promise<T>;
|
|
33
|
+
/** Listen for dead-letter events (jobs that exhausted all retry attempts) */
|
|
34
|
+
onDead(listener: (event: DeadLetterEvent) => void): this;
|
|
35
|
+
/** Listen for task lifecycle events */
|
|
36
|
+
onTaskEnd(listener: (job: WorkerJob, durationMs: number) => void): this;
|
|
37
|
+
onTaskStart(listener: (job: WorkerJob) => void): this;
|
|
38
|
+
onTaskError(listener: (job: WorkerJob, error: SerializedError) => void): this;
|
|
39
|
+
/** Current pool stats — use for health checks and metrics */
|
|
40
|
+
stats(): PoolStats;
|
|
87
41
|
onModuleDestroy(): Promise<void>;
|
|
88
42
|
}
|