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.
@@ -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) return streamBody(res.body, nodeRes);
21
- else if (typeof res.body?.pipe === "function") return pipeBody(res.body, nodeRes);
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
- return pipeline(stream, nodeRes).catch(() => {});
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
@@ -184,7 +184,7 @@ function getResponseFormat(res) {
184
184
  //#region src/cli/_meta.ts
185
185
  const srvxMeta = {
186
186
  name: "srvx",
187
- version: "0.11.9",
187
+ version: "0.11.11",
188
188
  description: "Universal Server."
189
189
  };
190
190
  //#endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "srvx",
3
- "version": "0.11.10",
3
+ "version": "0.11.12",
4
4
  "description": "Universal Server.",
5
5
  "homepage": "https://srvx.h3.dev",
6
6
  "license": "MIT",