@atlaspack/workers 2.14.21-typescript-bc4459c37.0 → 2.14.21
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/CHANGELOG.md +9 -0
- package/index.d.ts +2 -94
- package/lib/Handle.js +3 -0
- package/lib/Worker.js +1 -7
- package/lib/WorkerFarm.js +7 -17
- package/lib/backend.js +1 -5
- package/lib/bus.js +1 -1
- package/lib/child.js +4 -11
- package/lib/cpuCount.js +2 -6
- package/lib/process/ProcessChild.js +1 -6
- package/lib/process/ProcessWorker.js +2 -9
- package/lib/threads/ThreadsChild.js +0 -3
- package/lib/threads/ThreadsWorker.js +2 -10
- package/lib/web/WebChild.js +1 -6
- package/lib/web/WebWorker.js +4 -20
- package/package.json +12 -16
- package/src/{Handle.ts → Handle.js} +11 -11
- package/src/{Worker.ts → Worker.js} +54 -66
- package/src/{WorkerFarm.ts → WorkerFarm.js} +141 -198
- package/src/{backend.ts → backend.js} +3 -6
- package/src/{bus.ts → bus.js} +3 -2
- package/src/{child.ts → child.js} +43 -55
- package/src/{childState.ts → childState.js} +2 -1
- package/src/{cpuCount.ts → cpuCount.js} +7 -10
- package/src/{index.ts → index.js} +1 -0
- package/src/process/{ProcessChild.ts → ProcessChild.js} +3 -5
- package/src/process/{ProcessWorker.ts → ProcessWorker.js} +7 -10
- package/src/threads/{ThreadsChild.ts → ThreadsChild.js} +2 -2
- package/src/threads/{ThreadsWorker.ts → ThreadsWorker.js} +8 -14
- package/src/{types.ts → types.js} +35 -34
- package/src/web/{WebChild.ts → WebChild.js} +2 -6
- package/src/web/{WebWorker.ts → WebWorker.js} +7 -19
- package/test/{cpuCount.test.ts → cpuCount.test.js} +1 -0
- package/test/{workerfarm.test.js → workerfarm.test.cjs} +2 -4
- package/LICENSE +0 -201
- package/lib/Handle.d.ts +0 -19
- package/lib/Worker.d.ts +0 -40
- package/lib/WorkerFarm.d.ts +0 -93
- package/lib/backend.d.ts +0 -4
- package/lib/bus.d.ts +0 -6
- package/lib/child.d.ts +0 -43
- package/lib/childState.d.ts +0 -3
- package/lib/cpuCount.d.ts +0 -2
- package/lib/index.d.ts +0 -6
- package/lib/process/ProcessChild.d.ts +0 -9
- package/lib/process/ProcessWorker.d.ts +0 -16
- package/lib/threads/ThreadsChild.d.ts +0 -8
- package/lib/threads/ThreadsWorker.d.ts +0 -15
- package/lib/types.d.ts +0 -52
- package/lib/web/WebChild.d.ts +0 -8
- package/lib/web/WebWorker.d.ts +0 -15
- package/tsconfig.json +0 -4
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
1
3
|
import type {ErrorWithCode, FilePath} from '@atlaspack/types-internal';
|
|
2
4
|
import type {
|
|
3
5
|
CallRequest,
|
|
@@ -20,7 +22,7 @@ import {
|
|
|
20
22
|
serialize,
|
|
21
23
|
} from '@atlaspack/build-cache';
|
|
22
24
|
import ThrowableDiagnostic, {anyToDiagnostic, md} from '@atlaspack/diagnostic';
|
|
23
|
-
import Worker, {WorkerCall} from './Worker';
|
|
25
|
+
import Worker, {type WorkerCall} from './Worker';
|
|
24
26
|
import cpuCount from './cpuCount';
|
|
25
27
|
import Handle from './Handle';
|
|
26
28
|
import {child} from './childState';
|
|
@@ -31,34 +33,32 @@ import logger from '@atlaspack/logger';
|
|
|
31
33
|
|
|
32
34
|
let referenceId = 1;
|
|
33
35
|
|
|
34
|
-
export type SharedReference = number;
|
|
35
|
-
|
|
36
|
-
export type FarmOptions = {
|
|
37
|
-
maxConcurrentWorkers: number
|
|
38
|
-
maxConcurrentCallsPerWorker: number
|
|
39
|
-
forcedKillTime: number
|
|
40
|
-
useLocalWorker: boolean
|
|
41
|
-
warmWorkers: boolean
|
|
42
|
-
workerPath?: FilePath
|
|
43
|
-
backend: BackendType
|
|
44
|
-
shouldPatchConsole?: boolean
|
|
45
|
-
shouldTrace?: boolean
|
|
46
|
-
};
|
|
36
|
+
export opaque type SharedReference = number;
|
|
37
|
+
|
|
38
|
+
export type FarmOptions = {|
|
|
39
|
+
maxConcurrentWorkers: number,
|
|
40
|
+
maxConcurrentCallsPerWorker: number,
|
|
41
|
+
forcedKillTime: number,
|
|
42
|
+
useLocalWorker: boolean,
|
|
43
|
+
warmWorkers: boolean,
|
|
44
|
+
workerPath?: FilePath,
|
|
45
|
+
backend: BackendType,
|
|
46
|
+
shouldPatchConsole?: boolean,
|
|
47
|
+
shouldTrace?: boolean,
|
|
48
|
+
|};
|
|
47
49
|
|
|
48
50
|
type WorkerModule = {
|
|
49
|
-
|
|
51
|
+
+[string]: (...args: Array<mixed>) => Promise<mixed>,
|
|
52
|
+
...
|
|
50
53
|
};
|
|
51
54
|
|
|
52
|
-
export type WorkerApi = {
|
|
53
|
-
callMaster(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
):
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
resolveSharedReference(value: unknown): SharedReference | null | undefined;
|
|
60
|
-
callChild?: (childId: number, request: HandleCallRequest) => Promise<unknown>;
|
|
61
|
-
};
|
|
55
|
+
export type WorkerApi = {|
|
|
56
|
+
callMaster(CallRequest, ?boolean): Promise<mixed>,
|
|
57
|
+
createReverseHandle(fn: HandleFunction): Handle,
|
|
58
|
+
getSharedReference(ref: SharedReference): mixed,
|
|
59
|
+
resolveSharedReference(value: mixed): ?SharedReference,
|
|
60
|
+
callChild?: (childId: number, request: HandleCallRequest) => Promise<mixed>,
|
|
61
|
+
|};
|
|
62
62
|
|
|
63
63
|
export {Handle};
|
|
64
64
|
|
|
@@ -72,22 +72,19 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
72
72
|
callQueue: Array<WorkerCall> = [];
|
|
73
73
|
ending: boolean = false;
|
|
74
74
|
localWorker: WorkerModule;
|
|
75
|
-
localWorkerInit: Promise<
|
|
75
|
+
localWorkerInit: ?Promise<void>;
|
|
76
76
|
options: FarmOptions;
|
|
77
77
|
run: HandleFunction;
|
|
78
78
|
warmWorkers: number = 0;
|
|
79
79
|
readyWorkers: number = 0;
|
|
80
80
|
workers: Map<number, Worker> = new Map();
|
|
81
81
|
handles: Map<number, Handle> = new Map();
|
|
82
|
-
sharedReferences: Map<SharedReference,
|
|
83
|
-
sharedReferencesByValue: Map<
|
|
84
|
-
serializedSharedReferences: Map<
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
> =
|
|
88
|
-
profiler: SamplingProfiler | null | undefined;
|
|
89
|
-
|
|
90
|
-
constructor(farmOptions: Partial<FarmOptions> = {}) {
|
|
82
|
+
sharedReferences: Map<SharedReference, mixed> = new Map();
|
|
83
|
+
sharedReferencesByValue: Map<mixed, SharedReference> = new Map();
|
|
84
|
+
serializedSharedReferences: Map<SharedReference, ?ArrayBuffer> = new Map();
|
|
85
|
+
profiler: ?SamplingProfiler;
|
|
86
|
+
|
|
87
|
+
constructor(farmOptions: $Shape<FarmOptions> = {}) {
|
|
91
88
|
super();
|
|
92
89
|
this.options = {
|
|
93
90
|
maxConcurrentWorkers: WorkerFarm.getNumWorkers(),
|
|
@@ -105,9 +102,9 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
105
102
|
throw new Error('Please provide a worker path!');
|
|
106
103
|
}
|
|
107
104
|
|
|
105
|
+
// $FlowFixMe
|
|
108
106
|
this.localWorker = require(this.options.workerPath);
|
|
109
107
|
|
|
110
|
-
// @ts-expect-error TS2322
|
|
111
108
|
this.localWorkerInit =
|
|
112
109
|
this.localWorker.childInit != null ? this.localWorker.childInit() : null;
|
|
113
110
|
|
|
@@ -131,58 +128,47 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
131
128
|
this.startMaxWorkers();
|
|
132
129
|
}
|
|
133
130
|
|
|
134
|
-
workerApi: {
|
|
135
|
-
callChild: (
|
|
136
|
-
childId: number,
|
|
137
|
-
request: HandleCallRequest,
|
|
138
|
-
) => Promise<unknown>;
|
|
131
|
+
workerApi: {|
|
|
132
|
+
callChild: (childId: number, request: HandleCallRequest) => Promise<mixed>,
|
|
139
133
|
callMaster: (
|
|
140
134
|
request: CallRequest,
|
|
141
|
-
awaitResponse?: boolean
|
|
142
|
-
) => Promise<
|
|
143
|
-
createReverseHandle: (fn: HandleFunction) => Handle
|
|
144
|
-
getSharedReference: (ref: SharedReference) =>
|
|
145
|
-
resolveSharedReference: (value:
|
|
146
|
-
runHandle: (handle: Handle, args: Array<any>) => Promise<
|
|
147
|
-
} = {
|
|
135
|
+
awaitResponse?: ?boolean,
|
|
136
|
+
) => Promise<mixed>,
|
|
137
|
+
createReverseHandle: (fn: HandleFunction) => Handle,
|
|
138
|
+
getSharedReference: (ref: SharedReference) => mixed,
|
|
139
|
+
resolveSharedReference: (value: mixed) => void | SharedReference,
|
|
140
|
+
runHandle: (handle: Handle, args: Array<any>) => Promise<mixed>,
|
|
141
|
+
|} = {
|
|
148
142
|
callMaster: async (
|
|
149
143
|
request: CallRequest,
|
|
150
|
-
awaitResponse: boolean
|
|
151
|
-
): Promise<
|
|
144
|
+
awaitResponse: ?boolean = true,
|
|
145
|
+
): Promise<mixed> => {
|
|
146
|
+
// $FlowFixMe
|
|
152
147
|
let result = await this.processRequest({
|
|
153
148
|
...request,
|
|
154
|
-
// @ts-expect-error TS2322
|
|
155
149
|
awaitResponse,
|
|
156
150
|
});
|
|
157
151
|
return deserialize(serialize(result));
|
|
158
152
|
},
|
|
159
153
|
createReverseHandle: (fn: HandleFunction): Handle =>
|
|
160
154
|
this.createReverseHandle(fn),
|
|
161
|
-
callChild: (
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
...request,
|
|
172
|
-
resolve,
|
|
173
|
-
reject,
|
|
174
|
-
retries: 0,
|
|
175
|
-
});
|
|
176
|
-
},
|
|
177
|
-
),
|
|
178
|
-
runHandle: (handle: Handle, args: Array<any>): Promise<unknown> =>
|
|
155
|
+
callChild: (childId: number, request: HandleCallRequest): Promise<mixed> =>
|
|
156
|
+
new Promise((resolve, reject) => {
|
|
157
|
+
nullthrows(this.workers.get(childId)).call({
|
|
158
|
+
...request,
|
|
159
|
+
resolve,
|
|
160
|
+
reject,
|
|
161
|
+
retries: 0,
|
|
162
|
+
});
|
|
163
|
+
}),
|
|
164
|
+
runHandle: (handle: Handle, args: Array<any>): Promise<mixed> =>
|
|
179
165
|
this.workerApi.callChild(nullthrows(handle.childId), {
|
|
180
166
|
handle: handle.id,
|
|
181
167
|
args,
|
|
182
168
|
}),
|
|
183
169
|
getSharedReference: (ref: SharedReference) =>
|
|
184
170
|
this.sharedReferences.get(ref),
|
|
185
|
-
resolveSharedReference: (value:
|
|
171
|
+
resolveSharedReference: (value: mixed) =>
|
|
186
172
|
this.sharedReferencesByValue.get(value),
|
|
187
173
|
};
|
|
188
174
|
|
|
@@ -248,13 +234,9 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
248
234
|
};
|
|
249
235
|
}
|
|
250
236
|
|
|
251
|
-
onError(
|
|
252
|
-
error: ErrorWithCode,
|
|
253
|
-
worker: Worker,
|
|
254
|
-
): undefined | Promise<undefined> {
|
|
237
|
+
onError(error: ErrorWithCode, worker: Worker): void | Promise<void> {
|
|
255
238
|
// Handle ipc errors
|
|
256
239
|
if (error.code === 'ERR_IPC_CHANNEL_CLOSED') {
|
|
257
|
-
// @ts-expect-error TS2322
|
|
258
240
|
return this.stopWorker(worker);
|
|
259
241
|
} else {
|
|
260
242
|
logger.error(error, '@atlaspack/workers');
|
|
@@ -332,7 +314,6 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
332
314
|
}
|
|
333
315
|
|
|
334
316
|
if (worker.calls.size < this.options.maxConcurrentCallsPerWorker) {
|
|
335
|
-
// @ts-expect-error TS2345
|
|
336
317
|
this.callWorker(worker, this.callQueue.shift());
|
|
337
318
|
}
|
|
338
319
|
}
|
|
@@ -352,24 +333,25 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
352
333
|
}
|
|
353
334
|
|
|
354
335
|
async processRequest(
|
|
355
|
-
data: {
|
|
356
|
-
location: FilePath
|
|
357
|
-
} &
|
|
336
|
+
data: {|
|
|
337
|
+
location: FilePath,
|
|
338
|
+
|} & $Shape<WorkerRequest>,
|
|
358
339
|
worker?: Worker,
|
|
359
|
-
): Promise
|
|
340
|
+
): Promise<?string> {
|
|
360
341
|
let {method, args, location, awaitResponse, idx, handle: handleId} = data;
|
|
361
342
|
let mod;
|
|
362
343
|
if (handleId != null) {
|
|
363
344
|
mod = nullthrows(this.handles.get(handleId)?.fn);
|
|
364
345
|
} else if (location) {
|
|
365
|
-
//
|
|
346
|
+
// $FlowFixMe
|
|
366
347
|
if (process.browser) {
|
|
367
348
|
if (location === '@atlaspack/workers/bus') {
|
|
368
|
-
mod = bus
|
|
349
|
+
mod = (bus: any);
|
|
369
350
|
} else {
|
|
370
351
|
throw new Error('No dynamic require possible: ' + location);
|
|
371
352
|
}
|
|
372
353
|
} else {
|
|
354
|
+
// $FlowFixMe this must be dynamic
|
|
373
355
|
mod = require(location);
|
|
374
356
|
}
|
|
375
357
|
} else {
|
|
@@ -393,9 +375,8 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
393
375
|
let result;
|
|
394
376
|
if (method == null) {
|
|
395
377
|
try {
|
|
396
|
-
// @ts-expect-error TS2488
|
|
397
378
|
result = responseFromContent(await mod(...args));
|
|
398
|
-
} catch (e
|
|
379
|
+
} catch (e) {
|
|
399
380
|
result = errorResponseFromError(e);
|
|
400
381
|
}
|
|
401
382
|
} else {
|
|
@@ -405,8 +386,9 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
405
386
|
}
|
|
406
387
|
|
|
407
388
|
try {
|
|
389
|
+
// $FlowFixMe
|
|
408
390
|
result = responseFromContent(await mod[method](...args));
|
|
409
|
-
} catch (e
|
|
391
|
+
} catch (e) {
|
|
410
392
|
result = errorResponseFromError(e);
|
|
411
393
|
}
|
|
412
394
|
}
|
|
@@ -428,21 +410,16 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
428
410
|
throw new Error('Cannot add a worker call if workerfarm is ending.');
|
|
429
411
|
}
|
|
430
412
|
|
|
431
|
-
return new Promise(
|
|
432
|
-
(
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
reject,
|
|
442
|
-
});
|
|
443
|
-
this.processQueue();
|
|
444
|
-
},
|
|
445
|
-
);
|
|
413
|
+
return new Promise((resolve, reject) => {
|
|
414
|
+
this.callQueue.push({
|
|
415
|
+
method,
|
|
416
|
+
args: args,
|
|
417
|
+
retries: 0,
|
|
418
|
+
resolve,
|
|
419
|
+
reject,
|
|
420
|
+
});
|
|
421
|
+
this.processQueue();
|
|
422
|
+
});
|
|
446
423
|
}
|
|
447
424
|
|
|
448
425
|
async end(): Promise<void> {
|
|
@@ -489,12 +466,9 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
489
466
|
}
|
|
490
467
|
|
|
491
468
|
createSharedReference(
|
|
492
|
-
value:
|
|
469
|
+
value: mixed,
|
|
493
470
|
isCacheable: boolean = true,
|
|
494
|
-
): {
|
|
495
|
-
ref: SharedReference;
|
|
496
|
-
dispose(): Promise<unknown>;
|
|
497
|
-
} {
|
|
471
|
+
): {|ref: SharedReference, dispose(): Promise<mixed>|} {
|
|
498
472
|
let ref = referenceId++;
|
|
499
473
|
this.sharedReferences.set(ref, value);
|
|
500
474
|
this.sharedReferencesByValue.set(value, ref);
|
|
@@ -509,7 +483,7 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
509
483
|
this.sharedReferencesByValue.delete(value);
|
|
510
484
|
this.serializedSharedReferences.delete(ref);
|
|
511
485
|
|
|
512
|
-
let promises
|
|
486
|
+
let promises = [];
|
|
513
487
|
for (let worker of this.workers.values()) {
|
|
514
488
|
if (!worker.sentSharedReferences.has(ref)) {
|
|
515
489
|
continue;
|
|
@@ -517,21 +491,16 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
517
491
|
|
|
518
492
|
worker.sentSharedReferences.delete(ref);
|
|
519
493
|
promises.push(
|
|
520
|
-
new Promise(
|
|
521
|
-
(
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
skipReadyCheck: true,
|
|
531
|
-
retries: 0,
|
|
532
|
-
});
|
|
533
|
-
},
|
|
534
|
-
),
|
|
494
|
+
new Promise((resolve, reject) => {
|
|
495
|
+
worker.call({
|
|
496
|
+
method: 'deleteSharedReference',
|
|
497
|
+
args: [ref],
|
|
498
|
+
resolve,
|
|
499
|
+
reject,
|
|
500
|
+
skipReadyCheck: true,
|
|
501
|
+
retries: 0,
|
|
502
|
+
});
|
|
503
|
+
}),
|
|
535
504
|
);
|
|
536
505
|
}
|
|
537
506
|
return Promise.all(promises);
|
|
@@ -551,33 +520,26 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
551
520
|
// If the reference was created with the isCacheable option set to false,
|
|
552
521
|
// serializedSharedReferences will contain `null` as the value.
|
|
553
522
|
if (cached !== null) {
|
|
554
|
-
// @ts-expect-error TS2345
|
|
555
523
|
this.serializedSharedReferences.set(ref, buf);
|
|
556
524
|
}
|
|
557
525
|
|
|
558
|
-
// @ts-expect-error TS2322
|
|
559
526
|
return buf;
|
|
560
527
|
}
|
|
561
528
|
|
|
562
529
|
async startProfile() {
|
|
563
|
-
let promises
|
|
530
|
+
let promises = [];
|
|
564
531
|
for (let worker of this.workers.values()) {
|
|
565
532
|
promises.push(
|
|
566
|
-
new Promise(
|
|
567
|
-
(
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
retries: 0,
|
|
577
|
-
skipReadyCheck: true,
|
|
578
|
-
});
|
|
579
|
-
},
|
|
580
|
-
),
|
|
533
|
+
new Promise((resolve, reject) => {
|
|
534
|
+
worker.call({
|
|
535
|
+
method: 'startProfile',
|
|
536
|
+
args: [],
|
|
537
|
+
resolve,
|
|
538
|
+
reject,
|
|
539
|
+
retries: 0,
|
|
540
|
+
skipReadyCheck: true,
|
|
541
|
+
});
|
|
542
|
+
}),
|
|
581
543
|
);
|
|
582
544
|
}
|
|
583
545
|
|
|
@@ -598,21 +560,16 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
598
560
|
for (let worker of this.workers.values()) {
|
|
599
561
|
names.push('Worker ' + worker.id);
|
|
600
562
|
promises.push(
|
|
601
|
-
new Promise(
|
|
602
|
-
(
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
retries: 0,
|
|
612
|
-
skipReadyCheck: true,
|
|
613
|
-
});
|
|
614
|
-
},
|
|
615
|
-
),
|
|
563
|
+
new Promise((resolve, reject) => {
|
|
564
|
+
worker.call({
|
|
565
|
+
method: 'endProfile',
|
|
566
|
+
args: [],
|
|
567
|
+
resolve,
|
|
568
|
+
reject,
|
|
569
|
+
retries: 0,
|
|
570
|
+
skipReadyCheck: true,
|
|
571
|
+
});
|
|
572
|
+
}),
|
|
616
573
|
);
|
|
617
574
|
}
|
|
618
575
|
|
|
@@ -622,40 +579,33 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
622
579
|
let stream = trace.pipe(fs.createWriteStream(filename));
|
|
623
580
|
|
|
624
581
|
for (let profile of profiles) {
|
|
625
|
-
// @ts-expect-error TS2345
|
|
626
582
|
trace.addCPUProfile(names.shift(), profile);
|
|
627
583
|
}
|
|
628
584
|
|
|
629
585
|
trace.flush();
|
|
630
|
-
await new Promise((resolve
|
|
586
|
+
await new Promise((resolve) => {
|
|
631
587
|
stream.once('finish', resolve);
|
|
632
588
|
});
|
|
633
589
|
|
|
634
590
|
logger.info({
|
|
635
591
|
origin: '@atlaspack/workers',
|
|
636
|
-
// @ts-expect-error TS2345
|
|
637
592
|
message: md`Wrote profile to ${filename}`,
|
|
638
593
|
});
|
|
639
594
|
}
|
|
640
595
|
|
|
641
596
|
async callAllWorkers(method: string, args: Array<any>) {
|
|
642
|
-
let promises
|
|
597
|
+
let promises = [];
|
|
643
598
|
for (let worker of this.workers.values()) {
|
|
644
599
|
promises.push(
|
|
645
|
-
new Promise(
|
|
646
|
-
(
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
reject,
|
|
655
|
-
retries: 0,
|
|
656
|
-
});
|
|
657
|
-
},
|
|
658
|
-
),
|
|
600
|
+
new Promise((resolve, reject) => {
|
|
601
|
+
worker.call({
|
|
602
|
+
method,
|
|
603
|
+
args,
|
|
604
|
+
resolve,
|
|
605
|
+
reject,
|
|
606
|
+
retries: 0,
|
|
607
|
+
});
|
|
608
|
+
}),
|
|
659
609
|
);
|
|
660
610
|
}
|
|
661
611
|
|
|
@@ -670,27 +620,21 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
670
620
|
let snapshotPaths = await Promise.all(
|
|
671
621
|
[...this.workers.values()].map(
|
|
672
622
|
(worker) =>
|
|
673
|
-
new Promise(
|
|
674
|
-
(
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
retries: 0,
|
|
684
|
-
skipReadyCheck: true,
|
|
685
|
-
});
|
|
686
|
-
},
|
|
687
|
-
),
|
|
623
|
+
new Promise((resolve, reject) => {
|
|
624
|
+
worker.call({
|
|
625
|
+
method: 'takeHeapSnapshot',
|
|
626
|
+
args: [snapshotId],
|
|
627
|
+
resolve,
|
|
628
|
+
reject,
|
|
629
|
+
retries: 0,
|
|
630
|
+
skipReadyCheck: true,
|
|
631
|
+
});
|
|
632
|
+
}),
|
|
688
633
|
),
|
|
689
634
|
);
|
|
690
635
|
|
|
691
636
|
logger.info({
|
|
692
637
|
origin: '@atlaspack/workers',
|
|
693
|
-
// @ts-expect-error TS2345
|
|
694
638
|
message: md`Wrote heap snapshots to the following paths:\n${snapshotPaths.join(
|
|
695
639
|
'\n',
|
|
696
640
|
)}`,
|
|
@@ -713,16 +657,16 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
713
657
|
return !!child;
|
|
714
658
|
}
|
|
715
659
|
|
|
716
|
-
static getWorkerApi(): {
|
|
660
|
+
static getWorkerApi(): {|
|
|
717
661
|
callMaster: (
|
|
718
662
|
request: CallRequest,
|
|
719
|
-
awaitResponse?: boolean
|
|
720
|
-
) => Promise<
|
|
721
|
-
createReverseHandle: (fn: (...args: Array<any>) =>
|
|
722
|
-
getSharedReference: (ref: SharedReference) =>
|
|
723
|
-
resolveSharedReference: (value:
|
|
724
|
-
runHandle: (handle: Handle, args: Array<any>) => Promise<
|
|
725
|
-
} {
|
|
663
|
+
awaitResponse?: ?boolean,
|
|
664
|
+
) => Promise<mixed>,
|
|
665
|
+
createReverseHandle: (fn: (...args: Array<any>) => mixed) => Handle,
|
|
666
|
+
getSharedReference: (ref: SharedReference) => mixed,
|
|
667
|
+
resolveSharedReference: (value: mixed) => void | SharedReference,
|
|
668
|
+
runHandle: (handle: Handle, args: Array<any>) => Promise<mixed>,
|
|
669
|
+
|} {
|
|
726
670
|
invariant(
|
|
727
671
|
child != null,
|
|
728
672
|
'WorkerFarm.getWorkerApi can only be called within workers',
|
|
@@ -731,10 +675,9 @@ export default class WorkerFarm extends EventEmitter {
|
|
|
731
675
|
}
|
|
732
676
|
|
|
733
677
|
static getConcurrentCallsPerWorker(
|
|
734
|
-
defaultValue
|
|
678
|
+
defaultValue?: number = DEFAULT_MAX_CONCURRENT_CALLS,
|
|
735
679
|
): number {
|
|
736
680
|
return (
|
|
737
|
-
// @ts-expect-error TS2345
|
|
738
681
|
parseInt(process.env.ATLASPACK_MAX_CONCURRENT_CALLS, 10) || defaultValue
|
|
739
682
|
);
|
|
740
683
|
}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
+
// @flow
|
|
1
2
|
import type {BackendType, WorkerImpl} from './types';
|
|
2
3
|
|
|
3
|
-
// flow-to-ts helpers
|
|
4
|
-
export type Class<T> = new (...args: any[]) => T;
|
|
5
|
-
// /flow-to-ts helpers
|
|
6
|
-
|
|
7
4
|
export function detectBackend(): BackendType {
|
|
8
|
-
//
|
|
5
|
+
// $FlowFixMe
|
|
9
6
|
if (process.browser) return 'web';
|
|
10
7
|
|
|
11
8
|
switch (process.env.ATLASPACK_WORKER_BACKEND) {
|
|
@@ -17,7 +14,7 @@ export function detectBackend(): BackendType {
|
|
|
17
14
|
try {
|
|
18
15
|
require('worker_threads');
|
|
19
16
|
return 'threads';
|
|
20
|
-
} catch (err
|
|
17
|
+
} catch (err) {
|
|
21
18
|
return 'process';
|
|
22
19
|
}
|
|
23
20
|
}
|
package/src/{bus.ts → bus.js}
RENAMED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @flow
|
|
1
2
|
import EventEmitter from 'events';
|
|
2
3
|
import {child} from './childState';
|
|
3
4
|
|
|
@@ -6,7 +7,7 @@ class Bus extends EventEmitter {
|
|
|
6
7
|
if (child) {
|
|
7
8
|
child.workerApi.callMaster(
|
|
8
9
|
{
|
|
9
|
-
//
|
|
10
|
+
// $FlowFixMe
|
|
10
11
|
location: process.browser ? '@atlaspack/workers/bus' : __filename,
|
|
11
12
|
method: 'emit',
|
|
12
13
|
args: [event, ...args],
|
|
@@ -20,4 +21,4 @@ class Bus extends EventEmitter {
|
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
export default new Bus()
|
|
24
|
+
export default (new Bus(): Bus);
|