Skip to content

Commit e1a4f98

Browse files
committed
Update typings and docs for http2
1 parent ae0b215 commit e1a4f98

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed

packages/node-fetch-server/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
This is the changelog for [`node-fetch-server`](https://github.com/mjackson/remix-the-web/tree/main/packages/node-fetch-server). It follows [semantic versioning](https://semver.org/).
44

5+
## HEAD
6+
7+
- Update typings and docs for http2 support
8+
59
## v0.6.0 (2025-02-06)
610

711
- Add http/2 support

packages/node-fetch-server/src/lib/request-listener.ts

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type * as http from 'node:http';
2+
import type * as http2 from 'node:http2';
23

3-
import { type ClientAddress, type ErrorHandler, type FetchHandler } from './fetch-handler.ts';
4+
import type { ClientAddress, ErrorHandler, FetchHandler } from './fetch-handler.ts';
45
import { readStream } from './read-stream.ts';
56

67
export interface RequestListenerOptions {
@@ -30,9 +31,12 @@ export interface RequestListenerOptions {
3031
}
3132

3233
/**
33-
* Wraps a fetch handler in a Node.js `http.RequestListener` that can be used with
34-
* [`http.createServer()`](https://nodejs.org/api/http.html#httpcreateserveroptions-requestlistener) or
35-
* [`https.createServer()`](https://nodejs.org/api/https.html#httpscreateserveroptions-requestlistener).
34+
* Wraps a fetch handler in a Node.js request listener that can be used with:
35+
*
36+
* - [`http.createServer()`](https://nodejs.org/api/http.html#httpcreateserveroptions-requestlistener)
37+
* - [`https.createServer()`](https://nodejs.org/api/https.html#httpscreateserveroptions-requestlistener)
38+
* - [`http2.createServer()`](https://nodejs.org/api/http2.html#http2createserveroptions-onrequesthandler)
39+
* - [`http2.createSecureServer()`](https://nodejs.org/api/http2.html#http2createsecureserveroptions-onrequesthandler)
3640
*
3741
* Example:
3842
*
@@ -109,18 +113,19 @@ function internalServerError(): Response {
109113
export type RequestOptions = Omit<RequestListenerOptions, 'onError'>;
110114

111115
/**
112-
* Creates a [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) object from a Node.js
113-
* [`http.IncomingMessage`](https://nodejs.org/api/http.html#class-httpincomingmessage) and
114-
* [`http.ServerResponse`](https://nodejs.org/api/http.html#class-httpserverresponse) pair.
116+
* Creates a [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) object from
117+
*
118+
* - a [`http.IncomingMessage`](https://nodejs.org/api/http.html#class-httpincomingmessage)/[`http.ServerResponse`](https://nodejs.org/api/http.html#class-httpserverresponse) pair
119+
* - a [`http2.Http2ServerRequest`](https://nodejs.org/api/http2.html#class-http2http2serverrequest)/[`http2.Http2ServerResponse`](https://nodejs.org/api/http2.html#class-http2http2serverresponse) pair
115120
*
116121
* @param req The incoming request object.
117122
* @param res The server response object.
118123
* @param options
119124
* @returns A request object.
120125
*/
121126
export function createRequest(
122-
req: http.IncomingMessage,
123-
res: http.ServerResponse,
127+
req: http.IncomingMessage | http2.Http2ServerRequest,
128+
res: http.ServerResponse | http2.Http2ServerResponse,
124129
options?: RequestOptions,
125130
): Request {
126131
let controller = new AbortController();
@@ -161,32 +166,36 @@ export function createRequest(
161166
}
162167

163168
/**
164-
* Creates a [`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers) object from the headers
165-
* in a Node.js [`http.IncomingMessage`](https://nodejs.org/api/http.html#class-httpincomingmessage).
169+
* Creates a [`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers) object from the headers in a Node.js
170+
* [`http.IncomingMessage`](https://nodejs.org/api/http.html#class-httpincomingmessage)/[`http2.Http2ServerRequest`](https://nodejs.org/api/http2.html#class-http2http2serverrequest).
166171
*
167172
* @param req The incoming request object.
168173
* @returns A headers object.
169174
*/
170-
export function createHeaders(req: http.IncomingMessage): Headers {
175+
export function createHeaders(req: http.IncomingMessage | http2.Http2ServerRequest): Headers {
171176
let headers = new Headers();
172177

173178
let rawHeaders = req.rawHeaders;
174179
for (let i = 0; i < rawHeaders.length; i += 2) {
175-
if (rawHeaders[i].startsWith(":")) continue;
180+
if (rawHeaders[i].startsWith(':')) continue;
176181
headers.append(rawHeaders[i], rawHeaders[i + 1]);
177182
}
178183

179184
return headers;
180185
}
181186

182187
/**
183-
* Sends a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) to the client using the
184-
* Node.js [`http.ServerResponse`](https://nodejs.org/api/http.html#class-httpserverresponse) object.
188+
* Sends a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) to the client using a Node.js
189+
* [`http.ServerResponse`](https://nodejs.org/api/http.html#class-httpserverresponse)/[`http2.Http2ServerResponse`](https://nodejs.org/api/http2.html#class-http2http2serverresponse)
190+
* object.
185191
*
186192
* @param res The server response object.
187193
* @param response The response to send.
188194
*/
189-
export async function sendResponse(res: http.ServerResponse, response: Response): Promise<void> {
195+
export async function sendResponse(
196+
res: http.ServerResponse | http2.Http2ServerResponse,
197+
response: Response,
198+
): Promise<void> {
190199
// Iterate over response.headers so we are sure to send multiple Set-Cookie headers correctly.
191200
// These would incorrectly be merged into a single header if we tried to use
192201
// `Object.fromEntries(response.headers.entries())`.
@@ -207,6 +216,7 @@ export async function sendResponse(res: http.ServerResponse, response: Response)
207216

208217
if (response.body != null && res.req.method !== 'HEAD') {
209218
for await (let chunk of readStream(response.body)) {
219+
// @ts-expect-error - Node typings for http2 require a 2nd parameter to write but it's optional
210220
res.write(chunk);
211221
}
212222
}

0 commit comments

Comments
 (0)