Skip to content

Commit 998146f

Browse files
committed
test: fix coverage typescript mapping and lcov file transfer in e2e
test-specific patches but they require resolutions in root package.json or they aren't picked up correctly during yarn install of transitives
1 parent fc317fa commit 998146f

8 files changed

Lines changed: 350 additions & 8 deletions
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
diff --git a/lib/commonjs/cli.js b/lib/commonjs/cli.js
2+
index 35c04da87c63a79bc26707aaffe3156fb98eca79..435c9959f456318c5e0069fce1f3e922891acf56 100644
3+
--- a/lib/commonjs/cli.js
4+
+++ b/lib/commonjs/cli.js
5+
@@ -100,6 +100,14 @@ async function startServer(server, config, after) {
6+
cleanup();
7+
}
8+
});
9+
+ server.on('coverage-data', coverage => {
10+
+ const incomingKeys = Object.keys(coverage).length;
11+
+ console.log(`[jet-coverage] WS received ${incomingKeys} file(s)`);
12+
+ coverageMap.merge(coverage);
13+
+ global.__coverage__ = coverageMap.toJSON();
14+
+ const totalKeys = Object.keys(global.__coverage__).length;
15+
+ console.log(`[jet-coverage] WS merged total ${totalKeys} file(s)`);
16+
+ });
17+
cleanupTasks.add(async () => {
18+
if (server.listening) {
19+
await server.stop();
20+
@@ -129,8 +137,13 @@ function attachHttpServer(wss) {
21+
});
22+
req.on('end', () => {
23+
try {
24+
- coverageMap.merge(JSON.parse(body));
25+
+ const incoming = JSON.parse(body);
26+
+ const incomingKeys = Object.keys(incoming).length;
27+
+ console.log(`[jet-coverage] POST body ${body.length} bytes, ${incomingKeys} file(s)`);
28+
+ coverageMap.merge(incoming);
29+
global.__coverage__ = coverageMap.toJSON();
30+
+ const totalKeys = Object.keys(global.__coverage__).length;
31+
+ console.log(`[jet-coverage] POST received ${incomingKeys} file(s), merged total ${totalKeys}`);
32+
res.end(JSON.stringify({
33+
message: 'OK'
34+
}));
35+
@@ -302,12 +315,11 @@ function attachHttpServer(wss) {
36+
slow: finalConfig.slow
37+
});
38+
return startServer(server, finalConfig, target.after).then(() => {
39+
- if (finalConfig.coverage) {
40+
- attachHttpServer(server.wss);
41+
- }
42+
if (!finalConfig.watch) {
43+
server.run(async failures => {
44+
global.__coverage__ = coverageMap.toJSON();
45+
+ const mergedKeys = Object.keys(global.__coverage__).length;
46+
+ console.log(`[jet-coverage] merged ${mergedKeys} file(s) before NYC shutdown`);
47+
await cleanup();
48+
process.exit(failures > 0 ? 1 : 0);
49+
});
50+
diff --git a/lib/commonjs/index.js b/lib/commonjs/index.js
51+
index a72380ed2ace01b19b028bb8e6f9d29dc3affbcd..030475cff75349b2b7f820cf8a3556fb1d7bea45 100644
52+
--- a/lib/commonjs/index.js
53+
+++ b/lib/commonjs/index.js
54+
@@ -63,15 +63,7 @@ function JetProvider(props) {
55+
});
56+
after(async () => {
57+
if (_config.coverage) {
58+
- const coverage = global.__coverage__ ?? {};
59+
- const url = (props.url ?? 'ws://localhost:8090').replace('ws://', 'http://') + '/coverage';
60+
- return fetch(url, {
61+
- method: 'POST',
62+
- headers: {
63+
- 'Content-Type': 'application/json'
64+
- },
65+
- body: JSON.stringify(coverage)
66+
- });
67+
+ return client.uploadCoverage();
68+
}
69+
return Promise.resolve();
70+
});
71+
diff --git a/lib/module/index.js b/lib/module/index.js
72+
index 897b62288ae128e1ce071142fa3de136caa99239..2f8dd9edf79f6c095b4357307bdac5ea1efa00eb 100644
73+
--- a/lib/module/index.js
74+
+++ b/lib/module/index.js
75+
@@ -51,15 +51,7 @@ export function JetProvider(props) {
76+
});
77+
after(async () => {
78+
if (_config.coverage) {
79+
- const coverage = global.__coverage__ ?? {};
80+
- const url = (props.url ?? 'ws://localhost:8090').replace('ws://', 'http://') + '/coverage';
81+
- return fetch(url, {
82+
- method: 'POST',
83+
- headers: {
84+
- 'Content-Type': 'application/json'
85+
- },
86+
- body: JSON.stringify(coverage)
87+
- });
88+
+ return client.uploadCoverage();
89+
}
90+
return Promise.resolve();
91+
});
92+
diff --git a/src/index.tsx b/src/index.tsx
93+
index 1b28aca3fe817fee3e8701ac5096df6fc608bc39..17c631309f88a8017a9fd01e3420df2b4bab140e 100644
94+
--- a/src/index.tsx
95+
+++ b/src/index.tsx
96+
@@ -82,17 +82,7 @@ export function JetProvider(props: JetProviderProps): React.JSX.Element {
97+
});
98+
after(async () => {
99+
if (_config.coverage) {
100+
- const coverage = (global as any).__coverage__ ?? {};
101+
- const url =
102+
- (props.url ?? 'ws://localhost:8090').replace('ws://', 'http://') +
103+
- '/coverage';
104+
- return fetch(url, {
105+
- method: 'POST',
106+
- headers: {
107+
- 'Content-Type': 'application/json',
108+
- },
109+
- body: JSON.stringify(coverage),
110+
- });
111+
+ return client.uploadCoverage();
112+
}
113+
return Promise.resolve();
114+
});
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
diff --git a/dist/browser.bundle.mjs b/dist/browser.bundle.mjs
2+
index eb7d0bd7a2f43daa9124a2171dc708db76e8882e..b315b0e647a479038d9d05f87a5f177e41d8da2f 100644
3+
--- a/dist/browser.bundle.mjs
4+
+++ b/dist/browser.bundle.mjs
5+
@@ -11563,6 +11563,19 @@ class Client extends ClientEventEmitter {
6+
}
7+
});
8+
}
9+
+ else if (msg.action === "pull-coverage") {
10+
+ const g = typeof globalThis !== "undefined" ? globalThis : global;
11+
+ const coverage = g.__coverage__ ?? {};
12+
+ this.send({ action: "coverage-data", coverage });
13+
+ }
14+
+ else if (msg.action === "coverage-ack") {
15+
+ if (this._coverageUploadResolve) {
16+
+ this._coverageUploadResolve(msg);
17+
+ this._coverageUploadResolve = null;
18+
+ this._coverageUploadReject = null;
19+
+ this._coverageUploadPromise = null;
20+
+ }
21+
+ }
22+
else if (msg.action === "error") {
23+
if (typeof msg.message === "string") {
24+
this.emit("error", new Error(msg.message));
25+
@@ -11645,6 +11658,26 @@ class Client extends ClientEventEmitter {
26+
},
27+
};
28+
}
29+
+ uploadCoverage() {
30+
+ if (this._coverageUploadPromise) {
31+
+ return this._coverageUploadPromise;
32+
+ }
33+
+ this._coverageUploadPromise = new Promise((resolve, reject) => {
34+
+ this._coverageUploadResolve = resolve;
35+
+ this._coverageUploadReject = reject;
36+
+ this.send({ action: "coverage-ready" });
37+
+ setTimeout(() => {
38+
+ if (this._coverageUploadResolve) {
39+
+ const err = new Error("coverage upload timed out waiting for coverage-ack");
40+
+ this._coverageUploadReject(err);
41+
+ this._coverageUploadResolve = null;
42+
+ this._coverageUploadReject = null;
43+
+ this._coverageUploadPromise = null;
44+
+ }
45+
+ }, 120000);
46+
+ });
47+
+ return this._coverageUploadPromise;
48+
+ }
49+
}
50+
51+
Client.WebSocket = WebSocket;
52+
diff --git a/dist/node.bundle.cjs b/dist/node.bundle.cjs
53+
index a692e25a30f24e8299661c190ec09c3be5e5e2da..e80e7c24bf8534d42db32dd077ace1bdea50a028 100644
54+
--- a/dist/node.bundle.cjs
55+
+++ b/dist/node.bundle.cjs
56+
@@ -5900,6 +5900,19 @@ class Client extends ClientEventEmitter {
57+
}
58+
});
59+
}
60+
+ else if (msg.action === "pull-coverage") {
61+
+ const g = typeof globalThis !== "undefined" ? globalThis : global;
62+
+ const coverage = g.__coverage__ ?? {};
63+
+ this.send({ action: "coverage-data", coverage });
64+
+ }
65+
+ else if (msg.action === "coverage-ack") {
66+
+ if (this._coverageUploadResolve) {
67+
+ this._coverageUploadResolve(msg);
68+
+ this._coverageUploadResolve = null;
69+
+ this._coverageUploadReject = null;
70+
+ this._coverageUploadPromise = null;
71+
+ }
72+
+ }
73+
else if (msg.action === "error") {
74+
if (typeof msg.message === "string") {
75+
this.emit("error", new Error(msg.message));
76+
@@ -5982,6 +5995,26 @@ class Client extends ClientEventEmitter {
77+
},
78+
};
79+
}
80+
+ uploadCoverage() {
81+
+ if (this._coverageUploadPromise) {
82+
+ return this._coverageUploadPromise;
83+
+ }
84+
+ this._coverageUploadPromise = new Promise((resolve, reject) => {
85+
+ this._coverageUploadResolve = resolve;
86+
+ this._coverageUploadReject = reject;
87+
+ this.send({ action: "coverage-ready" });
88+
+ setTimeout(() => {
89+
+ if (this._coverageUploadResolve) {
90+
+ const err = new Error("coverage upload timed out waiting for coverage-ack");
91+
+ this._coverageUploadReject(err);
92+
+ this._coverageUploadResolve = null;
93+
+ this._coverageUploadReject = null;
94+
+ this._coverageUploadPromise = null;
95+
+ }
96+
+ }, 120000);
97+
+ });
98+
+ return this._coverageUploadPromise;
99+
+ }
100+
}
101+
102+
Client.WebSocket = WebSocket;
103+
diff --git a/dist/node.bundle.mjs b/dist/node.bundle.mjs
104+
index 77d3d8299505196a826971ba46e0ff14b75c3d0a..8e60e33e49fb5b9c3b4a7d6cfc0207e804f16162 100644
105+
--- a/dist/node.bundle.mjs
106+
+++ b/dist/node.bundle.mjs
107+
@@ -5879,6 +5879,19 @@ class Client extends ClientEventEmitter {
108+
}
109+
});
110+
}
111+
+ else if (msg.action === "pull-coverage") {
112+
+ const g = typeof globalThis !== "undefined" ? globalThis : global;
113+
+ const coverage = g.__coverage__ ?? {};
114+
+ this.send({ action: "coverage-data", coverage });
115+
+ }
116+
+ else if (msg.action === "coverage-ack") {
117+
+ if (this._coverageUploadResolve) {
118+
+ this._coverageUploadResolve(msg);
119+
+ this._coverageUploadResolve = null;
120+
+ this._coverageUploadReject = null;
121+
+ this._coverageUploadPromise = null;
122+
+ }
123+
+ }
124+
else if (msg.action === "error") {
125+
if (typeof msg.message === "string") {
126+
this.emit("error", new Error(msg.message));
127+
@@ -5961,6 +5974,26 @@ class Client extends ClientEventEmitter {
128+
},
129+
};
130+
}
131+
+ uploadCoverage() {
132+
+ if (this._coverageUploadPromise) {
133+
+ return this._coverageUploadPromise;
134+
+ }
135+
+ this._coverageUploadPromise = new Promise((resolve, reject) => {
136+
+ this._coverageUploadResolve = resolve;
137+
+ this._coverageUploadReject = reject;
138+
+ this.send({ action: "coverage-ready" });
139+
+ setTimeout(() => {
140+
+ if (this._coverageUploadResolve) {
141+
+ const err = new Error("coverage upload timed out waiting for coverage-ack");
142+
+ this._coverageUploadReject(err);
143+
+ this._coverageUploadResolve = null;
144+
+ this._coverageUploadReject = null;
145+
+ this._coverageUploadPromise = null;
146+
+ }
147+
+ }, 120000);
148+
+ });
149+
+ return this._coverageUploadPromise;
150+
+ }
151+
}
152+
153+
Client.WebSocket = WebSocket;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
diff --git a/dist/Server.js b/dist/Server.js
2+
index ad9debe2086ab9b96e97a69aec966da8114ad102..e3c1c964956023df876dfcac3f73000b4eaf1bba 100644
3+
--- a/dist/Server.js
4+
+++ b/dist/Server.js
5+
@@ -130,6 +130,17 @@ class Server extends ServerEventEmitter_1.ServerEventEmitter {
6+
throw new Error("Received a message from the client, but server wasn't running");
7+
}
8+
}
9+
+ else if (msg.action === "coverage-ready") {
10+
+ this.send({ action: "pull-coverage" });
11+
+ }
12+
+ else if (msg.action === "coverage-data") {
13+
+ const coverage = msg.coverage || {};
14+
+ this.emit("coverage-data", coverage);
15+
+ this.send({
16+
+ action: "coverage-ack",
17+
+ fileCount: Object.keys(coverage).length,
18+
+ });
19+
+ }
20+
else if (msg.action === "error") {
21+
if (typeof msg.message !== "string") {
22+
throw new Error("Expected 'error' action to have an error argument with a message");

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,9 @@
116116
"typescript-eslint": "^8.59.1"
117117
},
118118
"resolutions": {
119-
"@types/react": "~19.0.0"
119+
"@types/react": "~19.0.0",
120+
"mocha-remote-client@npm:^1.13.0": "patch:mocha-remote-client@npm%3A1.13.2#~/.yarn/patches/mocha-remote-client-npm-1.13.2-a2e7596aba.patch",
121+
"mocha-remote-server@npm:^1.13.0": "patch:mocha-remote-server@npm%3A1.13.2#~/.yarn/patches/mocha-remote-server-npm-1.13.2-619a29d2e3.patch"
120122
},
121123
"workspaces": {
122124
"packages": [

tests/.babelrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"instrument": true,
99
"relativePath": true,
1010
"include": ["**/packages/**"],
11-
"useInlineSourceMaps": false
11+
"useInlineSourceMaps": true
1212
}
1313
]
1414
]

