MCPcopy Create free account
hub / github.com/bigskysoftware/_hyperscript / mockSSE

Function mockSSE

test/ext/eventsource.js:7–41  ·  view source on GitHub ↗

* Helper: mock fetch in-browser to return a SSE stream. * `messages` is an array of {event?, data, id?, delay?} objects.

(page, url, messages, options)

Source from the content-addressed store, hash-verified

5 * `messages` is an array of {event?, data, id?, delay?} objects.
6 */
7async function mockSSE(page, url, messages, options) {
8 await page.evaluate(({ url, messages, options }) => {
9 var origFetch = window.__origFetch || window.fetch;
10 window.__origFetch = origFetch;
11 window.fetch = function (input, init) {
12 var reqUrl = typeof input === 'string' ? input : input.url;
13 if (!reqUrl.includes(url)) return origFetch.call(this, input, init);
14
15 // Capture request details for assertions
16 window.__lastSSERequest = { method: init?.method || 'GET', headers: init?.headers || {} };
17
18 var stream = new ReadableStream({
19 async start(controller) {
20 var encoder = new TextEncoder();
21 for (var i = 0; i < messages.length; i++) {
22 var msg = messages[i];
23 if (msg.delay) await new Promise(r => setTimeout(r, msg.delay));
24 var frame = '';
25 if (msg.event) frame += 'event: ' + msg.event + '\n';
26 if (msg.id) frame += 'id: ' + msg.id + '\n';
27 if (msg.retry) frame += 'retry: ' + msg.retry + '\n';
28 frame += 'data: ' + (msg.data || '') + '\n\n';
29 controller.enqueue(encoder.encode(frame));
30 }
31 if (!options?.keepOpen) controller.close();
32 }
33 });
34
35 return Promise.resolve(new Response(stream, {
36 status: 200,
37 headers: { 'Content-Type': 'text/event-stream' }
38 }));
39 };
40 }, { url, messages, options });
41}
42
43/** Restore original fetch */
44async function restoreFetch(page) {

Callers 1

eventsource.jsFile · 0.85

Calls 2

evaluateMethod · 0.45
resolveMethod · 0.45

Tested by

no test coverage detected