UNPKG

@sveltejs/kit

Version:

SvelteKit is the fastest way to build Svelte apps

43 lines (36 loc) 912 B
/** * Yields parsed JSON objects from a ReadableStream of newline-delimited JSON. * Each yielded value is the raw `JSON.parse`'d object — callers handle deserialization. * @param {ReadableStreamDefaultReader<Uint8Array>} reader */ export async function* read_ndjson(reader) { let done = false; let buffer = ''; const decoder = new TextDecoder(); while (true) { let split = buffer.indexOf('\n'); while (split !== -1) { const line = buffer.slice(0, split).trim(); buffer = buffer.slice(split + 1); if (line) { yield JSON.parse(line); } split = buffer.indexOf('\n'); } if (done) { const line = buffer.trim(); if (line) { yield JSON.parse(line); } return; } const chunk = await reader.read(); done = chunk.done; if (chunk.value) { buffer += decoder.decode(chunk.value, { stream: true }); } if (done) { buffer += decoder.decode(); } } }