Skip to content

Commit f047694

Browse files
committed
Remove p-event dependency
1 parent 7533020 commit f047694

File tree

5 files changed

+16
-72
lines changed

5 files changed

+16
-72
lines changed

lib/plugin-support/shared-workers.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ export async function observeWorkerProcess(fork, runStatus) {
104104
try {
105105
await launched.statePromises.available;
106106

107-
port.postMessage({type: 'ready'});
107+
port.postMessage({ava: {type: 'ready'}});
108108

109109
launched.worker.postMessage({
110110
type: 'register-test-worker',

lib/worker/channel.cjs

+10-38
Original file line numberDiff line numberDiff line change
@@ -7,42 +7,14 @@ const timers = require('../now-and-timers.cjs');
77

88
const {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-
4618
class 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.
134106
handle.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
138110
exports.send = handle.send.bind(handle);
139111
exports.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');

package-lock.json

-26
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@
110110
"matcher": "^5.0.0",
111111
"mem": "^9.0.2",
112112
"ms": "^2.1.3",
113-
"p-event": "^6.0.0",
114113
"p-map": "^6.0.0",
115114
"picomatch": "^2.3.1",
116115
"pkg-conf": "^4.0.0",

test-tap/fixture/fail-fast/multiple-files/passes-slow.cjs

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const events = require('node:events');
12
const {parentPort} = require('node:worker_threads');
23

34
const test = require('../../../../entrypoints/main.cjs');
@@ -6,14 +7,12 @@ test.serial('first pass', async t => {
67
t.pass();
78
const timer = setTimeout(() => {}, 60_000); // Ensure process stays alive.
89
const source = parentPort || process;
9-
const {pEvent} = await import('p-event');
10-
await pEvent(source, 'message', message => {
11-
if (message.ava) {
12-
return message.ava.type === 'peer-failed';
10+
for await (const [message] of events.on(source, 'message')) {
11+
if (message.ava?.type === 'peer-failed') {
12+
break;
1313
}
14+
}
1415

15-
return false;
16-
});
1716
clearTimeout(timer);
1817
});
1918

0 commit comments

Comments
 (0)