ai
Version:
AI SDK by Vercel - The AI Toolkit for TypeScript and JavaScript
50 lines (45 loc) • 1.14 kB
text/typescript
import { ServerResponse } from 'node:http';
/**
* Writes the content of a stream to a server response.
*/
export function writeToServerResponse({
response,
status,
statusText,
headers,
stream,
}: {
response: ServerResponse;
status?: number;
statusText?: string;
headers?: Record<string, string | number | string[]>;
stream: ReadableStream<Uint8Array>;
}): void {
const statusCode = status ?? 200;
if (statusText !== undefined) {
response.writeHead(statusCode, statusText, headers);
} else {
response.writeHead(statusCode, headers);
}
const reader = stream.getReader();
const read = async () => {
try {
while (true) {
const { done, value } = await reader.read();
if (done) break;
// Respect backpressure: if write() returns false, wait for 'drain' event
const canContinue = response.write(value);
if (!canContinue) {
await new Promise<void>(resolve => {
response.once('drain', resolve);
});
}
}
} catch (error) {
throw error;
} finally {
response.end();
}
};
read();
}