tests/nyc.config.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,19 @@ module.exports = {
44
statements: 95,
55
functions: 95,
66
branches: 95,
7-
include: ['packages/*/lib/**/*.js'],
7+
include: [
8+
'packages/*/lib/**/*.{js,ts,tsx}',
9+
'packages/*/dist/**/*.js',
10+
],
811
exclude: [
912
'**/common/lib/**',
1013
'**/lib/handlers.js',
1114
'**/internal/registry/**',
1215
'packages/database/lib/DatabaseSyncTree.js',
1316
],
1417
cwd: '..',
15-
sourceMap: false,
18+
sourceMap: true,
19+
'exclude-after-remap': true,
1620
instrument: false,
1721
reporter: ['lcov', 'html', 'text-summary'],
1822
};

tests/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"firebase-tools": "^15.16.0",
5252
"jest-circus": "^30.3.0",
5353
"jest-environment-node": "^30.3.0",
54-
"jet": "0.9.0-dev.13",
54+
"jet": "patch:jet@npm%3A0.9.0-dev.13#~/.yarn/patches/jet-npm-0.9.0-dev.13-3321aeea6e.patch",
5555
"mocha": "^11.7.5",
5656
"nyc": "^18.0.0",
5757
"patch-package": "^8.0.1",

0 commit comments

Comments
 (0)