File tree Expand file tree Collapse file tree 4 files changed +34
-2
lines changed
Expand file tree Collapse file tree 4 files changed +34
-2
lines changed Original file line number Diff line number Diff line change @@ -16,8 +16,8 @@ export class EmptyResponse<A> extends Response<A> {
1616 }
1717
1818 protected override async send ( res : http . ServerResponse , req ?: Request < A > ) : Promise < void > {
19- if ( req !== undefined )
20- req . _responseHeaders . set ( "content-length" , "0" ) ;
19+ if ( ! this . headers . has ( "content-length" ) )
20+ this . headers . set ( "content-length" , "0" ) ;
2121 this . writeHead ( res , req ) ;
2222 res . end ( ) ;
2323 }
Original file line number Diff line number Diff line change 1+ import http from "node:http" ;
2+ import stream from "node:stream/promises" ;
3+ import { Request } from "../Request.js" ;
4+ import { Response } from "./Response.js" ;
5+
6+ /**
7+ * A response that streams data from a readable stream.
8+ */
9+ export class StreamedResponse < A > extends Response < A > {
10+ private readonly stream : NodeJS . ReadableStream ;
11+
12+ /**
13+ * Construct a StreamedResponse.
14+ * @param stream The readable stream to send in the response body.
15+ * @param [statusCode=200] The HTTP response status code to send.
16+ * @param [headers] The HTTP response headers to send.
17+ */
18+ public constructor ( stream : NodeJS . ReadableStream , statusCode = 200 , headers ?: HeadersInit ) {
19+ super ( statusCode , headers ) ;
20+ this . stream = stream ;
21+ if ( ! this . headers . has ( "transfer-encoding" ) )
22+ this . headers . set ( "transfer-encoding" , "chunked" ) ;
23+ }
24+
25+ protected override async send ( res : http . ServerResponse , req ?: Request < A > ) : Promise < void > {
26+ this . writeHead ( res , req ) ;
27+ await stream . pipeline ( this . stream , res ) ;
28+ }
29+ }
Original file line number Diff line number Diff line change @@ -19,6 +19,8 @@ export class TextResponse<A> extends BufferResponse<A> {
1919 public constructor ( text : string , statusCode = 200 , headers ?: HeadersInit ) {
2020 super ( statusCode , headers ) ;
2121 this . text = text ;
22+ if ( ! this . headers . has ( "content-type" ) )
23+ this . headers . set ( "content-type" , "text/plain" ) ;
2224 }
2325
2426 public override readBuffer ( ) {
Original file line number Diff line number Diff line change @@ -3,5 +3,6 @@ export * from "./BufferResponse.js";
33export * from "./EmptyResponse.js" ;
44export * from "./JsonResponse.js" ;
55export * from "./Response.js" ;
6+ export * from "./StreamedResponse.js" ;
67export * from "./TextResponse.js" ;
78export * from "./ThrowableResponse.js" ;
You can’t perform that action at this time.
0 commit comments