@web-widget/node 2.3.0 → 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.
- package/dist/node.js +28 -10
- 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
|
-
|
|
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
|
|
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
|
-
|
|
180
|
-
|
|
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
|
|
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
|
|
260
|
+
setHttp1StatusMessage(serverResponse, "Internal Server Error");
|
|
243
261
|
serverResponse.setHeader(
|
|
244
262
|
"content-type",
|
|
245
263
|
"text/plain; charset=utf-8"
|