@spinajs/http 2.0.475 → 2.0.477
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/cache.d.ts +9 -0
- package/lib/cjs/cache.d.ts.map +1 -1
- package/lib/cjs/cache.js +55 -0
- package/lib/cjs/cache.js.map +1 -1
- package/lib/cjs/controllers.d.ts +33 -3
- package/lib/cjs/controllers.d.ts.map +1 -1
- package/lib/cjs/controllers.js +97 -70
- package/lib/cjs/controllers.js.map +1 -1
- package/lib/cjs/decorators.d.ts.map +1 -1
- package/lib/cjs/decorators.js +55 -0
- package/lib/cjs/decorators.js.map +1 -1
- package/lib/cjs/index.d.ts +7 -0
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +7 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/interfaces.d.ts +27 -1
- package/lib/cjs/interfaces.d.ts.map +1 -1
- package/lib/cjs/interfaces.js.map +1 -1
- package/lib/cjs/middlewares/AccessLog.d.ts +23 -0
- package/lib/cjs/middlewares/AccessLog.d.ts.map +1 -0
- package/lib/cjs/middlewares/AccessLog.js +73 -0
- package/lib/cjs/middlewares/AccessLog.js.map +1 -0
- package/lib/cjs/middlewares/Compression.d.ts +21 -0
- package/lib/cjs/middlewares/Compression.d.ts.map +1 -0
- package/lib/cjs/middlewares/Compression.js +62 -0
- package/lib/cjs/middlewares/Compression.js.map +1 -0
- package/lib/cjs/middlewares/Cors.d.ts +25 -0
- package/lib/cjs/middlewares/Cors.d.ts.map +1 -0
- package/lib/cjs/middlewares/Cors.js +81 -0
- package/lib/cjs/middlewares/Cors.js.map +1 -0
- package/lib/cjs/middlewares/ErrorHandler.d.ts +17 -0
- package/lib/cjs/middlewares/ErrorHandler.d.ts.map +1 -0
- package/lib/cjs/middlewares/ErrorHandler.js +42 -0
- package/lib/cjs/middlewares/ErrorHandler.js.map +1 -0
- package/lib/cjs/middlewares/NotFound.d.ts +18 -0
- package/lib/cjs/middlewares/NotFound.d.ts.map +1 -0
- package/lib/cjs/middlewares/NotFound.js +48 -0
- package/lib/cjs/middlewares/NotFound.js.map +1 -0
- package/lib/cjs/middlewares/ServerTiming.d.ts +25 -0
- package/lib/cjs/middlewares/ServerTiming.d.ts.map +1 -0
- package/lib/cjs/middlewares/ServerTiming.js +78 -0
- package/lib/cjs/middlewares/ServerTiming.js.map +1 -0
- package/lib/cjs/middlewares/SlowRequestWarning.d.ts +20 -0
- package/lib/cjs/middlewares/SlowRequestWarning.d.ts.map +1 -0
- package/lib/cjs/middlewares/SlowRequestWarning.js +74 -0
- package/lib/cjs/middlewares/SlowRequestWarning.js.map +1 -0
- package/lib/cjs/server.d.ts +7 -0
- package/lib/cjs/server.d.ts.map +1 -1
- package/lib/cjs/server.js +9 -24
- package/lib/cjs/server.js.map +1 -1
- package/lib/mjs/cache.d.ts +9 -0
- package/lib/mjs/cache.d.ts.map +1 -1
- package/lib/mjs/cache.js +55 -0
- package/lib/mjs/cache.js.map +1 -1
- package/lib/mjs/controllers.d.ts +33 -3
- package/lib/mjs/controllers.d.ts.map +1 -1
- package/lib/mjs/controllers.js +99 -39
- package/lib/mjs/controllers.js.map +1 -1
- package/lib/mjs/decorators.d.ts.map +1 -1
- package/lib/mjs/decorators.js +55 -0
- package/lib/mjs/decorators.js.map +1 -1
- package/lib/mjs/index.d.ts +7 -0
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +7 -0
- package/lib/mjs/index.js.map +1 -1
- package/lib/mjs/interfaces.d.ts +27 -1
- package/lib/mjs/interfaces.d.ts.map +1 -1
- package/lib/mjs/interfaces.js.map +1 -1
- package/lib/mjs/middlewares/AccessLog.d.ts +23 -0
- package/lib/mjs/middlewares/AccessLog.d.ts.map +1 -0
- package/lib/mjs/middlewares/AccessLog.js +70 -0
- package/lib/mjs/middlewares/AccessLog.js.map +1 -0
- package/lib/mjs/middlewares/Compression.d.ts +21 -0
- package/lib/mjs/middlewares/Compression.d.ts.map +1 -0
- package/lib/mjs/middlewares/Compression.js +56 -0
- package/lib/mjs/middlewares/Compression.js.map +1 -0
- package/lib/mjs/middlewares/Cors.d.ts +25 -0
- package/lib/mjs/middlewares/Cors.d.ts.map +1 -0
- package/lib/mjs/middlewares/Cors.js +75 -0
- package/lib/mjs/middlewares/Cors.js.map +1 -0
- package/lib/mjs/middlewares/ErrorHandler.d.ts +17 -0
- package/lib/mjs/middlewares/ErrorHandler.d.ts.map +1 -0
- package/lib/mjs/middlewares/ErrorHandler.js +39 -0
- package/lib/mjs/middlewares/ErrorHandler.js.map +1 -0
- package/lib/mjs/middlewares/NotFound.d.ts +18 -0
- package/lib/mjs/middlewares/NotFound.d.ts.map +1 -0
- package/lib/mjs/middlewares/NotFound.js +45 -0
- package/lib/mjs/middlewares/NotFound.js.map +1 -0
- package/lib/mjs/middlewares/ServerTiming.d.ts +25 -0
- package/lib/mjs/middlewares/ServerTiming.d.ts.map +1 -0
- package/lib/mjs/middlewares/ServerTiming.js +75 -0
- package/lib/mjs/middlewares/ServerTiming.js.map +1 -0
- package/lib/mjs/middlewares/SlowRequestWarning.d.ts +20 -0
- package/lib/mjs/middlewares/SlowRequestWarning.d.ts.map +1 -0
- package/lib/mjs/middlewares/SlowRequestWarning.js +71 -0
- package/lib/mjs/middlewares/SlowRequestWarning.js.map +1 -0
- package/lib/mjs/server.d.ts +7 -0
- package/lib/mjs/server.d.ts.map +1 -1
- package/lib/mjs/server.js +9 -24
- 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 +11 -11
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ErrorHandlerMiddleware = void 0;
|
|
13
|
+
const di_1 = require("@spinajs/di");
|
|
14
|
+
const interfaces_js_1 = require("../interfaces.js");
|
|
15
|
+
const error_js_1 = require("../error.js");
|
|
16
|
+
/**
|
|
17
|
+
* Last-resort error handler. Wraps the existing `__handle_error__` factory
|
|
18
|
+
* (which produces a 4-arg Express error middleware that maps errors to
|
|
19
|
+
* configured HTTP responses) into the standard ServerMiddleware lifecycle.
|
|
20
|
+
*
|
|
21
|
+
* Order MIN_SAFE_INTEGER places it at the very tail of the Express stack
|
|
22
|
+
* after `HttpServer.start()` reverses by Order — exactly where Express
|
|
23
|
+
* expects error middleware to live.
|
|
24
|
+
*/
|
|
25
|
+
let ErrorHandlerMiddleware = class ErrorHandlerMiddleware extends interfaces_js_1.ServerMiddleware {
|
|
26
|
+
constructor() {
|
|
27
|
+
super();
|
|
28
|
+
this.Order = Number.MIN_SAFE_INTEGER - 1;
|
|
29
|
+
}
|
|
30
|
+
before() {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
after() {
|
|
34
|
+
return (0, error_js_1.__handle_error__)();
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
exports.ErrorHandlerMiddleware = ErrorHandlerMiddleware;
|
|
38
|
+
exports.ErrorHandlerMiddleware = ErrorHandlerMiddleware = __decorate([
|
|
39
|
+
(0, di_1.Injectable)(interfaces_js_1.ServerMiddleware),
|
|
40
|
+
__metadata("design:paramtypes", [])
|
|
41
|
+
], ErrorHandlerMiddleware);
|
|
42
|
+
//# sourceMappingURL=ErrorHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorHandler.js","sourceRoot":"","sources":["../../../src/middlewares/ErrorHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,oCAAyC;AAEzC,oDAAoD;AACpD,0CAA+C;AAE/C;;;;;;;;GAQG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,gCAAgB;IAC1D;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC3C,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK;QACV,OAAO,IAAA,2BAAgB,GAAE,CAAC;IAC5B,CAAC;CACF,CAAA;AAbY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,eAAU,EAAC,gCAAgB,CAAC;;GAChB,sBAAsB,CAalC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as express from 'express';
|
|
2
|
+
import { ServerMiddleware } from '../interfaces.js';
|
|
3
|
+
/**
|
|
4
|
+
* Catches requests that no controller route matched and turns them into a
|
|
5
|
+
* standard ResourceNotFound error so {@link ErrorHandlerMiddleware} can
|
|
6
|
+
* produce a proper HTTP response.
|
|
7
|
+
*
|
|
8
|
+
* Registered as a normal ServerMiddleware so it participates in the
|
|
9
|
+
* established lifecycle (HttpServer.start() reverses by Order and applies
|
|
10
|
+
* after()). Its Order is one step above MIN_SAFE_INTEGER so it lands at the
|
|
11
|
+
* Express stack tail, just before the error handler.
|
|
12
|
+
*/
|
|
13
|
+
export declare class NotFoundMiddleware extends ServerMiddleware {
|
|
14
|
+
constructor();
|
|
15
|
+
before(): null;
|
|
16
|
+
after(): (req: express.Request, res: express.Response, next: express.NextFunction) => void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=NotFound.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotFound.d.ts","sourceRoot":"","sources":["../../../src/middlewares/NotFound.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAInC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;;;;;;;GASG;AACH,qBACa,kBAAmB,SAAQ,gBAAgB;;IAS/C,MAAM,IAAI,IAAI;IAId,KAAK,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,KAAK,IAAI;CAKlG"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.NotFoundMiddleware = void 0;
|
|
13
|
+
const di_1 = require("@spinajs/di");
|
|
14
|
+
const exceptions_1 = require("@spinajs/exceptions");
|
|
15
|
+
const interfaces_js_1 = require("../interfaces.js");
|
|
16
|
+
/**
|
|
17
|
+
* Catches requests that no controller route matched and turns them into a
|
|
18
|
+
* standard ResourceNotFound error so {@link ErrorHandlerMiddleware} can
|
|
19
|
+
* produce a proper HTTP response.
|
|
20
|
+
*
|
|
21
|
+
* Registered as a normal ServerMiddleware so it participates in the
|
|
22
|
+
* established lifecycle (HttpServer.start() reverses by Order and applies
|
|
23
|
+
* after()). Its Order is one step above MIN_SAFE_INTEGER so it lands at the
|
|
24
|
+
* Express stack tail, just before the error handler.
|
|
25
|
+
*/
|
|
26
|
+
let NotFoundMiddleware = class NotFoundMiddleware extends interfaces_js_1.ServerMiddleware {
|
|
27
|
+
constructor() {
|
|
28
|
+
super();
|
|
29
|
+
// Reverse-iteration over after() means lowest Order runs LAST and ends up
|
|
30
|
+
// at the Express stack tail. We want NotFound right before ErrorHandler
|
|
31
|
+
// (which uses MIN_SAFE_INTEGER), so we sit one step above.
|
|
32
|
+
this.Order = Number.MIN_SAFE_INTEGER;
|
|
33
|
+
}
|
|
34
|
+
before() {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
after() {
|
|
38
|
+
return (req, _res, next) => {
|
|
39
|
+
next(new exceptions_1.ResourceNotFound(`Route not found: ${req.method} ${req.originalUrl}`));
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
exports.NotFoundMiddleware = NotFoundMiddleware;
|
|
44
|
+
exports.NotFoundMiddleware = NotFoundMiddleware = __decorate([
|
|
45
|
+
(0, di_1.Injectable)(interfaces_js_1.ServerMiddleware),
|
|
46
|
+
__metadata("design:paramtypes", [])
|
|
47
|
+
], NotFoundMiddleware);
|
|
48
|
+
//# sourceMappingURL=NotFound.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotFound.js","sourceRoot":"","sources":["../../../src/middlewares/NotFound.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,oCAAyC;AACzC,oDAAuD;AAEvD,oDAAoD;AAEpD;;;;;;;;;GASG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,gCAAgB;IACtD;QACE,KAAK,EAAE,CAAC;QACR,0EAA0E;QAC1E,wEAAwE;QACxE,2DAA2D;QAC3D,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACvC,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK;QACV,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YACzB,IAAI,CAAC,IAAI,6BAAgB,CAAC,oBAAoB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC;IACJ,CAAC;CACF,CAAA;AAlBY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,eAAU,EAAC,gCAAgB,CAAC;;GAChB,kBAAkB,CAkB9B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as express from 'express';
|
|
2
|
+
import { ServerMiddleware, Request as sRequest } from '../interfaces.js';
|
|
3
|
+
/**
|
|
4
|
+
* Emits a `Server-Timing` response header so browsers / devtools can show
|
|
5
|
+
* internal phase durations alongside the network waterfall.
|
|
6
|
+
*
|
|
7
|
+
* By default it emits a single `total;dur=<ms>` entry. Other code can push
|
|
8
|
+
* additional entries during the request:
|
|
9
|
+
*
|
|
10
|
+
* req.storage.serverTiming.push({ name: 'db', dur: 12, desc: 'main query' });
|
|
11
|
+
*
|
|
12
|
+
* Header is written by monkey-patching `res.end` so it lands on the response
|
|
13
|
+
* regardless of how the controller flushed — Express ServerMiddleware.after()
|
|
14
|
+
* does not run for normal route responses.
|
|
15
|
+
*
|
|
16
|
+
* Config:
|
|
17
|
+
* http.serverTiming.enabled (default true)
|
|
18
|
+
*/
|
|
19
|
+
export declare class ServerTiming extends ServerMiddleware {
|
|
20
|
+
protected Enabled: boolean;
|
|
21
|
+
constructor();
|
|
22
|
+
before(): ((req: sRequest, res: express.Response, next: express.NextFunction) => void) | null;
|
|
23
|
+
after(): null;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ServerTiming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerTiming.d.ts","sourceRoot":"","sources":["../../../src/middlewares/ServerTiming.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAInC,OAAO,EAAE,gBAAgB,EAAE,OAAO,IAAI,QAAQ,EAAsB,MAAM,kBAAkB,CAAC;AAE7F;;;;;;;;;;;;;;;GAeG;AACH,qBACa,YAAa,SAAQ,gBAAgB;IAEhD,SAAS,CAAC,OAAO,EAAG,OAAO,CAAC;;IAOrB,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,GAAG,IAAI;IAoB7F,KAAK,IAAI,IAAI;CAGrB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ServerTiming = void 0;
|
|
13
|
+
const di_1 = require("@spinajs/di");
|
|
14
|
+
const configuration_1 = require("@spinajs/configuration");
|
|
15
|
+
const interfaces_js_1 = require("../interfaces.js");
|
|
16
|
+
/**
|
|
17
|
+
* Emits a `Server-Timing` response header so browsers / devtools can show
|
|
18
|
+
* internal phase durations alongside the network waterfall.
|
|
19
|
+
*
|
|
20
|
+
* By default it emits a single `total;dur=<ms>` entry. Other code can push
|
|
21
|
+
* additional entries during the request:
|
|
22
|
+
*
|
|
23
|
+
* req.storage.serverTiming.push({ name: 'db', dur: 12, desc: 'main query' });
|
|
24
|
+
*
|
|
25
|
+
* Header is written by monkey-patching `res.end` so it lands on the response
|
|
26
|
+
* regardless of how the controller flushed — Express ServerMiddleware.after()
|
|
27
|
+
* does not run for normal route responses.
|
|
28
|
+
*
|
|
29
|
+
* Config:
|
|
30
|
+
* http.serverTiming.enabled (default true)
|
|
31
|
+
*/
|
|
32
|
+
let ServerTiming = class ServerTiming extends interfaces_js_1.ServerMiddleware {
|
|
33
|
+
constructor() {
|
|
34
|
+
super();
|
|
35
|
+
this.Order = 2;
|
|
36
|
+
}
|
|
37
|
+
before() {
|
|
38
|
+
if (!this.Enabled)
|
|
39
|
+
return null;
|
|
40
|
+
return (req, res, next) => {
|
|
41
|
+
const startedAt = Date.now();
|
|
42
|
+
req.storage.serverTiming = req.storage.serverTiming ?? [];
|
|
43
|
+
const originalEnd = res.end.bind(res);
|
|
44
|
+
res.end = function patchedEnd(...args) {
|
|
45
|
+
if (!res.headersSent) {
|
|
46
|
+
const entries = req.storage.serverTiming ?? [];
|
|
47
|
+
entries.push({ name: 'total', dur: Date.now() - startedAt });
|
|
48
|
+
res.setHeader('Server-Timing', entries.map(formatEntry).join(', '));
|
|
49
|
+
}
|
|
50
|
+
return originalEnd(...args);
|
|
51
|
+
};
|
|
52
|
+
next();
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
after() {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
exports.ServerTiming = ServerTiming;
|
|
60
|
+
__decorate([
|
|
61
|
+
(0, configuration_1.Config)('http.serverTiming.enabled', { defaultValue: true }),
|
|
62
|
+
__metadata("design:type", Boolean)
|
|
63
|
+
], ServerTiming.prototype, "Enabled", void 0);
|
|
64
|
+
exports.ServerTiming = ServerTiming = __decorate([
|
|
65
|
+
(0, di_1.Injectable)(interfaces_js_1.ServerMiddleware),
|
|
66
|
+
__metadata("design:paramtypes", [])
|
|
67
|
+
], ServerTiming);
|
|
68
|
+
function formatEntry(e) {
|
|
69
|
+
// Per the RFC each metric is "name;dur=<ms>;desc=\"...\"" — quotes are
|
|
70
|
+
// required when the description contains anything but ASCII identifiers.
|
|
71
|
+
const parts = [e.name];
|
|
72
|
+
if (typeof e.dur === 'number')
|
|
73
|
+
parts.push(`dur=${e.dur}`);
|
|
74
|
+
if (e.desc)
|
|
75
|
+
parts.push(`desc="${e.desc.replace(/"/g, '\\"')}"`);
|
|
76
|
+
return parts.join(';');
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=ServerTiming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerTiming.js","sourceRoot":"","sources":["../../../src/middlewares/ServerTiming.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,oCAAyC;AACzC,0DAAgD;AAEhD,oDAA6F;AAE7F;;;;;;;;;;;;;;;GAeG;AAEI,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,gCAAgB;IAIhD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAEM,MAAM;QACX,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC/B,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,GAAG,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;YAE1D,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAmB,CAAC;YACvD,GAAG,CAAC,GAAW,GAAG,SAAS,UAAU,CAAyB,GAAG,IAAW;gBAC3E,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;oBACrB,MAAM,OAAO,GAAyB,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;oBACrE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;oBAC7D,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtE,CAAC;gBACD,OAAO,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;YAC9B,CAAC,CAAC;YAEF,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;IACJ,CAAC;IAEM,KAAK;QACV,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAhCY,oCAAY;AAEb;IADT,IAAA,sBAAM,EAAC,2BAA2B,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;;6CAChC;uBAFjB,YAAY;IADxB,IAAA,eAAU,EAAC,gCAAgB,CAAC;;GAChB,YAAY,CAgCxB;AAED,SAAS,WAAW,CAAC,CAAqB;IACxC,uEAAuE;IACvE,yEAAyE;IACzE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as express from 'express';
|
|
2
|
+
import { Log } from '@spinajs/log';
|
|
3
|
+
import { ServerMiddleware, Request as sRequest } from '../interfaces.js';
|
|
4
|
+
/**
|
|
5
|
+
* Logs a warning when a request exceeds a configurable duration threshold.
|
|
6
|
+
* Cheap diagnostic visibility for performance regressions.
|
|
7
|
+
*
|
|
8
|
+
* Config:
|
|
9
|
+
* http.slowRequest.enabled (default true)
|
|
10
|
+
* http.slowRequest.thresholdMs (default 1000)
|
|
11
|
+
*/
|
|
12
|
+
export declare class SlowRequestWarning extends ServerMiddleware {
|
|
13
|
+
protected Enabled: boolean;
|
|
14
|
+
protected ThresholdMs: number;
|
|
15
|
+
protected Log: Log;
|
|
16
|
+
constructor();
|
|
17
|
+
before(): ((req: sRequest, res: express.Response, next: express.NextFunction) => void) | null;
|
|
18
|
+
after(): null;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=SlowRequestWarning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SlowRequestWarning.d.ts","sourceRoot":"","sources":["../../../src/middlewares/SlowRequestWarning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAU,GAAG,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEzE;;;;;;;GAOG;AACH,qBACa,kBAAmB,SAAQ,gBAAgB;IAEtD,SAAS,CAAC,OAAO,EAAG,OAAO,CAAC;IAG5B,SAAS,CAAC,WAAW,EAAG,MAAM,CAAC;IAG/B,SAAS,CAAC,GAAG,EAAG,GAAG,CAAC;;IAOb,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,GAAG,IAAI;IAuB7F,KAAK,IAAI,IAAI;CAGrB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SlowRequestWarning = void 0;
|
|
13
|
+
const di_1 = require("@spinajs/di");
|
|
14
|
+
const configuration_1 = require("@spinajs/configuration");
|
|
15
|
+
const log_1 = require("@spinajs/log");
|
|
16
|
+
const interfaces_js_1 = require("../interfaces.js");
|
|
17
|
+
/**
|
|
18
|
+
* Logs a warning when a request exceeds a configurable duration threshold.
|
|
19
|
+
* Cheap diagnostic visibility for performance regressions.
|
|
20
|
+
*
|
|
21
|
+
* Config:
|
|
22
|
+
* http.slowRequest.enabled (default true)
|
|
23
|
+
* http.slowRequest.thresholdMs (default 1000)
|
|
24
|
+
*/
|
|
25
|
+
let SlowRequestWarning = class SlowRequestWarning extends interfaces_js_1.ServerMiddleware {
|
|
26
|
+
constructor() {
|
|
27
|
+
super();
|
|
28
|
+
this.Order = 2;
|
|
29
|
+
}
|
|
30
|
+
before() {
|
|
31
|
+
if (!this.Enabled)
|
|
32
|
+
return null;
|
|
33
|
+
const log = this.Log;
|
|
34
|
+
const threshold = this.ThresholdMs;
|
|
35
|
+
return (req, res, next) => {
|
|
36
|
+
const startedAt = Date.now();
|
|
37
|
+
res.on('finish', () => {
|
|
38
|
+
const ms = Date.now() - startedAt;
|
|
39
|
+
if (ms >= threshold) {
|
|
40
|
+
log.warn(`Slow request: ${req.method} ${req.originalUrl} took ${ms}ms (threshold ${threshold}ms)`, {
|
|
41
|
+
method: req.method,
|
|
42
|
+
path: req.originalUrl,
|
|
43
|
+
ms,
|
|
44
|
+
threshold,
|
|
45
|
+
status: res.statusCode,
|
|
46
|
+
requestId: req.storage?.requestId,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
next();
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
after() {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
exports.SlowRequestWarning = SlowRequestWarning;
|
|
58
|
+
__decorate([
|
|
59
|
+
(0, configuration_1.Config)('http.slowRequest.enabled', { defaultValue: true }),
|
|
60
|
+
__metadata("design:type", Boolean)
|
|
61
|
+
], SlowRequestWarning.prototype, "Enabled", void 0);
|
|
62
|
+
__decorate([
|
|
63
|
+
(0, configuration_1.Config)('http.slowRequest.thresholdMs', { defaultValue: 1000 }),
|
|
64
|
+
__metadata("design:type", Number)
|
|
65
|
+
], SlowRequestWarning.prototype, "ThresholdMs", void 0);
|
|
66
|
+
__decorate([
|
|
67
|
+
(0, log_1.Logger)('http'),
|
|
68
|
+
__metadata("design:type", log_1.Log)
|
|
69
|
+
], SlowRequestWarning.prototype, "Log", void 0);
|
|
70
|
+
exports.SlowRequestWarning = SlowRequestWarning = __decorate([
|
|
71
|
+
(0, di_1.Injectable)(interfaces_js_1.ServerMiddleware),
|
|
72
|
+
__metadata("design:paramtypes", [])
|
|
73
|
+
], SlowRequestWarning);
|
|
74
|
+
//# sourceMappingURL=SlowRequestWarning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SlowRequestWarning.js","sourceRoot":"","sources":["../../../src/middlewares/SlowRequestWarning.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,oCAAyC;AACzC,0DAAgD;AAChD,sCAA2C;AAE3C,oDAAyE;AAEzE;;;;;;;GAOG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,gCAAgB;IAUtD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAEM,MAAM;QACX,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;QACnC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACpB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBAClC,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;oBACpB,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,SAAS,EAAE,iBAAiB,SAAS,KAAK,EAAE;wBACjG,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,IAAI,EAAE,GAAG,CAAC,WAAW;wBACrB,EAAE;wBACF,SAAS;wBACT,MAAM,EAAE,GAAG,CAAC,UAAU;wBACtB,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS;qBAClC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;IACJ,CAAC;IAEM,KAAK;QACV,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAzCY,gDAAkB;AAEnB;IADT,IAAA,sBAAM,EAAC,0BAA0B,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;;mDAC/B;AAGlB;IADT,IAAA,sBAAM,EAAC,8BAA8B,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;;uDAChC;AAGrB;IADT,IAAA,YAAM,EAAC,MAAM,CAAC;8BACC,SAAG;+CAAC;6BART,kBAAkB;IAD9B,IAAA,eAAU,EAAC,gCAAgB,CAAC;;GAChB,kBAAkB,CAyC9B"}
|
package/lib/cjs/server.d.ts
CHANGED
|
@@ -11,6 +11,13 @@ import './middlewares/ResponseTime.js';
|
|
|
11
11
|
import './middlewares/RequestId.js';
|
|
12
12
|
import './middlewares/RealIp.js';
|
|
13
13
|
import './middlewares/ReqStorage.js';
|
|
14
|
+
import './middlewares/NotFound.js';
|
|
15
|
+
import './middlewares/ErrorHandler.js';
|
|
16
|
+
import './middlewares/AccessLog.js';
|
|
17
|
+
import './middlewares/Compression.js';
|
|
18
|
+
import './middlewares/Cors.js';
|
|
19
|
+
import './middlewares/SlowRequestWarning.js';
|
|
20
|
+
import './middlewares/ServerTiming.js';
|
|
14
21
|
export declare class HttpServer extends AsyncService {
|
|
15
22
|
protected Configuration: Configuration;
|
|
16
23
|
protected Container: IContainer;
|
package/lib/cjs/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAiD,MAAM,aAAa,CAAC;AACtG,OAAO,EAAU,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAU,GAAG,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,wBAAwB,CAAC;AAEhC,OAAO,EAAE,MAAM,IAAI,IAAI,EAAoC,MAAM,MAAM,CAAC;AACxE,OAAO,EAAE,MAAM,IAAI,KAAK,EAAqC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAiD,MAAM,aAAa,CAAC;AACtG,OAAO,EAAU,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAU,GAAG,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,wBAAwB,CAAC;AAEhC,OAAO,EAAE,MAAM,IAAI,IAAI,EAAoC,MAAM,MAAM,CAAC;AACxE,OAAO,EAAE,MAAM,IAAI,KAAK,EAAqC,MAAM,OAAO,CAAC;AAE3E,OAAO,OAAO,EAAE,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIvE,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,yBAAyB,CAAC;AACjC,OAAO,+BAA+B,CAAC;AACvC,OAAO,4BAA4B,CAAC;AACpC,OAAO,yBAAyB,CAAC;AACjC,OAAO,6BAA6B,CAAC;AACrC,OAAO,2BAA2B,CAAC;AACnC,OAAO,+BAA+B,CAAC;AACvC,OAAO,4BAA4B,CAAC;AACpC,OAAO,8BAA8B,CAAC;AACtC,OAAO,uBAAuB,CAAC;AAC/B,OAAO,qCAAqC,CAAC;AAC7C,OAAO,+BAA+B,CAAC;AAEvC,qBAEa,UAAW,SAAQ,YAAY;IAE1C,SAAS,CAAC,aAAa,EAAG,aAAa,CAAC;IAGxC,SAAS,CAAC,SAAS,EAAG,UAAU,CAAC;IAGjC,SAAS,CAAC,WAAW,EAAG,gBAAgB,EAAE,CAAC;IAG3C,SAAS,CAAC,UAAU,EAAG,wBAAwB,CAAC;IAGhD,SAAS,CAAC,YAAY,EAAG,OAAO,CAAC;IAKjC,SAAS,CAAC,MAAM,EAAG,MAAM,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,OAAO,EAAG,OAAO,CAAC,OAAO,CAAC;IAEpC;;OAEG;IACH,SAAS,CAAC,WAAW,EAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,YAAY,EAAG,KAAK,CAAC;IAE/B;;OAEG;IACH,SAAS,CAAC,YAAY,WAAkB;IAExC,IAAW,MAAM,IAAI,IAAI,GAAG,KAAK,CAEhC;IAED;;OAEG;IAEH,SAAS,CAAC,GAAG,EAAG,GAAG,CAAC;;IAMP,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAsCrC;;OAEG;IACH,OAAO,CAAC,aAAa;IAuCrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;OAEG;IACI,KAAK;IAwBL,IAAI;IAMX;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA4CrC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;;;OAIG;IACI,GAAG,CAAC,UAAU,EAAE,cAAc,GAAG,mBAAmB,GAAG,IAAI;CAGnE"}
|
package/lib/cjs/server.js
CHANGED
|
@@ -21,7 +21,6 @@ require("@spinajs/templates-pug");
|
|
|
21
21
|
const http_1 = require("http");
|
|
22
22
|
const https_1 = require("https");
|
|
23
23
|
const fs_1 = require("fs");
|
|
24
|
-
const cors_1 = __importDefault(require("cors"));
|
|
25
24
|
const express_1 = __importDefault(require("express"));
|
|
26
25
|
const lodash_1 = __importDefault(require("lodash"));
|
|
27
26
|
const fs_2 = __importDefault(require("fs"));
|
|
@@ -31,6 +30,13 @@ require("./middlewares/ResponseTime.js");
|
|
|
31
30
|
require("./middlewares/RequestId.js");
|
|
32
31
|
require("./middlewares/RealIp.js");
|
|
33
32
|
require("./middlewares/ReqStorage.js");
|
|
33
|
+
require("./middlewares/NotFound.js");
|
|
34
|
+
require("./middlewares/ErrorHandler.js");
|
|
35
|
+
require("./middlewares/AccessLog.js");
|
|
36
|
+
require("./middlewares/Compression.js");
|
|
37
|
+
require("./middlewares/Cors.js");
|
|
38
|
+
require("./middlewares/SlowRequestWarning.js");
|
|
39
|
+
require("./middlewares/ServerTiming.js");
|
|
34
40
|
let HttpServer = class HttpServer extends di_1.AsyncService {
|
|
35
41
|
get Server() {
|
|
36
42
|
return this.HttpsEnabled ? this._httpsServer : this._httpServer;
|
|
@@ -60,29 +66,8 @@ let HttpServer = class HttpServer extends di_1.AsyncService {
|
|
|
60
66
|
this.Log.info(`Using server middleware::before() - ${m.constructor.name}`);
|
|
61
67
|
this.use(m);
|
|
62
68
|
});
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
*/
|
|
66
|
-
const cOptions = this.Configuration.get('http.cors', undefined);
|
|
67
|
-
if (!cOptions) {
|
|
68
|
-
this.Log.warn(`CORS options not set, server may be unavaible from outside ! Please set http.cors configuration option.`);
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
const corsOptions = {
|
|
72
|
-
origin(origin, callback) {
|
|
73
|
-
if (!cOptions || cOptions.origins.length === 0 || cOptions.origins.indexOf(origin) !== -1) {
|
|
74
|
-
callback(null, true);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
callback(new Error('cors not allowed'));
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
exposedHeaders: cOptions.exposedHeaders,
|
|
81
|
-
allowedHeaders: cOptions.allowedHeaders,
|
|
82
|
-
credentials: true,
|
|
83
|
-
};
|
|
84
|
-
this.use((0, cors_1.default)(corsOptions));
|
|
85
|
-
}
|
|
69
|
+
// CORS is now provided by CorsMiddleware (registered as ServerMiddleware,
|
|
70
|
+
// applied through the standard `Middlewares.before()` loop below).
|
|
86
71
|
// register other server middlewares
|
|
87
72
|
this.Middlewares.forEach((m) => {
|
|
88
73
|
const f = m.before();
|
package/lib/cjs/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oCAAsG;AACtG,0DAA+D;AAC/D,sCAA2C;AAE3C,kDAA+C;AAC/C,kCAAgC;AAEhC,+BAAwE;AACxE,iCAA2E;AAC3E,2BAAgC;AAChC,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
package/lib/mjs/cache.d.ts
CHANGED
|
@@ -85,6 +85,15 @@ export declare class DefaultControllerCache extends AsyncService {
|
|
|
85
85
|
resolve(): Promise<void>;
|
|
86
86
|
/** Returns parameter-name map used for route argument binding. */
|
|
87
87
|
getCache(controller: ClassInfo<BaseController>): Promise<Record<string, string[]>>;
|
|
88
|
+
/** Whether `file` points at a real on-disk source we can parse. */
|
|
89
|
+
private isResolvableSource;
|
|
90
|
+
/**
|
|
91
|
+
* Fallback: derive route method parameter names by parsing each method's
|
|
92
|
+
* Function.toString() output. Loses JSDoc documentation (no @param tags
|
|
93
|
+
* etc.) but keeps argument binding working for DI-registered controllers
|
|
94
|
+
* that have no source file on disk.
|
|
95
|
+
*/
|
|
96
|
+
private extractParametersAtRuntime;
|
|
88
97
|
/** Returns the JSDoc / TypeScript-annotation documentation for a controller. */
|
|
89
98
|
getDocumentation(controller: ClassInfo<BaseController>): Promise<IControllerDocumentation>;
|
|
90
99
|
/**
|
package/lib/mjs/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"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"}
|
package/lib/mjs/cache.js
CHANGED
|
@@ -53,6 +53,13 @@ let DefaultControllerCache = class DefaultControllerCache extends AsyncService {
|
|
|
53
53
|
}
|
|
54
54
|
/** Returns parameter-name map used for route argument binding. */
|
|
55
55
|
async getCache(controller) {
|
|
56
|
+
// Sentinel values like `<di>` are set by Controllers.resolve() / add() for
|
|
57
|
+
// controllers registered through DI rather than a file scan. There's no
|
|
58
|
+
// on-disk source to parse, so fall back to a runtime extraction of
|
|
59
|
+
// parameter names from each method's Function.toString().
|
|
60
|
+
if (!this.isResolvableSource(controller.file)) {
|
|
61
|
+
return this.extractParametersAtRuntime(controller);
|
|
62
|
+
}
|
|
56
63
|
const file = resolvePath(controller.file.replace('.js', '.d.ts'));
|
|
57
64
|
const hash = await this.Hasher.hash(file);
|
|
58
65
|
const docHash = `doc_${hash}`;
|
|
@@ -69,8 +76,40 @@ let DefaultControllerCache = class DefaultControllerCache extends AsyncService {
|
|
|
69
76
|
}
|
|
70
77
|
return this.CacheFS.read(hash).then((x) => JSON.parse(x.toString()));
|
|
71
78
|
}
|
|
79
|
+
/** Whether `file` points at a real on-disk source we can parse. */
|
|
80
|
+
isResolvableSource(file) {
|
|
81
|
+
if (!file)
|
|
82
|
+
return false;
|
|
83
|
+
// Bracketed sentinels (e.g. `<di>`, `<dynamic>`) are used by Controllers
|
|
84
|
+
// for entries that were never loaded from a file.
|
|
85
|
+
return !(file.startsWith('<') && file.endsWith('>'));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Fallback: derive route method parameter names by parsing each method's
|
|
89
|
+
* Function.toString() output. Loses JSDoc documentation (no @param tags
|
|
90
|
+
* etc.) but keeps argument binding working for DI-registered controllers
|
|
91
|
+
* that have no source file on disk.
|
|
92
|
+
*/
|
|
93
|
+
extractParametersAtRuntime(controller) {
|
|
94
|
+
const parameters = {};
|
|
95
|
+
const instance = controller.instance;
|
|
96
|
+
if (!instance || !instance.Descriptor)
|
|
97
|
+
return parameters;
|
|
98
|
+
for (const [methodName] of instance.Descriptor.Routes) {
|
|
99
|
+
const fn = instance[methodName];
|
|
100
|
+
if (typeof fn !== 'function')
|
|
101
|
+
continue;
|
|
102
|
+
parameters[methodName] = parseFnParamNames(fn);
|
|
103
|
+
}
|
|
104
|
+
return parameters;
|
|
105
|
+
}
|
|
72
106
|
/** Returns the JSDoc / TypeScript-annotation documentation for a controller. */
|
|
73
107
|
async getDocumentation(controller) {
|
|
108
|
+
// No source file → no JSDoc to extract. Return an empty shell so callers
|
|
109
|
+
// (e.g. http-swagger) gracefully skip the controller instead of throwing.
|
|
110
|
+
if (!this.isResolvableSource(controller.file)) {
|
|
111
|
+
return { className: controller.name, methods: {} };
|
|
112
|
+
}
|
|
74
113
|
const file = resolvePath(controller.file.replace('.js', '.d.ts'));
|
|
75
114
|
const hash = await this.Hasher.hash(file);
|
|
76
115
|
const docHash = `doc_${hash}`;
|
|
@@ -502,4 +541,20 @@ export { DefaultControllerCache };
|
|
|
502
541
|
function entityNameRight(name) {
|
|
503
542
|
return ts.isIdentifier(name) ? name.text : name.right.text;
|
|
504
543
|
}
|
|
544
|
+
/**
|
|
545
|
+
* Pull parameter names from `Function.prototype.toString()` output. Modern V8
|
|
546
|
+
* preserves the literal signature so we can regex out `(a, b = 1, ...rest)`.
|
|
547
|
+
* Stripped of default values and TypeScript type annotations.
|
|
548
|
+
*/
|
|
549
|
+
function parseFnParamNames(fn) {
|
|
550
|
+
const src = Function.prototype.toString.call(fn);
|
|
551
|
+
const match = src.match(/^[^(]*\(([\s\S]*?)\)/);
|
|
552
|
+
if (!match)
|
|
553
|
+
return [];
|
|
554
|
+
return match[1]
|
|
555
|
+
.split(',')
|
|
556
|
+
.map((p) => p.trim())
|
|
557
|
+
.filter(Boolean)
|
|
558
|
+
.map((p) => p.replace(/^\.\.\./, '').split(/[=:]/)[0].trim());
|
|
559
|
+
}
|
|
505
560
|
//# sourceMappingURL=cache.js.map
|