MCPcopy
hub / github.com/MiniMax-AI/cli / parseSSE

Function parseSSE

src/client/stream.ts:7–82  ·  view source on GitHub ↗
(response: Response)

Source from the content-addressed store, hash-verified

5}
6
7export async function* parseSSE(response: Response): AsyncGenerator<ServerSentEvent> {
8 const reader = response.body?.getReader();
9 if (!reader) return;
10
11 const decoder = new TextDecoder();
12 let buffer = '';
13 let event: Partial<ServerSentEvent> = {};
14
15 const processLine = (rawLine: string): ServerSentEvent | undefined => {
16 const line = rawLine.endsWith('\r') ? rawLine.slice(0, -1) : rawLine;
17
18 if (line === '') {
19 const completed = event.data !== undefined
20 ? { data: event.data, event: event.event, id: event.id }
21 : undefined;
22 event = {};
23 return completed;
24 }
25
26 if (line.startsWith(':')) return undefined;
27
28 const colonIndex = line.indexOf(':');
29 if (colonIndex === -1) return undefined;
30
31 const field = line.slice(0, colonIndex);
32 const value = line.slice(colonIndex + 1).trimStart();
33
34 switch (field) {
35 case 'data':
36 event.data = event.data !== undefined ? `${event.data}\n${value}` : value;
37 break;
38 case 'event':
39 event.event = value;
40 break;
41 case 'id':
42 event.id = value;
43 break;
44 }
45
46 return undefined;
47 };
48
49 try {
50 while (true) {
51 const { done, value } = await reader.read();
52 if (done) break;
53
54 buffer += decoder.decode(value, { stream: true });
55
56 const lines = buffer.split('\n');
57 buffer = lines.pop() || '';
58
59 for (const line of lines) {
60 const completed = processLine(line);
61 if (completed) {
62 yield completed;
63 }
64 }

Callers 6

stream.test.tsFile · 0.90
collectEventsFunction · 0.90
pipeAudioStreamFunction · 0.90
runFunction · 0.90
sendMessagesFunction · 0.90
streamSSEMethod · 0.90

Calls 1

processLineFunction · 0.85

Tested by 1

collectEventsFunction · 0.72