Appends a response header, preserving any existing values for the same
name rather than replacing them (unlike IResponse.header,
which overwrites). This is the correct way to emit multiple headers of the
same name — most notably several Set-Cookie headers (e.g. an access
cookie plus a refresh cookie, or deleting several cookies at once).
Header name
Header value to add
This response, for chaining
Sets a response header.
Header name
Header value
This response, for chaining
Terminal HTML response — mirrors the kernel builder's html(), so a test
asserting on the double cannot pass where the real builder would fail.
The HTML document text
The handler result brand
Sends a JSON response.
The body type
The handler result
Sends a redirect response.
Redirect target
Optional_status: numberThe handler result
Sends a raw byte response.
Optional_body: Uint8Array<ArrayBufferLike>The handler result
Sets several headers, one MockResponse.header call per entry.
Header names and values
This response, for chaining
Returns a snapshot of the current response state (status, headers, body).
Enables middleware to inspect the response after next() returns —
required for transparent response caching.
The returned object is a READ view, not a defensive copy: headers is the
live Headers instance backing the response. Treat it as read-only —
mutating it mutates the response. (No copy is taken deliberately: cloning a
Headers collapses repeated Set-Cookie values into one comma-joined
header, which would corrupt multi-cookie responses.)
Returns a discriminated union keyed on streaming: when false,
body is Uint8Array | string | null (buffered); when true,
body is a ReadableStream<Uint8Array> (live stream). Middleware that
reads the body (e.g. cache middleware) must check streaming first to
avoid draining a live stream.
The status code, headers, and either a buffered body or a live stream
Sets the response status code.
HTTP status code
This response, for chaining
Sends a streaming response body.
Accepts a web-standard ReadableStream so that a handler can flush bytes progressively over a long-lived connection instead of buffering a whole body before send. This is the shared foundation for Server-Sent Events (Milestone 43), React SSR streaming (Milestone 44), large file downloads (storage-plugin, Milestone 28), and export / report responses.
Because the runtime maps the response to a web-standard
new Response(streamBody, { status, headers }), streaming is free on every
platform (Node via Hono, Deno, Bun, Cloudflare Workers) with no buffer-then-send.
A ReadableStream of Uint8Array chunks
The handler result
In-memory
IResponsedouble withsnapshot()andendedgetter.Implements the full
IResponsesurface so that middleware tests can inspectsnapshot()(status, headers, body) and assert short-circuit behavior via theendedgetter. Chaining methods (status,header,appendHeader) returnthis; terminal methods set#ended = trueand return aHandlerResultbrand.Since
0.1.0