MCPcopy
hub / github.com/upstash/context7 / handleGenerateResponse

Function handleGenerateResponse

packages/cli/src/utils/api.ts:186–265  ·  view source on GitHub ↗
(
  response: Response,
  libraryName: string,
  onEvent?: (event: GenerateStreamEvent) => void
)

Source from the content-addressed store, hash-verified

184}
185
186async function handleGenerateResponse(
187 response: Response,
188 libraryName: string,
189 onEvent?: (event: GenerateStreamEvent) => void
190): Promise<GenerateSkillResponse> {
191 if (!response.ok) {
192 const errorData = await response.json().catch(() => ({}));
193 return {
194 content: "",
195 libraryName,
196 error: (errorData as { message?: string }).message || `HTTP error ${response.status}`,
197 };
198 }
199
200 const reader = response.body?.getReader();
201 if (!reader) {
202 return { content: "", libraryName, error: "No response body" };
203 }
204
205 const decoder = new TextDecoder();
206 let content = "";
207 let finalLibraryName = libraryName;
208 let error: string | undefined;
209 let buffer = ""; // Buffer for incomplete lines across chunks
210
211 while (true) {
212 const { done, value } = await reader.read();
213 if (done) break;
214
215 const chunk = decoder.decode(value, { stream: true });
216 buffer += chunk;
217
218 // Split by newline but keep track of incomplete lines
219 const lines = buffer.split("\n");
220 // Keep the last element (may be incomplete) in the buffer
221 buffer = lines.pop() || "";
222
223 for (const line of lines) {
224 const trimmedLine = line.trim();
225 if (!trimmedLine) continue;
226
227 try {
228 const data = JSON.parse(trimmedLine) as GenerateStreamEvent;
229
230 if (onEvent) {
231 onEvent(data);
232 }
233
234 if (data.type === "complete") {
235 content = data.content || "";
236 finalLibraryName = data.libraryName || libraryName;
237 } else if (data.type === "error") {
238 error = data.message;
239 }
240 } catch {
241 // Ignore malformed JSON lines
242 }
243 }

Callers 1

generateSkillStructuredFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected