@@ -7,42 +7,14 @@ const timers = require('../now-and-timers.cjs');
77
88const { isRunningInChildProcess, isRunningInThread} = require ( './utils.cjs' ) ;
99
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+ }
4115 }
4216} ;
4317
44- const selectAvaMessage = type => message => message . ava && message . ava . type === type ;
45-
4618class RefCounter {
4719 constructor ( ) {
4820 this . count = 0 ;
@@ -133,8 +105,8 @@ if (isRunningInChildProcess) {
133105// Node.js. In order to keep track, explicitly reference before attaching.
134106handle . ref ( ) ;
135107
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
138110exports . send = handle . send . bind ( handle ) ;
139111exports . unref = handle . unref . bind ( handle ) ;
140112
@@ -143,7 +115,7 @@ async function flush() {
143115 handle . ref ( ) ;
144116 const promise = pendingPings . then ( async ( ) => {
145117 handle . send ( { type : 'ping' } ) ;
146- await pEvent ( handle . channel , 'message' , selectAvaMessage ( ' pong') ) ;
118+ await selectAvaMessage ( handle . channel , 'pong' ) ;
147119 if ( promise === pendingPings ) {
148120 handle . unref ( ) ;
149121 }
@@ -202,7 +174,7 @@ function registerSharedWorker(filename, initialData) {
202174 // The attaching of message listeners will cause the port to be referenced by
203175 // Node.js. In order to keep track, explicitly reference before attaching.
204176 sharedWorkerHandle . ref ( ) ;
205- const ready = pEvent ( ourPort , 'message' , ( { type } ) => type === 'ready' ) . then ( ( ) => {
177+ const ready = selectAvaMessage ( ourPort , 'ready' ) . then ( ( ) => {
206178 currentlyAvailable = error === null ;
207179 } ) . finally ( ( ) => {
208180 // Once ready, it's up to user code to subscribe to messages, which (see
@@ -214,7 +186,7 @@ function registerSharedWorker(filename, initialData) {
214186
215187 // Errors are received over the test worker channel, not the message port
216188 // dedicated to the shared worker.
217- pEvent ( channelEmitter , 'shared-worker-error' ) . then ( ( ) => {
189+ events . once ( channelEmitter , 'shared-worker-error' ) . then ( ( ) => {
218190 unsubscribe ( ) ;
219191 sharedWorkerHandle . forceUnref ( ) ;
220192 error = new Error ( 'The shared worker is no longer available' ) ;
0 commit comments