@web-widget/node 2.3.1 → 3.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/node.js +28 -10
  2. package/package.json +1 -1
package/dist/node.js CHANGED
@@ -133,6 +133,16 @@ function addDuplexToInit(init) {
133
133
  }
134
134
  return init;
135
135
  }
136
+ function isHttp2ServerResponse(serverResponse) {
137
+ if ("stream" in serverResponse && serverResponse.stream) return true;
138
+ const httpVersionMajor = serverResponse.httpVersionMajor;
139
+ return Number(httpVersionMajor) >= 2;
140
+ }
141
+ function setHttp1StatusMessage(serverResponse, statusMessage) {
142
+ if (!isHttp2ServerResponse(serverResponse) && statusMessage) {
143
+ serverResponse.statusMessage = statusMessage;
144
+ }
145
+ }
136
146
  function toMiddleware(webHandler, options) {
137
147
  const toRequest = buildToRequestWithHttp2Compat(dependencies);
138
148
  const toFetchEvent = buildToFetchEvent(dependencies);
@@ -143,13 +153,15 @@ function toMiddleware(webHandler, options) {
143
153
  const event = toFetchEvent(request);
144
154
  const webResponse = await webHandler(request, env, event);
145
155
  await toServerResponse(webResponse, serverResponse);
146
- await next();
156
+ if (!serverResponse.headersSent && !serverResponse.writableEnded) {
157
+ await next();
158
+ }
147
159
  } catch (error) {
148
160
  let responded = false;
149
161
  if (checkWritable(serverResponse) && !serverResponse.headersSent) {
150
162
  try {
151
163
  serverResponse.statusCode = 500;
152
- serverResponse.statusMessage = "Internal Server Error";
164
+ setHttp1StatusMessage(serverResponse, "Internal Server Error");
153
165
  serverResponse.setHeader("content-type", "text/plain; charset=utf-8");
154
166
  serverResponse.end(
155
167
  error instanceof Error ? error.message : "Internal Server Error"
@@ -174,14 +186,19 @@ async function toServerResponse(webResponse, serverResponse) {
174
186
  serverResponse.end();
175
187
  return;
176
188
  }
189
+ const isHttp2 = isHttp2ServerResponse(serverResponse);
190
+ const headers = toOutgoingHeaders(webResponse.headers);
191
+ const status = webResponse.status;
177
192
  if (!serverResponse.headersSent) {
178
- mergeIntoServerResponse(
179
- toOutgoingHeaders(webResponse.headers),
180
- serverResponse
181
- );
193
+ mergeIntoServerResponse(headers, serverResponse);
194
+ serverResponse.statusCode = status;
195
+ if (!isHttp2) {
196
+ setHttp1StatusMessage(serverResponse, webResponse.statusText);
197
+ }
198
+ } else if (!isHttp2) {
199
+ serverResponse.statusCode = status;
200
+ setHttp1StatusMessage(serverResponse, webResponse.statusText);
182
201
  }
183
- serverResponse.statusCode = webResponse.status;
184
- serverResponse.statusMessage = webResponse.statusText;
185
202
  if (!webResponse.body) {
186
203
  serverResponse.end();
187
204
  return;
@@ -210,6 +227,7 @@ async function writeReadableStreamToWritable(stream, writable) {
210
227
  }
211
228
  function checkWritable(serverResponse) {
212
229
  if (serverResponse.writableEnded || serverResponse.finished) return false;
230
+ if ("stream" in serverResponse && serverResponse.stream) return true;
213
231
  const socket = serverResponse.socket;
214
232
  if (!socket) return true;
215
233
  return socket.writable;
@@ -227,7 +245,7 @@ function buildToNodeHandler(dependencies2, options) {
227
245
  maybePromise.then((response) => toServerResponse(response, serverResponse)).catch(() => {
228
246
  if (checkWritable(serverResponse) && !serverResponse.headersSent) {
229
247
  serverResponse.statusCode = 500;
230
- serverResponse.statusMessage = "Internal Server Error";
248
+ setHttp1StatusMessage(serverResponse, "Internal Server Error");
231
249
  serverResponse.setHeader(
232
250
  "content-type",
233
251
  "text/plain; charset=utf-8"
@@ -239,7 +257,7 @@ function buildToNodeHandler(dependencies2, options) {
239
257
  toServerResponse(maybePromise, serverResponse).catch(() => {
240
258
  if (checkWritable(serverResponse) && !serverResponse.headersSent) {
241
259
  serverResponse.statusCode = 500;
242
- serverResponse.statusMessage = "Internal Server Error";
260
+ setHttp1StatusMessage(serverResponse, "Internal Server Error");
243
261
  serverResponse.setHeader(
244
262
  "content-type",
245
263
  "text/plain; charset=utf-8"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@web-widget/node",
3
3
  "description": "Node.js adapter",
4
- "version": "2.3.1",
4
+ "version": "3.0.0-beta.0",
5
5
  "homepage": "https://github.com/web-widget/web-widget#readme",
6
6
  "repository": {
7
7
  "type": "git",