@react-router/express 0.0.0-experimental-ce4015162 → 0.0.0-experimental-8cee090e4

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 (3) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/index.js +14 -2
  3. package/package.json +10 -10
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
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
+ - Avoid surfacing client disconnects as adapter errors when the response stream has already been destroyed or ended.
9
+
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
+
3
14
  ## v7.15.1
4
15
 
5
16
  ### Patch Changes
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/express v0.0.0-experimental-ce4015162
2
+ * @react-router/express v0.0.0-experimental-8cee090e4
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -53,12 +53,24 @@ function createRemixRequest(req, res) {
53
53
  return new Request(url.href, init);
54
54
  }
55
55
  async function sendRemixResponse(res, nodeResponse) {
56
+ if (isResponseClosed(res)) {
57
+ await nodeResponse.body?.cancel();
58
+ return;
59
+ }
56
60
  res.statusMessage = nodeResponse.statusText;
57
61
  res.status(nodeResponse.status);
58
62
  for (let [key, value] of nodeResponse.headers.entries()) res.append(key, value);
59
63
  if (nodeResponse.headers.get("Content-Type")?.match(/text\/event-stream/i)) res.flushHeaders();
60
- if (nodeResponse.body) await writeReadableStreamToWritable(nodeResponse.body, res);
64
+ if (nodeResponse.body) try {
65
+ await writeReadableStreamToWritable(nodeResponse.body, res);
66
+ } catch (error) {
67
+ if (isResponseClosed(res)) return;
68
+ throw error;
69
+ }
61
70
  else res.end();
62
71
  }
72
+ function isResponseClosed(res) {
73
+ return res.destroyed || res.writableEnded;
74
+ }
63
75
  //#endregion
64
76
  export { createRequestHandler };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@react-router/express",
3
3
  "type": "module",
4
- "version": "0.0.0-experimental-ce4015162",
4
+ "version": "0.0.0-experimental-8cee090e4",
5
5
  "description": "Express server request handler for React Router",
6
6
  "bugs": {
7
7
  "url": "https://github.com/remix-run/react-router/issues"
@@ -37,23 +37,23 @@
37
37
  }
38
38
  },
39
39
  "dependencies": {
40
- "@react-router/node": "0.0.0-experimental-ce4015162"
40
+ "@react-router/node": "0.0.0-experimental-8cee090e4"
41
41
  },
42
42
  "devDependencies": {
43
- "@types/express": "^4.17.9",
44
- "@types/node": "^22.19.0",
43
+ "@types/express": "^4.17.25",
44
+ "@types/node": "^22.19.19",
45
45
  "@types/supertest": "^7.2.0",
46
- "express": "^4.19.2",
46
+ "express": "^4.22.2",
47
47
  "node-mocks-http": "^1.17.2",
48
- "supertest": "^6.3.3",
49
- "tsdown": "^0.21.10",
48
+ "supertest": "^7.2.2",
49
+ "tsdown": "^0.22.0",
50
50
  "typescript": "^6.0.3",
51
- "wireit": "0.14.9"
51
+ "wireit": "0.14.12"
52
52
  },
53
53
  "peerDependencies": {
54
- "express": "^4.17.1 || ^5",
54
+ "express": "^4.22.2 || ^5",
55
55
  "typescript": "^5.1.0 || ^6.0.0",
56
- "react-router": "0.0.0-experimental-ce4015162"
56
+ "react-router": "0.0.0-experimental-8cee090e4"
57
57
  },
58
58
  "peerDependenciesMeta": {
59
59
  "typescript": {