Skip to main content
Module

x/stream_response/README.md

Fetch API Response objects made from async generators.
Go to Latest
File

Stream Response

Fetch API Response objects made from async generators. Build streaming HTML responses or SSE with JS sugar.

Example:

async function* generate() {
  for await (const row of iterAllRows()) {
    yield `${row.join(',')}\n`
  }
}

router.get('/large.csv', () => new StreamResponse(generate(), { 
  headers: [['content-type', 'text/csv']] 
}))

Creating a SSE endpoint works much the same way:

async function* sse() {
  while (true) {
    await new Promise(r => setTimeout(r, 1000));
    yield 'data: hello\n\n';
  }
}

router.get('/sse', contentType(['text/event-stream']), (req, { type }) => {
  return new StreamResponse(sse(), { headers: [['content-type', type]] })
})

*[SSE]: Server Sent Events