@spinajs/http 2.0.481 → 2.0.484
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/lib/cjs/config/http.d.ts +15 -7
- package/lib/cjs/config/http.d.ts.map +1 -1
- package/lib/cjs/config/http.js +28 -9
- package/lib/cjs/config/http.js.map +1 -1
- package/lib/cjs/controllers.d.ts.map +1 -1
- package/lib/cjs/controllers.js +48 -12
- package/lib/cjs/controllers.js.map +1 -1
- package/lib/cjs/cookie.d.ts +8 -0
- package/lib/cjs/cookie.d.ts.map +1 -0
- package/lib/cjs/cookie.js +40 -0
- package/lib/cjs/cookie.js.map +1 -0
- package/lib/cjs/decorators.d.ts +46 -4
- package/lib/cjs/decorators.d.ts.map +1 -1
- package/lib/cjs/decorators.js +127 -23
- package/lib/cjs/decorators.js.map +1 -1
- package/lib/cjs/error.js +3 -3
- package/lib/cjs/error.js.map +1 -1
- package/lib/cjs/file-middlewares/validation.d.ts +11 -0
- package/lib/cjs/file-middlewares/validation.d.ts.map +1 -1
- package/lib/cjs/file-middlewares/validation.js +52 -9
- package/lib/cjs/file-middlewares/validation.js.map +1 -1
- package/lib/cjs/file-middlewares/zip.d.ts.map +1 -1
- package/lib/cjs/file-middlewares/zip.js +6 -1
- package/lib/cjs/file-middlewares/zip.js.map +1 -1
- package/lib/cjs/index.d.ts +1 -0
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +1 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/interfaces.d.ts +95 -1
- package/lib/cjs/interfaces.d.ts.map +1 -1
- package/lib/cjs/interfaces.js +100 -4
- package/lib/cjs/interfaces.js.map +1 -1
- package/lib/cjs/middlewares/PerfRollup.d.ts +19 -0
- package/lib/cjs/middlewares/PerfRollup.d.ts.map +1 -0
- package/lib/cjs/middlewares/PerfRollup.js +61 -0
- package/lib/cjs/middlewares/PerfRollup.js.map +1 -0
- package/lib/cjs/middlewares/RequestId.d.ts +1 -2
- package/lib/cjs/middlewares/RequestId.d.ts.map +1 -1
- package/lib/cjs/middlewares/RequestId.js +19 -5
- package/lib/cjs/middlewares/RequestId.js.map +1 -1
- package/lib/cjs/middlewares/ResponseTime.d.ts +1 -2
- package/lib/cjs/middlewares/ResponseTime.d.ts.map +1 -1
- package/lib/cjs/middlewares/ResponseTime.js +29 -11
- package/lib/cjs/middlewares/ResponseTime.js.map +1 -1
- package/lib/cjs/response-methods/file.d.ts.map +1 -1
- package/lib/cjs/response-methods/file.js +47 -21
- package/lib/cjs/response-methods/file.js.map +1 -1
- package/lib/cjs/response-methods/index.d.ts +3 -0
- package/lib/cjs/response-methods/index.d.ts.map +1 -1
- package/lib/cjs/response-methods/index.js +3 -0
- package/lib/cjs/response-methods/index.js.map +1 -1
- package/lib/cjs/response-methods/redirect.d.ts +11 -4
- package/lib/cjs/response-methods/redirect.d.ts.map +1 -1
- package/lib/cjs/response-methods/redirect.js +14 -4
- package/lib/cjs/response-methods/redirect.js.map +1 -1
- package/lib/cjs/response-methods/xml.d.ts +17 -0
- package/lib/cjs/response-methods/xml.d.ts.map +1 -0
- package/lib/cjs/response-methods/xml.js +26 -0
- package/lib/cjs/response-methods/xml.js.map +1 -0
- package/lib/cjs/responses.d.ts +10 -0
- package/lib/cjs/responses.d.ts.map +1 -1
- package/lib/cjs/responses.js +94 -35
- package/lib/cjs/responses.js.map +1 -1
- package/lib/cjs/route-args/FromBody.d.ts.map +1 -1
- package/lib/cjs/route-args/FromBody.js +6 -1
- package/lib/cjs/route-args/FromBody.js.map +1 -1
- package/lib/cjs/route-args/FromForm.d.ts +1 -1
- package/lib/cjs/route-args/FromForm.d.ts.map +1 -1
- package/lib/cjs/route-args/FromForm.js +116 -37
- package/lib/cjs/route-args/FromForm.js.map +1 -1
- package/lib/cjs/route-args/FromXml.d.ts +17 -0
- package/lib/cjs/route-args/FromXml.d.ts.map +1 -0
- package/lib/cjs/route-args/FromXml.js +55 -0
- package/lib/cjs/route-args/FromXml.js.map +1 -0
- package/lib/cjs/route-args/RequestContext.d.ts +43 -0
- package/lib/cjs/route-args/RequestContext.d.ts.map +1 -0
- package/lib/cjs/route-args/RequestContext.js +94 -0
- package/lib/cjs/route-args/RequestContext.js.map +1 -0
- package/lib/cjs/route-args/RequestFields.d.ts +1 -1
- package/lib/cjs/route-args/RequestFields.d.ts.map +1 -1
- package/lib/cjs/route-args/RequestFields.js +1 -0
- package/lib/cjs/route-args/RequestFields.js.map +1 -1
- package/lib/cjs/route-args/RouteArgs.d.ts.map +1 -1
- package/lib/cjs/route-args/RouteArgs.js +50 -10
- package/lib/cjs/route-args/RouteArgs.js.map +1 -1
- package/lib/cjs/route-args/index.d.ts +2 -0
- package/lib/cjs/route-args/index.d.ts.map +1 -1
- package/lib/cjs/route-args/index.js +2 -0
- package/lib/cjs/route-args/index.js.map +1 -1
- package/lib/cjs/server.d.ts +36 -3
- package/lib/cjs/server.d.ts.map +1 -1
- package/lib/cjs/server.js +131 -42
- package/lib/cjs/server.js.map +1 -1
- package/lib/mjs/config/http.d.ts +15 -7
- package/lib/mjs/config/http.d.ts.map +1 -1
- package/lib/mjs/config/http.js +28 -9
- package/lib/mjs/config/http.js.map +1 -1
- package/lib/mjs/controllers.d.ts.map +1 -1
- package/lib/mjs/controllers.js +46 -10
- package/lib/mjs/controllers.js.map +1 -1
- package/lib/mjs/cookie.d.ts +8 -0
- package/lib/mjs/cookie.d.ts.map +1 -0
- package/lib/mjs/cookie.js +32 -0
- package/lib/mjs/cookie.js.map +1 -0
- package/lib/mjs/decorators.d.ts +46 -4
- package/lib/mjs/decorators.d.ts.map +1 -1
- package/lib/mjs/decorators.js +121 -24
- package/lib/mjs/decorators.js.map +1 -1
- package/lib/mjs/error.js +3 -3
- package/lib/mjs/error.js.map +1 -1
- package/lib/mjs/file-middlewares/validation.d.ts +11 -0
- package/lib/mjs/file-middlewares/validation.d.ts.map +1 -1
- package/lib/mjs/file-middlewares/validation.js +53 -10
- package/lib/mjs/file-middlewares/validation.js.map +1 -1
- package/lib/mjs/file-middlewares/zip.d.ts.map +1 -1
- package/lib/mjs/file-middlewares/zip.js +6 -1
- package/lib/mjs/file-middlewares/zip.js.map +1 -1
- package/lib/mjs/index.d.ts +1 -0
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +1 -0
- package/lib/mjs/index.js.map +1 -1
- package/lib/mjs/interfaces.d.ts +95 -1
- package/lib/mjs/interfaces.d.ts.map +1 -1
- package/lib/mjs/interfaces.js +65 -2
- package/lib/mjs/interfaces.js.map +1 -1
- package/lib/mjs/middlewares/PerfRollup.d.ts +19 -0
- package/lib/mjs/middlewares/PerfRollup.d.ts.map +1 -0
- package/lib/mjs/middlewares/PerfRollup.js +58 -0
- package/lib/mjs/middlewares/PerfRollup.js.map +1 -0
- package/lib/mjs/middlewares/RequestId.d.ts +1 -2
- package/lib/mjs/middlewares/RequestId.d.ts.map +1 -1
- package/lib/mjs/middlewares/RequestId.js +19 -5
- package/lib/mjs/middlewares/RequestId.js.map +1 -1
- package/lib/mjs/middlewares/ResponseTime.d.ts +1 -2
- package/lib/mjs/middlewares/ResponseTime.d.ts.map +1 -1
- package/lib/mjs/middlewares/ResponseTime.js +29 -11
- package/lib/mjs/middlewares/ResponseTime.js.map +1 -1
- package/lib/mjs/response-methods/file.d.ts.map +1 -1
- package/lib/mjs/response-methods/file.js +41 -15
- package/lib/mjs/response-methods/file.js.map +1 -1
- package/lib/mjs/response-methods/index.d.ts +3 -0
- package/lib/mjs/response-methods/index.d.ts.map +1 -1
- package/lib/mjs/response-methods/index.js +3 -0
- package/lib/mjs/response-methods/index.js.map +1 -1
- package/lib/mjs/response-methods/redirect.d.ts +11 -4
- package/lib/mjs/response-methods/redirect.d.ts.map +1 -1
- package/lib/mjs/response-methods/redirect.js +15 -5
- package/lib/mjs/response-methods/redirect.js.map +1 -1
- package/lib/mjs/response-methods/xml.d.ts +17 -0
- package/lib/mjs/response-methods/xml.d.ts.map +1 -0
- package/lib/mjs/response-methods/xml.js +22 -0
- package/lib/mjs/response-methods/xml.js.map +1 -0
- package/lib/mjs/responses.d.ts +10 -0
- package/lib/mjs/responses.d.ts.map +1 -1
- package/lib/mjs/responses.js +93 -35
- package/lib/mjs/responses.js.map +1 -1
- package/lib/mjs/route-args/FromBody.d.ts.map +1 -1
- package/lib/mjs/route-args/FromBody.js +6 -1
- package/lib/mjs/route-args/FromBody.js.map +1 -1
- package/lib/mjs/route-args/FromForm.d.ts +1 -1
- package/lib/mjs/route-args/FromForm.d.ts.map +1 -1
- package/lib/mjs/route-args/FromForm.js +114 -38
- package/lib/mjs/route-args/FromForm.js.map +1 -1
- package/lib/mjs/route-args/FromXml.d.ts +17 -0
- package/lib/mjs/route-args/FromXml.d.ts.map +1 -0
- package/lib/mjs/route-args/FromXml.js +52 -0
- package/lib/mjs/route-args/FromXml.js.map +1 -0
- package/lib/mjs/route-args/RequestContext.d.ts +43 -0
- package/lib/mjs/route-args/RequestContext.d.ts.map +1 -0
- package/lib/mjs/route-args/RequestContext.js +91 -0
- package/lib/mjs/route-args/RequestContext.js.map +1 -0
- package/lib/mjs/route-args/RequestFields.d.ts +1 -1
- package/lib/mjs/route-args/RequestFields.d.ts.map +1 -1
- package/lib/mjs/route-args/RequestFields.js +1 -0
- package/lib/mjs/route-args/RequestFields.js.map +1 -1
- package/lib/mjs/route-args/RouteArgs.d.ts.map +1 -1
- package/lib/mjs/route-args/RouteArgs.js +51 -11
- package/lib/mjs/route-args/RouteArgs.js.map +1 -1
- package/lib/mjs/route-args/index.d.ts +2 -0
- package/lib/mjs/route-args/index.d.ts.map +1 -1
- package/lib/mjs/route-args/index.js +2 -0
- package/lib/mjs/route-args/index.js.map +1 -1
- package/lib/mjs/server.d.ts +36 -3
- package/lib/mjs/server.d.ts.map +1 -1
- package/lib/mjs/server.js +132 -43
- package/lib/mjs/server.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +17 -12
package/lib/mjs/server.js
CHANGED
|
@@ -18,7 +18,7 @@ import { existsSync } from 'fs';
|
|
|
18
18
|
import Express from 'express';
|
|
19
19
|
import _ from 'lodash';
|
|
20
20
|
import fs from 'fs';
|
|
21
|
-
import { ServerMiddleware } from './interfaces.js';
|
|
21
|
+
import { ServerMiddleware, LifecycleState } from './interfaces.js';
|
|
22
22
|
import './transformers/index.js';
|
|
23
23
|
import './middlewares/ResponseTime.js';
|
|
24
24
|
import './middlewares/RequestId.js';
|
|
@@ -32,6 +32,9 @@ import './middlewares/Cors.js';
|
|
|
32
32
|
import './middlewares/SlowRequestWarning.js';
|
|
33
33
|
import './middlewares/ServerTiming.js';
|
|
34
34
|
let HttpServer = class HttpServer extends AsyncService {
|
|
35
|
+
get State() {
|
|
36
|
+
return this._state;
|
|
37
|
+
}
|
|
35
38
|
get Server() {
|
|
36
39
|
return this.HttpsEnabled ? this._httpsServer : this._httpServer;
|
|
37
40
|
}
|
|
@@ -41,6 +44,22 @@ let HttpServer = class HttpServer extends AsyncService {
|
|
|
41
44
|
* Track active connections for cleanup
|
|
42
45
|
*/
|
|
43
46
|
this._connections = new Set();
|
|
47
|
+
/**
|
|
48
|
+
* Lifecycle state. All three public entry points ( start / stop / dispose )
|
|
49
|
+
* transition through it so double-close, restart and idempotency are decided
|
|
50
|
+
* in one place.
|
|
51
|
+
*/
|
|
52
|
+
this._state = LifecycleState.Created;
|
|
53
|
+
/**
|
|
54
|
+
* The in-flight close promise, so concurrent / repeated stop() calls share one
|
|
55
|
+
* shutdown rather than each issuing a second Server.close().
|
|
56
|
+
*/
|
|
57
|
+
this._closePromise = null;
|
|
58
|
+
/**
|
|
59
|
+
* After-middlewares ( NotFound / ErrorHandler / ServerTiming ... ) attach to
|
|
60
|
+
* the Express app exactly once per instance. Restart must not re-stack them.
|
|
61
|
+
*/
|
|
62
|
+
this._afterAttached = false;
|
|
44
63
|
}
|
|
45
64
|
async resolve() {
|
|
46
65
|
await super.resolve();
|
|
@@ -93,6 +112,13 @@ let HttpServer = class HttpServer extends AsyncService {
|
|
|
93
112
|
this._connections.delete(socket);
|
|
94
113
|
});
|
|
95
114
|
});
|
|
115
|
+
// Persistent, log-only 'error' handler attached once per server ( same place
|
|
116
|
+
// as 'connection', so it never accumulates ). start()'s per-start .once is
|
|
117
|
+
// removed on listen success, so without this a server-level 'error' emitted
|
|
118
|
+
// AFTER listening would be unhandled and crash the process.
|
|
119
|
+
this._httpsServer.on('error', (err) => {
|
|
120
|
+
this.Log.error(`Server error: ${err?.message ?? err}`);
|
|
121
|
+
});
|
|
96
122
|
}
|
|
97
123
|
else {
|
|
98
124
|
this.Log.info(`HTTP enabled !`);
|
|
@@ -104,13 +130,22 @@ let HttpServer = class HttpServer extends AsyncService {
|
|
|
104
130
|
this._connections.delete(socket);
|
|
105
131
|
});
|
|
106
132
|
});
|
|
133
|
+
// Persistent, log-only 'error' handler attached once per server ( same place
|
|
134
|
+
// as 'connection', so it never accumulates ). start()'s per-start .once is
|
|
135
|
+
// removed on listen success, so without this a server-level 'error' emitted
|
|
136
|
+
// AFTER listening would be unhandled and crash the process.
|
|
137
|
+
this._httpServer.on('error', (err) => {
|
|
138
|
+
this.Log.error(`Server error: ${err?.message ?? err}`);
|
|
139
|
+
});
|
|
107
140
|
}
|
|
108
141
|
}
|
|
109
142
|
/**
|
|
110
143
|
* Server static files
|
|
111
144
|
*/
|
|
112
145
|
_serverStaticFiles() {
|
|
113
|
-
_.uniq(
|
|
146
|
+
// uniqBy Path — Static entries are objects, so plain _.uniq (reference
|
|
147
|
+
// equality) would never dedupe two config entries pointing at the same dir.
|
|
148
|
+
_.uniqBy(this.HttpConfig.Static, (s) => s.Path).forEach((s) => {
|
|
114
149
|
if (!existsSync(s.Path)) {
|
|
115
150
|
this.Log.warn(`static file path ${s.Path} not exists`);
|
|
116
151
|
return;
|
|
@@ -123,71 +158,119 @@ let HttpServer = class HttpServer extends AsyncService {
|
|
|
123
158
|
/**
|
|
124
159
|
* Starts http server & express
|
|
125
160
|
*/
|
|
126
|
-
start() {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
161
|
+
async start() {
|
|
162
|
+
// Idempotent: already serving -> nothing to do. This is what stops a
|
|
163
|
+
// repeated start() ( HttpServer is a DI singleton ) re-stacking middleware.
|
|
164
|
+
if (this._state === LifecycleState.Listening) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
// A start() racing a shutdown waits for the close to finish, then re-listens.
|
|
168
|
+
if (this._state === LifecycleState.Closing && this._closePromise) {
|
|
169
|
+
await this._closePromise;
|
|
170
|
+
}
|
|
171
|
+
// add all after-middlewares once per instance ( not once per start ).
|
|
172
|
+
if (!this._afterAttached) {
|
|
173
|
+
// Copy before reversing so we don't mutate the shared, already-sorted
|
|
174
|
+
// Middlewares array in place.
|
|
175
|
+
[...this.Middlewares].reverse().forEach((m) => {
|
|
130
176
|
const f = m.after();
|
|
131
177
|
if (f) {
|
|
132
178
|
this.Log.info(`Using server middleware::after() - ${m.constructor.name}`);
|
|
133
179
|
this.use(f);
|
|
134
180
|
}
|
|
135
181
|
});
|
|
136
|
-
this.
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
182
|
+
this._afterAttached = true;
|
|
183
|
+
}
|
|
184
|
+
await new Promise((res, rej) => {
|
|
185
|
+
// .once, removed on success, so repeated start()/restart never accumulates
|
|
186
|
+
// 'error' listeners on the reused server object.
|
|
187
|
+
const onError = (err) => {
|
|
188
|
+
if (err.code === 'EADDRINUSE') {
|
|
141
189
|
this.Log.error(`----- Port ${this.HttpConfig.port} is busy -----`);
|
|
142
190
|
}
|
|
143
191
|
rej(err);
|
|
192
|
+
};
|
|
193
|
+
this.Server.once('error', onError);
|
|
194
|
+
this.Server.listen(this.HttpConfig.port, () => {
|
|
195
|
+
this.Server.removeListener('error', onError);
|
|
196
|
+
this._state = LifecycleState.Listening;
|
|
197
|
+
this._emit('http.server.listening');
|
|
198
|
+
this.Log.info(`Server started at port ${this.HttpConfig.port}`);
|
|
199
|
+
res();
|
|
144
200
|
});
|
|
145
201
|
});
|
|
146
202
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
203
|
+
/**
|
|
204
|
+
* Emit a lifecycle event on the DI bus, isolating the state machine from a
|
|
205
|
+
* throwing subscriber. Container.emit is synchronous, so without this guard a
|
|
206
|
+
* listener that throws would pre-empt the caller - eg. a throwing
|
|
207
|
+
* `http.server.listening` listener runs before res() and would hang start(),
|
|
208
|
+
* and a throwing `http.server.closing` listener would escape stop().
|
|
209
|
+
*/
|
|
210
|
+
_emit(event) {
|
|
211
|
+
try {
|
|
212
|
+
this.Container.emit(event, this);
|
|
150
213
|
}
|
|
214
|
+
catch (err) {
|
|
215
|
+
this.Log.warn(`Listener for ${event} threw: ${err?.message ?? err}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
stop() {
|
|
219
|
+
return this._close();
|
|
151
220
|
}
|
|
152
221
|
/**
|
|
153
|
-
*
|
|
222
|
+
* AsyncService teardown. HttpServer holds no resources beyond the socket
|
|
223
|
+
* server and its tracked connections, both released by stop(); this awaits it.
|
|
154
224
|
*/
|
|
155
225
|
async dispose() {
|
|
156
|
-
|
|
157
|
-
|
|
226
|
+
await this.stop();
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Single shutdown path for both stop() and dispose(). Idempotent: repeated or
|
|
230
|
+
* concurrent calls share one Server.close() instead of issuing a second one
|
|
231
|
+
* ( which would reject with ERR_SERVER_NOT_RUNNING ).
|
|
232
|
+
*/
|
|
233
|
+
_close() {
|
|
234
|
+
if (this._state === LifecycleState.Closing) {
|
|
235
|
+
return this._closePromise;
|
|
158
236
|
}
|
|
159
|
-
|
|
160
|
-
//
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
237
|
+
if (this._state !== LifecycleState.Listening || !this.Server) {
|
|
238
|
+
// Created or Closed - nothing to close
|
|
239
|
+
return Promise.resolve();
|
|
240
|
+
}
|
|
241
|
+
this._state = LifecycleState.Closing;
|
|
242
|
+
this._closePromise = new Promise((resolve) => {
|
|
243
|
+
// One watchdog, unref'd so it can never hold the event loop open, and
|
|
244
|
+
// cleared on every close-callback path. The old code leaked a second,
|
|
245
|
+
// never-cleared 5s timer here.
|
|
246
|
+
const watchdog = setTimeout(() => {
|
|
247
|
+
this.Log.warn('Server shutdown grace period expired, forcing connections closed');
|
|
248
|
+
this.Server.closeAllConnections?.();
|
|
164
249
|
this._forceCloseConnections();
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
this.Server.closeAllConnections();
|
|
168
|
-
}
|
|
169
|
-
// Still resolve as we've done our best to clean up
|
|
170
|
-
resolve();
|
|
171
|
-
}, 10000);
|
|
250
|
+
}, this.ShutdownTimeout);
|
|
251
|
+
watchdog.unref();
|
|
172
252
|
this.Server.close((err) => {
|
|
173
|
-
clearTimeout(
|
|
253
|
+
clearTimeout(watchdog);
|
|
254
|
+
this._forceCloseConnections();
|
|
255
|
+
this._state = LifecycleState.Closed;
|
|
174
256
|
if (err) {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
else {
|
|
179
|
-
this.Log.info('Server closed successfully');
|
|
180
|
-
resolve();
|
|
257
|
+
// Unexpected given the guards above; log rather than reject so shutdown
|
|
258
|
+
// always settles.
|
|
259
|
+
this.Log.warn(`Error during server close: ${err.message}`);
|
|
181
260
|
}
|
|
261
|
+
this._emit('http.server.closed');
|
|
262
|
+
resolve();
|
|
182
263
|
});
|
|
183
|
-
//
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
this.Log.warn(`Forcing closure of ${this._connections.size} remaining connections`);
|
|
187
|
-
this._forceCloseConnections();
|
|
188
|
-
}
|
|
189
|
-
}, 5000);
|
|
264
|
+
// Free IDLE keep-alive sockets right away so the port releases promptly,
|
|
265
|
+
// while any in-flight request keeps the grace window above.
|
|
266
|
+
this.Server.closeIdleConnections?.();
|
|
190
267
|
});
|
|
268
|
+
// Emit AFTER _closePromise is assigned. Container.emit is fully synchronous,
|
|
269
|
+
// so a listener that re-enters stop() during this emit hits the Closing guard
|
|
270
|
+
// and must find the shared promise already in place ( emitting before the
|
|
271
|
+
// assignment would hand that re-entrant caller a null instead of a thenable ).
|
|
272
|
+
this._emit('http.server.closing');
|
|
273
|
+
return this._closePromise;
|
|
191
274
|
}
|
|
192
275
|
/**
|
|
193
276
|
* Force close all tracked connections
|
|
@@ -238,6 +321,12 @@ __decorate([
|
|
|
238
321
|
}),
|
|
239
322
|
__metadata("design:type", String)
|
|
240
323
|
], HttpServer.prototype, "AppEnv", void 0);
|
|
324
|
+
__decorate([
|
|
325
|
+
Config('http.shutdownTimeout', {
|
|
326
|
+
defaultValue: 10000,
|
|
327
|
+
}),
|
|
328
|
+
__metadata("design:type", Number)
|
|
329
|
+
], HttpServer.prototype, "ShutdownTimeout", void 0);
|
|
241
330
|
__decorate([
|
|
242
331
|
Logger('http'),
|
|
243
332
|
__metadata("design:type", Log)
|
package/lib/mjs/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,YAAY,EAAc,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACtG,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,wBAAwB,CAAC;AAEhC,OAAO,EAAkB,YAAY,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAC;AACxE,OAAO,EAAmB,YAAY,IAAI,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,OAAgD,MAAM,SAAS,CAAC;AACvE,OAAO,CAAC,MAAM,QAAQ,CAAC;AACvB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAA4B,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|