piecemeal
Version:
Effortless incrementally deliver your data
26 lines (23 loc) • 803 B
JavaScript
import { generate } from 'piecemeal';
const Encoder = new TextEncoder();
const asUTF8 = (input) => Encoder.encode(input);
const stream = (data, requestInit = {}, options = {}) => {
const { readable, writable } = new TransformStream();
const boundary = options.boundary || '-';
requestInit.headers = {
...requestInit.headers,
connection: 'keep-alive',
'content-type': `multipart/mixed;boundary="${boundary}"`,
'transfer-encoding': 'chunked',
};
const pipe = async () => {
const writer = writable.getWriter();
await generate(data, boundary, (data) => writer.write(asUTF8(data)));
return writer.releaseLock();
};
return {
response: new Response(readable, requestInit),
pipe,
};
};
export { stream };