@@ -10,12 +10,15 @@ import {isAbsolute} from 'path';
10
10
import { fileURLToPath } from 'url' ;
11
11
import Farm from './Farm' ;
12
12
import WorkerPool from './WorkerPool' ;
13
- import type {
14
- PoolExitResult ,
15
- WorkerFarmOptions ,
16
- WorkerModule ,
17
- WorkerPoolInterface ,
18
- WorkerPoolOptions ,
13
+ import {
14
+ CHILD_MESSAGE_CALL ,
15
+ type ChildMessageCall ,
16
+ type OnEnd ,
17
+ type PoolExitResult ,
18
+ type WorkerFarmOptions ,
19
+ type WorkerModule ,
20
+ type WorkerPoolInterface ,
21
+ type WorkerPoolOptions ,
19
22
} from './types' ;
20
23
21
24
export { default as PriorityQueue } from './PriorityQueue' ;
@@ -171,6 +174,39 @@ export class Worker {
171
174
return this . _workerPool . getStdout ( ) ;
172
175
}
173
176
177
+ async runInAllWorkers (
178
+ method : string ,
179
+ ...args : Array < unknown >
180
+ ) : Promise < Array < unknown > > {
181
+ const promises = this . _workerPool . getWorkers ( ) . map (
182
+ worker =>
183
+ new Promise ( ( resolve , reject ) => {
184
+ const request : ChildMessageCall = [
185
+ CHILD_MESSAGE_CALL ,
186
+ false ,
187
+ method ,
188
+ args ,
189
+ ] ;
190
+
191
+ const onStart = noop ;
192
+
193
+ const onEnd : OnEnd = ( error : Error | null , result : unknown ) => {
194
+ if ( error ) {
195
+ reject ( error ) ;
196
+ } else {
197
+ resolve ( result ) ;
198
+ }
199
+ } ;
200
+
201
+ const onCustomMessage = noop ;
202
+
203
+ worker . send ( request , onStart , onEnd , onCustomMessage ) ;
204
+ } ) ,
205
+ ) ;
206
+
207
+ return await Promise . all ( promises ) ;
208
+ }
209
+
174
210
async start ( ) : Promise < void > {
175
211
await this . _workerPool . start ( ) ;
176
212
}
@@ -184,3 +220,7 @@ export class Worker {
184
220
return this . _workerPool . end ( ) ;
185
221
}
186
222
}
223
+
224
+ function noop ( ) : void {
225
+ // noop
226
+ }
0 commit comments