Skip to content
This repository was archived by the owner on Nov 15, 2024. It is now read-only.

Commit 4aae805

Browse files
committed
Add temporary AVA patch
See avajs/ava#3151.
1 parent 3c5cf79 commit 4aae805

File tree

3 files changed

+229
-5
lines changed

3 files changed

+229
-5
lines changed

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
"nanoid": "3.2.0",
8181
"nock": "13.2.7",
8282
"p-event": "4.2.0",
83+
"patch-package": "6.5.1",
8384
"pgknexlove": "1.1.21",
8485
"pkg": "5.5.2",
8586
"playwright": "1.19.2",
@@ -106,6 +107,7 @@
106107
"scripts": {
107108
"prepare": "husky install",
108109
"prepack": "npm run build && npm run pack:cli",
110+
"postinstall": "patch-package",
109111
"build:package": "tsup",
110112
"build:docs": "typedoc",
111113
"build:json-response-schemas": "ts-json-schema-generator --path src/types/route-responses.ts -o src/types/route-responses.generated.json && ts-json-schema-generator --path src/types/models.ts -o src/types/models.generated.json",

patches/ava+5.1.0.patch

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
diff --git a/node_modules/ava/lib/plugin-support/shared-workers.js b/node_modules/ava/lib/plugin-support/shared-workers.js
2+
index 94030ce..2d65454 100644
3+
--- a/node_modules/ava/lib/plugin-support/shared-workers.js
4+
+++ b/node_modules/ava/lib/plugin-support/shared-workers.js
5+
@@ -49,35 +49,54 @@ function launchWorker(filename, initialData) {
6+
}
7+
8+
export async function observeWorkerProcess(fork, runStatus) {
9+
- let registrationCount = 0;
10+
- let signalDeregistered;
11+
- const deregistered = new Promise(resolve => {
12+
- signalDeregistered = resolve;
13+
+ let signalDone;
14+
+
15+
+ const done = new Promise(resolve => {
16+
+ signalDone = () => {
17+
+ resolve();
18+
+ };
19+
});
20+
21+
- fork.promise.finally(() => {
22+
- if (registrationCount === 0) {
23+
- signalDeregistered();
24+
+ const activeInstances = new Set();
25+
+
26+
+ const removeInstance = instance => {
27+
+ instance.worker.unref();
28+
+ activeInstances.delete(instance);
29+
+
30+
+ if (activeInstances.size === 0) {
31+
+ signalDone();
32+
+ }
33+
+ };
34+
+
35+
+ const removeAllInstances = () => {
36+
+ if (activeInstances.size === 0) {
37+
+ signalDone();
38+
+ return;
39+
}
40+
+
41+
+ for (const instance of activeInstances) {
42+
+ removeInstance(instance);
43+
+ }
44+
+ };
45+
+
46+
+ fork.promise.finally(() => {
47+
+ removeAllInstances();
48+
});
49+
50+
fork.onConnectSharedWorker(async ({filename, initialData, port, signalError}) => {
51+
const launched = launchWorker(filename, initialData);
52+
+ activeInstances.add(launched);
53+
54+
const handleWorkerMessage = async message => {
55+
if (message.type === 'deregistered-test-worker' && message.id === fork.threadId) {
56+
launched.worker.off('message', handleWorkerMessage);
57+
-
58+
- registrationCount--;
59+
- if (registrationCount === 0) {
60+
- signalDeregistered();
61+
- }
62+
+ removeInstance(launched);
63+
}
64+
};
65+
66+
launched.statePromises.error.then(error => {
67+
- signalDeregistered();
68+
launched.worker.off('message', handleWorkerMessage);
69+
+ removeAllInstances();
70+
runStatus.emitStateChange({type: 'shared-worker-error', err: serializeError('Shared worker error', true, error)});
71+
signalError();
72+
});
73+
@@ -85,8 +104,6 @@ export async function observeWorkerProcess(fork, runStatus) {
74+
try {
75+
await launched.statePromises.available;
76+
77+
- registrationCount++;
78+
-
79+
port.postMessage({type: 'ready'});
80+
81+
launched.worker.postMessage({
82+
@@ -104,15 +121,8 @@ export async function observeWorkerProcess(fork, runStatus) {
83+
});
84+
85+
launched.worker.on('message', handleWorkerMessage);
86+
- } catch {
87+
- return;
88+
- } finally {
89+
- // Attaching listeners has the side-effect of referencing the worker.
90+
- // Explicitly unreference it now so it does not prevent the main process
91+
- // from exiting.
92+
- launched.worker.unref();
93+
- }
94+
+ } catch {}
95+
});
96+
97+
- return deregistered;
98+
+ return done;
99+
}

0 commit comments

Comments
 (0)