@@ -7,42 +7,14 @@ const timers = require('../now-and-timers.cjs');
7
7
8
8
const { isRunningInChildProcess, isRunningInThread} = require ( './utils.cjs' ) ;
9
9
10
- let pEvent = async ( emitter , event , options ) => {
11
- // We need to import p-event, but import() is asynchronous. Buffer any events
12
- // emitted in the meantime. Don't handle errors.
13
- const buffer = [ ] ;
14
- const addToBuffer = ( ...args ) => buffer . push ( args ) ;
15
- emitter . on ( event , addToBuffer ) ;
16
-
17
- try {
18
- ( { pEvent} = await import ( 'p-event' ) ) ;
19
- } finally {
20
- emitter . off ( event , addToBuffer ) ;
21
- }
22
-
23
- if ( buffer . length === 0 ) {
24
- return pEvent ( emitter , event , options ) ;
25
- }
26
-
27
- // Now replay buffered events.
28
- const replayEmitter = new events . EventEmitter ( ) ;
29
- const promise = pEvent ( replayEmitter , event , options ) ;
30
- for ( const args of buffer ) {
31
- replayEmitter . emit ( event , ...args ) ;
32
- }
33
-
34
- const replay = ( ...args ) => replayEmitter . emit ( event , ...args ) ;
35
- emitter . on ( event , replay ) ;
36
-
37
- try {
38
- return await promise ;
39
- } finally {
40
- emitter . off ( event , replay ) ;
10
+ const selectAvaMessage = async ( channel , type ) => {
11
+ for await ( const [ message ] of events . on ( channel , 'message' ) ) {
12
+ if ( message . ava ?. type === type ) {
13
+ return message ;
14
+ }
41
15
}
42
16
} ;
43
17
44
- const selectAvaMessage = type => message => message . ava && message . ava . type === type ;
45
-
46
18
class RefCounter {
47
19
constructor ( ) {
48
20
this . count = 0 ;
@@ -133,8 +105,8 @@ if (isRunningInChildProcess) {
133
105
// Node.js. In order to keep track, explicitly reference before attaching.
134
106
handle . ref ( ) ;
135
107
136
- exports . options = pEvent ( handle . channel , 'message' , selectAvaMessage ( ' options') ) . then ( message => message . ava . options ) ; // eslint-disable-line unicorn/prefer-top-level-await
137
- exports . peerFailed = pEvent ( handle . channel , 'message' , selectAvaMessage ( ' peer-failed') ) ;
108
+ exports . options = selectAvaMessage ( handle . channel , 'options' ) . then ( message => message . ava . options ) ; // eslint-disable-line unicorn/prefer-top-level-await
109
+ exports . peerFailed = selectAvaMessage ( handle . channel , 'peer-failed' ) ; // eslint-disable-line unicorn/prefer-top-level-await
138
110
exports . send = handle . send . bind ( handle ) ;
139
111
exports . unref = handle . unref . bind ( handle ) ;
140
112
@@ -143,7 +115,7 @@ async function flush() {
143
115
handle . ref ( ) ;
144
116
const promise = pendingPings . then ( async ( ) => {
145
117
handle . send ( { type : 'ping' } ) ;
146
- await pEvent ( handle . channel , 'message' , selectAvaMessage ( ' pong') ) ;
118
+ await selectAvaMessage ( handle . channel , 'pong' ) ;
147
119
if ( promise === pendingPings ) {
148
120
handle . unref ( ) ;
149
121
}
@@ -202,7 +174,7 @@ function registerSharedWorker(filename, initialData) {
202
174
// The attaching of message listeners will cause the port to be referenced by
203
175
// Node.js. In order to keep track, explicitly reference before attaching.
204
176
sharedWorkerHandle . ref ( ) ;
205
- const ready = pEvent ( ourPort , 'message' , ( { type } ) => type === 'ready' ) . then ( ( ) => {
177
+ const ready = selectAvaMessage ( ourPort , 'ready' ) . then ( ( ) => {
206
178
currentlyAvailable = error === null ;
207
179
} ) . finally ( ( ) => {
208
180
// Once ready, it's up to user code to subscribe to messages, which (see
@@ -214,7 +186,7 @@ function registerSharedWorker(filename, initialData) {
214
186
215
187
// Errors are received over the test worker channel, not the message port
216
188
// dedicated to the shared worker.
217
- pEvent ( channelEmitter , 'shared-worker-error' ) . then ( ( ) => {
189
+ events . once ( channelEmitter , 'shared-worker-error' ) . then ( ( ) => {
218
190
unsubscribe ( ) ;
219
191
sharedWorkerHandle . forceUnref ( ) ;
220
192
error = new Error ( 'The shared worker is no longer available' ) ;
0 commit comments