srvx 0.11.10 → 0.11.12
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/adapters/node.mjs +36 -7
- package/dist/cli.mjs +1 -1
- package/package.json +1 -1
package/dist/adapters/node.mjs
CHANGED
|
@@ -15,12 +15,14 @@ async function sendNodeResponse(nodeRes, webRes) {
|
|
|
15
15
|
}
|
|
16
16
|
if (webRes._toNodeResponse) {
|
|
17
17
|
const res = webRes._toNodeResponse();
|
|
18
|
-
writeHead(nodeRes, res.status, res.statusText, res.headers);
|
|
19
18
|
if (res.body) {
|
|
20
|
-
if (res.body instanceof ReadableStream)
|
|
21
|
-
|
|
19
|
+
if (res.body instanceof ReadableStream) {
|
|
20
|
+
writeHead(nodeRes, res.status, res.statusText, res.headers);
|
|
21
|
+
return streamBody(res.body, nodeRes);
|
|
22
|
+
} else if (typeof res.body?.pipe === "function") return pipeBody(res.body, nodeRes, res.status, res.statusText, res.headers);
|
|
23
|
+
writeHead(nodeRes, res.status, res.statusText, res.headers);
|
|
22
24
|
nodeRes.write(res.body);
|
|
23
|
-
}
|
|
25
|
+
} else writeHead(nodeRes, res.status, res.statusText, res.headers);
|
|
24
26
|
return endNodeResponse(nodeRes);
|
|
25
27
|
}
|
|
26
28
|
const rawHeaders = [...webRes.headers];
|
|
@@ -35,12 +37,39 @@ function writeHead(nodeRes, status, statusText, rawHeaders) {
|
|
|
35
37
|
function endNodeResponse(nodeRes) {
|
|
36
38
|
return new Promise((resolve) => nodeRes.end(resolve));
|
|
37
39
|
}
|
|
38
|
-
function pipeBody(stream, nodeRes) {
|
|
40
|
+
function pipeBody(stream, nodeRes, status, statusText, headers) {
|
|
39
41
|
if (nodeRes.destroyed) {
|
|
40
|
-
stream.destroy();
|
|
42
|
+
stream.destroy?.();
|
|
41
43
|
return;
|
|
42
44
|
}
|
|
43
|
-
|
|
45
|
+
if (typeof stream.on !== "function" || typeof stream.destroy !== "function") {
|
|
46
|
+
writeHead(nodeRes, status, statusText, headers);
|
|
47
|
+
stream.pipe(nodeRes);
|
|
48
|
+
return new Promise((resolve) => nodeRes.on("close", resolve));
|
|
49
|
+
}
|
|
50
|
+
if (stream.destroyed) {
|
|
51
|
+
writeHead(nodeRes, 500, "Internal Server Error", []);
|
|
52
|
+
return endNodeResponse(nodeRes);
|
|
53
|
+
}
|
|
54
|
+
return new Promise((resolve) => {
|
|
55
|
+
function onEarlyError() {
|
|
56
|
+
stream.off("readable", onReadable);
|
|
57
|
+
stream.destroy();
|
|
58
|
+
writeHead(nodeRes, 500, "Internal Server Error", []);
|
|
59
|
+
endNodeResponse(nodeRes).then(resolve);
|
|
60
|
+
}
|
|
61
|
+
function onReadable() {
|
|
62
|
+
stream.off("error", onEarlyError);
|
|
63
|
+
if (nodeRes.destroyed) {
|
|
64
|
+
stream.destroy();
|
|
65
|
+
return resolve();
|
|
66
|
+
}
|
|
67
|
+
writeHead(nodeRes, status, statusText, headers);
|
|
68
|
+
pipeline(stream, nodeRes).catch(() => {}).then(() => resolve());
|
|
69
|
+
}
|
|
70
|
+
stream.once("error", onEarlyError);
|
|
71
|
+
stream.once("readable", onReadable);
|
|
72
|
+
});
|
|
44
73
|
}
|
|
45
74
|
function streamBody(stream, nodeRes) {
|
|
46
75
|
if (nodeRes.destroyed) {
|
package/dist/cli.mjs
CHANGED