jlalmes / trpc-openapi

OpenAPI support for tRPC 🧩
https://www.npmjs.com/package/trpc-openapi
MIT License
2.18k stars 147 forks source link

Add support for streaming #430

Open arcticfly opened 9 months ago

arcticfly commented 9 months ago

Fixes #429

tRPC is really awesome, but it currently doesn't support or allow server-sent events. This small PR doesn't affect behavior for existing supported requests, but does allow a route to return a readable stream, whose events will be piped to the client.

With this change, routes will be able to return streams and pipe events through like so:

const responseStream = new TransformStream();
const writer = responseStream.writable.getWriter();
const encoder = new TextEncoder();

void writer.write(encoder.encode(JSON.stringify(chunk1)));

// Send one chunk every second for 5 seconds
let count = 0;
const interval = setInterval(() => {
  void writer.write(encoder.encode(JSON.stringify(chunk2)));
  if (count++ === 5) {
    void writer.close();
    clearInterval(interval);
  }
}, 1000);

return responseStream.readable;