@react-router/express 7.15.0 → 7.16.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/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # `@react-router/express`
2
2
 
3
+ ## v7.16.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Ignore writes after Express responses close ([#15107](https://github.com/remix-run/react-router/pull/15107))
8
+
9
+ - Avoid surfacing client disconnects as adapter errors when the response stream has already been destroyed or ended.
10
+ - Updated dependencies:
11
+ - [`react-router@7.16.0`](https://github.com/remix-run/react-router/releases/tag/react-router@7.16.0)
12
+ - [`@react-router/node@7.16.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@7.16.0)
13
+
14
+ ## v7.15.1
15
+
16
+ ### Patch Changes
17
+
18
+ - Updated dependencies:
19
+ - [`react-router@7.15.1`](https://github.com/remix-run/react-router/releases/tag/react-router@7.15.1)
20
+ - [`@react-router/node@7.15.1`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@7.15.1)
21
+
3
22
  ## v7.15.0
4
23
 
5
24
  ### Patch Changes
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/express v7.15.0
2
+ * @react-router/express v7.16.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -92,6 +92,10 @@ function createRemixRequest(req, res) {
92
92
  return new Request(url.href, init);
93
93
  }
94
94
  async function sendRemixResponse(res, nodeResponse) {
95
+ if (isResponseClosed(res)) {
96
+ await nodeResponse.body?.cancel();
97
+ return;
98
+ }
95
99
  res.statusMessage = nodeResponse.statusText;
96
100
  res.status(nodeResponse.status);
97
101
  for (let [key, value] of nodeResponse.headers.entries()) {
@@ -101,11 +105,21 @@ async function sendRemixResponse(res, nodeResponse) {
101
105
  res.flushHeaders();
102
106
  }
103
107
  if (nodeResponse.body) {
104
- await (0, import_node.writeReadableStreamToWritable)(nodeResponse.body, res);
108
+ try {
109
+ await (0, import_node.writeReadableStreamToWritable)(nodeResponse.body, res);
110
+ } catch (error) {
111
+ if (isResponseClosed(res)) {
112
+ return;
113
+ }
114
+ throw error;
115
+ }
105
116
  } else {
106
117
  res.end();
107
118
  }
108
119
  }
120
+ function isResponseClosed(res) {
121
+ return res.destroyed || res.writableEnded;
122
+ }
109
123
  // Annotate the CommonJS export names for ESM import in node:
110
124
  0 && (module.exports = {
111
125
  createRequestHandler
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/express v7.15.0
2
+ * @react-router/express v7.16.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -70,6 +70,10 @@ function createRemixRequest(req, res) {
70
70
  return new Request(url.href, init);
71
71
  }
72
72
  async function sendRemixResponse(res, nodeResponse) {
73
+ if (isResponseClosed(res)) {
74
+ await nodeResponse.body?.cancel();
75
+ return;
76
+ }
73
77
  res.statusMessage = nodeResponse.statusText;
74
78
  res.status(nodeResponse.status);
75
79
  for (let [key, value] of nodeResponse.headers.entries()) {
@@ -79,11 +83,21 @@ async function sendRemixResponse(res, nodeResponse) {
79
83
  res.flushHeaders();
80
84
  }
81
85
  if (nodeResponse.body) {
82
- await writeReadableStreamToWritable(nodeResponse.body, res);
86
+ try {
87
+ await writeReadableStreamToWritable(nodeResponse.body, res);
88
+ } catch (error) {
89
+ if (isResponseClosed(res)) {
90
+ return;
91
+ }
92
+ throw error;
93
+ }
83
94
  } else {
84
95
  res.end();
85
96
  }
86
97
  }
98
+ function isResponseClosed(res) {
99
+ return res.destroyed || res.writableEnded;
100
+ }
87
101
  export {
88
102
  createRequestHandler
89
103
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-router/express",
3
- "version": "7.15.0",
3
+ "version": "7.16.0",
4
4
  "description": "Express server request handler for React Router",
5
5
  "bugs": {
6
6
  "url": "https://github.com/remix-run/react-router/issues"
@@ -46,7 +46,7 @@
46
46
  }
47
47
  },
48
48
  "dependencies": {
49
- "@react-router/node": "7.15.0"
49
+ "@react-router/node": "7.16.0"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@types/express": "^4.17.9",
@@ -62,7 +62,7 @@
62
62
  "peerDependencies": {
63
63
  "express": "^4.17.1 || ^5",
64
64
  "typescript": "^5.1.0 || ^6.0.0",
65
- "react-router": "7.15.0"
65
+ "react-router": "7.16.0"
66
66
  },
67
67
  "peerDependenciesMeta": {
68
68
  "typescript": {