@nestjs/core 11.1.26 → 11.1.27

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestjs/core",
3
- "version": "11.1.26",
3
+ "version": "11.1.27",
4
4
  "description": "Nest - modern, fast, powerful node.js web framework (@core)",
5
5
  "author": "Kamil Mysliwiec",
6
6
  "license": "MIT",
@@ -28,7 +28,7 @@
28
28
  "uid": "2.0.2"
29
29
  },
30
30
  "devDependencies": {
31
- "@nestjs/common": "11.1.26"
31
+ "@nestjs/common": "11.1.27"
32
32
  },
33
33
  "peerDependencies": {
34
34
  "@nestjs/common": "^11.0.0",
@@ -49,5 +49,5 @@
49
49
  "optional": true
50
50
  }
51
51
  },
52
- "gitHead": "9ff83d540f50e96eb0093b4eb0dd96191aa6a285"
52
+ "gitHead": "660a1249e32e7701cdd7e5ccb20b7f695e721bce"
53
53
  }
@@ -59,19 +59,28 @@ class RouterResponseController {
59
59
  200;
60
60
  return new Promise((resolve, reject) => {
61
61
  let settled = false;
62
+ let closeRequested = false;
62
63
  let subscription;
63
64
  const disconnectSource = request.socket ?? response;
64
65
  const cleanup = () => disconnectSource.removeListener('close', onClose);
66
+ const endStream = () => {
67
+ if (!stream.writableEnded) {
68
+ stream.end();
69
+ }
70
+ };
65
71
  const onClose = () => {
66
- if (settled) {
72
+ if (settled || closeRequested) {
73
+ return;
74
+ }
75
+ closeRequested = true;
76
+ if (!subscription) {
77
+ cleanup();
67
78
  return;
68
79
  }
69
80
  settled = true;
70
81
  cleanup();
71
82
  subscription?.unsubscribe();
72
- if (!stream.writableEnded) {
73
- stream.end();
74
- }
83
+ endStream();
75
84
  response.end();
76
85
  resolve();
77
86
  };
@@ -82,6 +91,17 @@ class RouterResponseController {
82
91
  return;
83
92
  }
84
93
  this.assertObservable(observableResult);
94
+ if (closeRequested) {
95
+ const cleanupSubscription = observableResult.subscribe({
96
+ error: () => undefined,
97
+ });
98
+ cleanupSubscription.unsubscribe();
99
+ settled = true;
100
+ endStream();
101
+ response.end();
102
+ resolve();
103
+ return;
104
+ }
85
105
  stream.pipe(response, {
86
106
  additionalHeaders: options?.additionalHeaders,
87
107
  statusCode,
@@ -111,9 +131,7 @@ class RouterResponseController {
111
131
  }
112
132
  settled = true;
113
133
  cleanup();
114
- if (!stream.writableEnded) {
115
- stream.end();
116
- }
134
+ endStream();
117
135
  reject(err);
118
136
  },
119
137
  complete: () => {
@@ -122,9 +140,7 @@ class RouterResponseController {
122
140
  }
123
141
  settled = true;
124
142
  cleanup();
125
- if (!stream.writableEnded) {
126
- stream.end();
127
- }
143
+ endStream();
128
144
  resolve();
129
145
  },
130
146
  });
@@ -143,11 +159,16 @@ class RouterResponseController {
143
159
  if (settled) {
144
160
  return;
145
161
  }
162
+ if (closeRequested) {
163
+ settled = true;
164
+ endStream();
165
+ response.end();
166
+ resolve();
167
+ return;
168
+ }
146
169
  settled = true;
147
170
  cleanup();
148
- if (!stream.writableEnded) {
149
- stream.end();
150
- }
171
+ endStream();
151
172
  reject(err);
152
173
  });
153
174
  });