@react-router/node 8.3.1 → 8.4.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,14 @@
1
1
  # `@react-router/node`
2
2
 
3
+ ## v8.4.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Fix a memory leak in `writeReadableStreamToWritable` and `writeAsyncIterableToWritable` that retained memory for the lifetime of a long-running stream ([#15500](https://github.com/remix-run/react-router/pull/15500))
8
+ - Preserve error handling when a producer closes the destination while reading the next chunk
9
+ - Updated dependencies:
10
+ - [`react-router@8.4.0`](https://github.com/remix-run/react-router/releases/tag/react-router@8.4.0)
11
+
3
12
  ## v8.3.1
4
13
 
5
14
  ### Patch Changes
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/node v8.3.1
2
+ * @react-router/node v8.4.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -145,11 +145,7 @@ function monitorWritableError(writable) {
145
145
  let settled = false;
146
146
  let writableErrorEmitted = false;
147
147
  let writableError;
148
- let rejectWritableError;
149
- let writableErrorPromise = new Promise((_, reject) => {
150
- rejectWritableError = reject;
151
- });
152
- writableErrorPromise.catch(() => {});
148
+ let pendingRejections = /* @__PURE__ */ new Set();
153
149
  function cleanup() {
154
150
  if (!writableStartedDestroyed && writable.destroyed && writable.errored && !writableErrorEmitted) return;
155
151
  writable.off("error", onError);
@@ -160,7 +156,9 @@ function monitorWritableError(writable) {
160
156
  settled = true;
161
157
  writableError = error;
162
158
  cleanup();
163
- rejectWritableError(error);
159
+ let rejections = [...pendingRejections];
160
+ pendingRejections.clear();
161
+ for (let rejectPending of rejections) rejectPending(error);
164
162
  }
165
163
  function onError(error) {
166
164
  writableErrorEmitted = true;
@@ -174,7 +172,16 @@ function monitorWritableError(writable) {
174
172
  return {
175
173
  cleanup,
176
174
  race(promise) {
177
- return Promise.race([promise, writableErrorPromise]);
175
+ if (writableError) return Promise.race([promise, Promise.reject(writableError)]);
176
+ let rejectPending;
177
+ let pendingPromise = new Promise((_, reject) => {
178
+ rejectPending = reject;
179
+ });
180
+ pendingPromise.catch(() => {});
181
+ pendingRejections.add(rejectPending);
182
+ return Promise.race([promise, pendingPromise]).finally(() => {
183
+ pendingRejections.delete(rejectPending);
184
+ });
178
185
  },
179
186
  throwIfClosed() {
180
187
  if (writableError) throw writableError;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@react-router/node",
3
3
  "type": "module",
4
- "version": "8.3.1",
4
+ "version": "8.4.0",
5
5
  "description": "Node.js platform abstractions for React Router",
6
6
  "bugs": {
7
7
  "url": "https://github.com/remix-run/react-router/issues"
@@ -45,11 +45,11 @@
45
45
  "tsdown": "^0.22.0",
46
46
  "typescript": "^6.0.3",
47
47
  "wireit": "0.14.12",
48
- "react-router": "8.3.1"
48
+ "react-router": "8.4.0"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "typescript": "^5.1.0 || ^6.0.0 || ^7.0.0",
52
- "react-router": "8.3.1"
52
+ "react-router": "8.4.0"
53
53
  },
54
54
  "peerDependenciesMeta": {
55
55
  "typescript": {