@expressots/core 2.7.0 → 2.9.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/lib/CHANGELOG.md +77 -0
- package/lib/cjs/application/app-container.js +94 -82
- package/lib/cjs/application/application-factory.js +74 -72
- package/lib/cjs/application/index.js +7 -7
- package/lib/cjs/common/color-service.provider.js +47 -46
- package/lib/cjs/common/index.js +2 -2
- package/lib/cjs/common/package-resolver.provider.js +35 -35
- package/lib/cjs/common/project-config.provider.js +2 -2
- package/lib/cjs/console/console.js +61 -61
- package/lib/cjs/console/index.js +5 -5
- package/lib/cjs/container-module/container-module.js +111 -111
- package/lib/cjs/container-module/index.js +6 -6
- package/lib/cjs/controller/base-controller.js +75 -75
- package/lib/cjs/controller/index.js +5 -5
- package/lib/cjs/decorator/index.js +17 -17
- package/lib/cjs/decorator/scope-binding.js +44 -44
- package/lib/cjs/error/app-error.js +26 -37
- package/lib/cjs/error/error-handler-middleware.js +28 -28
- package/lib/cjs/error/index.js +9 -9
- package/lib/cjs/error/report.js +54 -57
- package/lib/cjs/error/status-code.js +89 -89
- package/lib/cjs/index.js +26 -26
- package/lib/cjs/middleware/index.js +32 -29
- package/lib/cjs/middleware/interfaces/body-parser.interface.js +2 -2
- package/lib/cjs/middleware/interfaces/compression.interface.js +2 -2
- package/lib/cjs/middleware/interfaces/cookie-parser.interface.js +2 -2
- package/lib/cjs/middleware/interfaces/cookie-session/cookie-session.interface.js +2 -2
- package/lib/cjs/middleware/interfaces/cookie-session/keygrip.interface.js +2 -2
- package/lib/cjs/middleware/interfaces/cors.interface.js +2 -2
- package/lib/cjs/middleware/interfaces/express-rate-limit.interface.js +2 -2
- package/lib/cjs/middleware/interfaces/express-session.interface.js +2 -2
- package/lib/cjs/middleware/interfaces/helmet.interface.js +2 -2
- package/lib/cjs/middleware/interfaces/morgan.interface.js +2 -2
- package/lib/cjs/middleware/interfaces/multer.interface.js +2 -0
- package/lib/cjs/middleware/interfaces/serve-favicon.interface.js +2 -2
- package/lib/cjs/middleware/interfaces/serve-static.interface.js +2 -2
- package/lib/cjs/middleware/middleware-resolver.js +72 -72
- package/lib/cjs/middleware/middleware-service.js +481 -300
- package/lib/cjs/provider/db-in-memory/db-in-memory.provider.js +82 -75
- package/lib/cjs/provider/dto-validator/dto-validator.provider.js +53 -53
- package/lib/cjs/provider/environment/env-validator.provider.js +98 -96
- package/lib/cjs/provider/index.js +13 -13
- package/lib/cjs/provider/logger/{logger-service.js → logger.provider.js} +117 -115
- package/lib/cjs/provider/provider-manager.js +50 -0
- package/lib/cjs/render/handlebars.interface.js +2 -2
- package/lib/cjs/render/index.js +2 -2
- package/lib/cjs/render/render.type.js +2 -2
- package/lib/cjs/types/application/app-container.d.ts +62 -125
- package/lib/cjs/types/application/application-factory.d.ts +34 -33
- package/lib/cjs/types/application/index.d.ts +2 -2
- package/lib/cjs/types/common/color-service.provider.d.ts +29 -29
- package/lib/cjs/types/common/index.d.ts +1 -1
- package/lib/cjs/types/common/package-resolver.provider.d.ts +8 -8
- package/lib/cjs/types/common/project-config.provider.d.ts +47 -47
- package/lib/cjs/types/console/console.d.ts +27 -27
- package/lib/cjs/types/console/index.d.ts +1 -1
- package/lib/cjs/types/container-module/container-module.d.ts +28 -28
- package/lib/cjs/types/container-module/index.d.ts +1 -1
- package/lib/cjs/types/controller/base-controller.d.ts +48 -48
- package/lib/cjs/types/controller/index.d.ts +1 -1
- package/lib/cjs/types/decorator/index.d.ts +1 -1
- package/lib/cjs/types/decorator/scope-binding.d.ts +33 -33
- package/lib/cjs/types/error/app-error.d.ts +29 -29
- package/lib/cjs/types/error/error-handler-middleware.d.ts +11 -11
- package/lib/cjs/types/error/index.d.ts +3 -3
- package/lib/cjs/types/error/report.d.ts +25 -25
- package/lib/cjs/types/error/status-code.d.ts +136 -136
- package/lib/cjs/types/index.d.ts +10 -10
- package/lib/cjs/types/middleware/index.d.ts +13 -12
- package/lib/cjs/types/middleware/interfaces/body-parser.interface.d.ts +33 -33
- package/lib/cjs/types/middleware/interfaces/compression.interface.d.ts +98 -98
- package/lib/cjs/types/middleware/interfaces/cookie-parser.interface.d.ts +9 -9
- package/lib/cjs/types/middleware/interfaces/cookie-session/cookie-session.interface.d.ts +57 -57
- package/lib/cjs/types/middleware/interfaces/cookie-session/keygrip.interface.d.ts +27 -27
- package/lib/cjs/types/middleware/interfaces/cors.interface.d.ts +57 -57
- package/lib/cjs/types/middleware/interfaces/express-rate-limit.interface.d.ts +292 -292
- package/lib/cjs/types/middleware/interfaces/express-session.interface.d.ts +207 -208
- package/lib/cjs/types/middleware/interfaces/helmet.interface.d.ts +210 -210
- package/lib/cjs/types/middleware/interfaces/morgan.interface.d.ts +40 -40
- package/lib/cjs/types/middleware/interfaces/multer.interface.d.ts +255 -0
- package/lib/cjs/types/middleware/interfaces/serve-favicon.interface.d.ts +11 -11
- package/lib/cjs/types/middleware/interfaces/serve-static.interface.d.ts +70 -70
- package/lib/cjs/types/middleware/middleware-resolver.d.ts +11 -11
- package/lib/cjs/types/middleware/middleware-service.d.ts +368 -275
- package/lib/cjs/types/provider/db-in-memory/db-in-memory.provider.d.ts +43 -38
- package/lib/cjs/types/provider/dto-validator/dto-validator.provider.d.ts +11 -11
- package/lib/cjs/types/provider/environment/env-validator.provider.d.ts +35 -30
- package/lib/cjs/types/provider/index.d.ts +5 -5
- package/lib/cjs/types/provider/logger/{logger-service.d.ts → logger.provider.d.ts} +54 -49
- package/lib/cjs/types/provider/provider-manager.d.ts +16 -0
- package/lib/cjs/types/render/handlebars.interface.d.ts +46 -46
- package/lib/cjs/types/render/index.d.ts +2 -2
- package/lib/cjs/types/render/render.type.d.ts +12 -12
- package/lib/package.json +21 -20
- package/package.json +21 -20
- package/lib/cjs/provider/provider-service.js +0 -38
- package/lib/cjs/types/provider/provider-service.d.ts +0 -30
|
@@ -1,300 +1,481 @@
|
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
-
};
|
|
11
|
-
var Middleware_1;
|
|
12
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.Middleware = void 0;
|
|
14
|
-
const express_1 = __importDefault(require("express"));
|
|
15
|
-
const index_1 = require("../decorator/index");
|
|
16
|
-
const error_handler_middleware_1 = __importDefault(require("../error/error-handler-middleware"));
|
|
17
|
-
const
|
|
18
|
-
const middleware_resolver_1 = require("./middleware-resolver");
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
*
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
]
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
var ExpressoMiddleware_1, Middleware_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.Middleware = exports.ExpressoMiddleware = void 0;
|
|
14
|
+
const express_1 = __importDefault(require("express"));
|
|
15
|
+
const index_1 = require("../decorator/index");
|
|
16
|
+
const error_handler_middleware_1 = __importDefault(require("../error/error-handler-middleware"));
|
|
17
|
+
const logger_provider_1 = require("../provider/logger/logger.provider");
|
|
18
|
+
const middleware_resolver_1 = require("./middleware-resolver");
|
|
19
|
+
const inversify_binding_decorators_1 = require("inversify-binding-decorators");
|
|
20
|
+
/**
|
|
21
|
+
* Abstract class for creating custom Expresso middleware.
|
|
22
|
+
* Custom middleware classes should extend this class and implement the use method.
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
let ExpressoMiddleware = ExpressoMiddleware_1 = class ExpressoMiddleware {
|
|
26
|
+
get name() {
|
|
27
|
+
return this.constructor.name;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
ExpressoMiddleware = ExpressoMiddleware_1 = __decorate([
|
|
31
|
+
(0, inversify_binding_decorators_1.provide)(ExpressoMiddleware_1)
|
|
32
|
+
], ExpressoMiddleware);
|
|
33
|
+
exports.ExpressoMiddleware = ExpressoMiddleware;
|
|
34
|
+
/**
|
|
35
|
+
* MiddlewareType Enum
|
|
36
|
+
*
|
|
37
|
+
* The MiddlewareType enum represents the various types of middleware that can be added to the middleware collection.
|
|
38
|
+
* - Config: Middleware configuration object.
|
|
39
|
+
* - ExpressHandler: Express request handler function.
|
|
40
|
+
* - IExpressoMiddleware: Custom Expresso middleware.
|
|
41
|
+
*/
|
|
42
|
+
var MiddlewareType;
|
|
43
|
+
(function (MiddlewareType) {
|
|
44
|
+
MiddlewareType[MiddlewareType["Config"] = 0] = "Config";
|
|
45
|
+
MiddlewareType[MiddlewareType["ExpressHandler"] = 1] = "ExpressHandler";
|
|
46
|
+
MiddlewareType[MiddlewareType["IExpressoMiddleware"] = 2] = "IExpressoMiddleware";
|
|
47
|
+
})(MiddlewareType || (MiddlewareType = {}));
|
|
48
|
+
/**
|
|
49
|
+
* Singleton class that implements the IConfigure interface.
|
|
50
|
+
* Manages the middleware configuration for the application,
|
|
51
|
+
* including adding Body Parser and retrieving all configured middlewares.
|
|
52
|
+
*
|
|
53
|
+
* @see IConfigure
|
|
54
|
+
*/
|
|
55
|
+
let Middleware = Middleware_1 = class Middleware {
|
|
56
|
+
constructor() {
|
|
57
|
+
this.middlewarePipeline = [];
|
|
58
|
+
this.logger = new logger_provider_1.Logger();
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Retrieves the type of the middleware.
|
|
62
|
+
*
|
|
63
|
+
* @param middleware - The middleware to be checked.
|
|
64
|
+
*
|
|
65
|
+
* @returns The type of the middleware.
|
|
66
|
+
*/
|
|
67
|
+
getMiddlewareType(middleware) {
|
|
68
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
69
|
+
if (middleware?.hasOwnProperty("path")) {
|
|
70
|
+
return MiddlewareType.Config;
|
|
71
|
+
}
|
|
72
|
+
else if (middleware instanceof Function) {
|
|
73
|
+
return MiddlewareType.ExpressHandler;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
return MiddlewareType.IExpressoMiddleware;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Checks if a middleware with the given name exists in the middleware collection.
|
|
81
|
+
*
|
|
82
|
+
* @param middlewareName - The name of the middleware to be checked.
|
|
83
|
+
*
|
|
84
|
+
* @returns A boolean value indicating whether the middleware exists or not.
|
|
85
|
+
*/
|
|
86
|
+
middlewareExists(middlewareName) {
|
|
87
|
+
return this.middlewarePipeline.some((m) => {
|
|
88
|
+
if (m.middleware instanceof Function) {
|
|
89
|
+
return m.middleware.name === middlewareName;
|
|
90
|
+
}
|
|
91
|
+
else if (m.middleware instanceof Object) {
|
|
92
|
+
return m.middleware.path === middlewareName;
|
|
93
|
+
}
|
|
94
|
+
return false;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
addRateLimiter(options) {
|
|
98
|
+
const middleware = (0, middleware_resolver_1.middlewareResolver)("rateLimit", options);
|
|
99
|
+
const middlewareExist = this.middlewareExists("rateLimit");
|
|
100
|
+
if (middleware && !middlewareExist) {
|
|
101
|
+
this.middlewarePipeline.push({
|
|
102
|
+
timestamp: new Date(),
|
|
103
|
+
middleware,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Adds a Body Parser middleware to the middleware collection using the given options.
|
|
109
|
+
*
|
|
110
|
+
* @param options - Optional configuration options for the JSON body parser.
|
|
111
|
+
*/
|
|
112
|
+
addBodyParser(options) {
|
|
113
|
+
const middlewareExist = this.middlewareExists("jsonParser");
|
|
114
|
+
if (middlewareExist) {
|
|
115
|
+
this.logger.warn(`[jsonParser] already exists. Skipping...`, "configure-service");
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
this.middlewarePipeline.push({
|
|
119
|
+
timestamp: new Date(),
|
|
120
|
+
middleware: express_1.default.json(options),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Adds Cross-Origin Resource Sharing (CORS) middleware to enable or control cross-origin requests.
|
|
126
|
+
*
|
|
127
|
+
* @param options - Optional configuration options for CORS. Defines the behavior of CORS requests like allowed origins, methods, headers, etc.
|
|
128
|
+
*/
|
|
129
|
+
addCors(options) {
|
|
130
|
+
const middleware = (0, middleware_resolver_1.middlewareResolver)("cors", options);
|
|
131
|
+
const middlewareExist = this.middlewareExists("cors");
|
|
132
|
+
if (middleware && !middlewareExist) {
|
|
133
|
+
this.middlewarePipeline.push({
|
|
134
|
+
timestamp: new Date(),
|
|
135
|
+
middleware,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Adds Compression middleware to reduce the size of the response body and improve the speed of the client-server communication.
|
|
141
|
+
*
|
|
142
|
+
* @param options - Optional configuration options for Compression. Allows fine-tuning the compression behavior, such as setting the compression level, threshold, and filter functions to determine which requests should be compressed.
|
|
143
|
+
*/
|
|
144
|
+
addCompression(options) {
|
|
145
|
+
const middleware = (0, middleware_resolver_1.middlewareResolver)("compression", options);
|
|
146
|
+
const middlewareExist = this.middlewareExists("compression");
|
|
147
|
+
if (middleware && !middlewareExist) {
|
|
148
|
+
this.middlewarePipeline.push({
|
|
149
|
+
timestamp: new Date(),
|
|
150
|
+
middleware,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Adds Morgan middleware to log HTTP requests.
|
|
156
|
+
*
|
|
157
|
+
* @param format - The log format. Can be a string or a function.
|
|
158
|
+
* @param options - Optional configuration options for Morgan. Defines the behavior of the logger like the output stream, buffer duration, etc.
|
|
159
|
+
*/
|
|
160
|
+
addMorgan(format, options) {
|
|
161
|
+
const middleware = (0, middleware_resolver_1.middlewareResolver)("morgan", format, options);
|
|
162
|
+
const middlewareExist = this.middlewareExists("morgan");
|
|
163
|
+
if (middleware && !middlewareExist) {
|
|
164
|
+
this.middlewarePipeline.push({
|
|
165
|
+
timestamp: new Date(),
|
|
166
|
+
middleware,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Adds Cookie Parser middleware to parse the cookie header and populate req.cookies with an object keyed by the cookie names.
|
|
172
|
+
*
|
|
173
|
+
* @param secret - A string or array used for signing cookies. This is optional and if not specified, the cookie-parser will not parse signed cookies.
|
|
174
|
+
* @param options - Optional configuration options for Cookie Parser.
|
|
175
|
+
*/
|
|
176
|
+
addCookieParser(secret, options) {
|
|
177
|
+
const middleware = (0, middleware_resolver_1.middlewareResolver)("cookieParser", secret, options);
|
|
178
|
+
const middlewareExist = this.middlewareExists("cookieParser");
|
|
179
|
+
if (middleware && !middlewareExist) {
|
|
180
|
+
this.middlewarePipeline.push({
|
|
181
|
+
timestamp: new Date(),
|
|
182
|
+
middleware,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Adds Cookie Session middleware to enable cookie-based sessions.
|
|
188
|
+
*
|
|
189
|
+
* @param options - Optional configuration options for Cookie Session. Defines the behavior of cookie sessions like the name of the cookie, keys to sign the cookie, etc.
|
|
190
|
+
*/
|
|
191
|
+
addCookieSession(options) {
|
|
192
|
+
const middleware = (0, middleware_resolver_1.middlewareResolver)("cookieSession", options);
|
|
193
|
+
const middlewareExist = this.middlewareExists("cookieSession");
|
|
194
|
+
if (middleware && !middlewareExist) {
|
|
195
|
+
this.middlewarePipeline.push({
|
|
196
|
+
timestamp: new Date(),
|
|
197
|
+
middleware,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Adds a middleware to serve the favicon to the middleware collection.
|
|
203
|
+
* The favicon is the icon that is displayed in the browser tab for the application.
|
|
204
|
+
*
|
|
205
|
+
* @param path - The path to the favicon file.
|
|
206
|
+
* @param options - Optional configuration options for serving the favicon. Defines the behavior of the favicon middleware like cache control, custom headers, etc.
|
|
207
|
+
*/
|
|
208
|
+
addServeFavicon(path, options) {
|
|
209
|
+
const middleware = (0, middleware_resolver_1.middlewareResolver)("serveFavicon", path, options);
|
|
210
|
+
const middlewareExist = this.middlewareExists("serveFavicon");
|
|
211
|
+
if (middleware && !middlewareExist) {
|
|
212
|
+
this.middlewarePipeline.push({
|
|
213
|
+
timestamp: new Date(),
|
|
214
|
+
middleware,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
setupMulter(options) {
|
|
219
|
+
const multerMiddleware = (0, middleware_resolver_1.middlewareResolver)("multer", options);
|
|
220
|
+
const middlewareExist = this.middlewareExists("multer");
|
|
221
|
+
if (multerMiddleware && !middlewareExist) {
|
|
222
|
+
return multerMiddleware;
|
|
223
|
+
}
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Adds a middleware to enhance security by setting various HTTP headers.
|
|
228
|
+
*
|
|
229
|
+
* @param options - Optional configuration options for Helmet.
|
|
230
|
+
*
|
|
231
|
+
*/
|
|
232
|
+
addHelmet(options) {
|
|
233
|
+
const middleware = (0, middleware_resolver_1.middlewareResolver)("helmet", options);
|
|
234
|
+
const middlewareExist = this.middlewareExists("helmet");
|
|
235
|
+
if (middleware && !middlewareExist) {
|
|
236
|
+
this.middlewarePipeline.push({
|
|
237
|
+
timestamp: new Date(),
|
|
238
|
+
middleware,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Add a middleware to enable express-session.
|
|
244
|
+
*
|
|
245
|
+
* @param options - Optional configuration options for Session.
|
|
246
|
+
*
|
|
247
|
+
*/
|
|
248
|
+
addSession(options) {
|
|
249
|
+
const middleware = (0, middleware_resolver_1.middlewareResolver)("session", options);
|
|
250
|
+
const middlewareExist = this.middlewareExists("session");
|
|
251
|
+
if (middleware && !middlewareExist) {
|
|
252
|
+
this.middlewarePipeline.push({
|
|
253
|
+
timestamp: new Date(),
|
|
254
|
+
middleware,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Configures the error handling middleware for the application.
|
|
260
|
+
*
|
|
261
|
+
* @param errorHandling - The Express error handler function that takes care of processing errors and formulating the response.
|
|
262
|
+
*/
|
|
263
|
+
setErrorHandler(errorHandling) {
|
|
264
|
+
if (!errorHandling) {
|
|
265
|
+
this.errorHandler = error_handler_middleware_1.default;
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
this.errorHandler = errorHandling;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Adds a middleware to serve static files from the specified root directory.
|
|
273
|
+
* Allows the application to serve files like images, CSS, JavaScript, etc.
|
|
274
|
+
*
|
|
275
|
+
* @param root - The root directory from which the static assets are to be served.
|
|
276
|
+
* @param options - Optional configuration options for serving static files. Defines behavior like cache control, custom headers, etc.
|
|
277
|
+
*/
|
|
278
|
+
serveStatic(root, options) {
|
|
279
|
+
const middlewareExist = this.middlewareExists("serveStatic");
|
|
280
|
+
if (middlewareExist) {
|
|
281
|
+
this.logger.warn(`[serveStatic] already exists. Skipping...`, "configure-service");
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
this.middlewarePipeline.push({
|
|
285
|
+
timestamp: new Date(),
|
|
286
|
+
middleware: express_1.default.static(root, options),
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Helper method to add middleware configuration objects to the middleware collection.
|
|
292
|
+
* @param middleware - The middleware configuration object to be added to the middleware collection.
|
|
293
|
+
* @returns void
|
|
294
|
+
*/
|
|
295
|
+
addConfigMiddleware(middleware) {
|
|
296
|
+
// eslint-disable-next-line no-case-declarations
|
|
297
|
+
const config = middleware;
|
|
298
|
+
let routeExists = false;
|
|
299
|
+
if (config.middlewares.length === 0) {
|
|
300
|
+
this.logger.warn(`No middlewares in the route [${config.path}]. Skipping...`, "configure-service");
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
if (this.middlewarePipeline.length === 0) {
|
|
304
|
+
this.middlewarePipeline.push({
|
|
305
|
+
timestamp: new Date(),
|
|
306
|
+
middleware: config,
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
this.middlewarePipeline.forEach((m) => {
|
|
311
|
+
if (m.middleware.path === config.path) {
|
|
312
|
+
this.logger.warn(`[${config.path}] route already exists. Skipping...`, "configure-service");
|
|
313
|
+
routeExists = true;
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
if (!routeExists) {
|
|
317
|
+
this.middlewarePipeline.push({
|
|
318
|
+
timestamp: new Date(),
|
|
319
|
+
middleware: config,
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Helper method to add express request handler functions to the middleware collection.
|
|
326
|
+
* @param middleware - The express request handler function to be added to the middleware collection.
|
|
327
|
+
* @returns void
|
|
328
|
+
*/
|
|
329
|
+
addExpressHandlerMiddleware(middleware) {
|
|
330
|
+
let middlewareExists = false;
|
|
331
|
+
if (this.middlewarePipeline.length === 0) {
|
|
332
|
+
this.middlewarePipeline.push({
|
|
333
|
+
timestamp: new Date(),
|
|
334
|
+
middleware,
|
|
335
|
+
});
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
this.middlewarePipeline.forEach((m) => {
|
|
339
|
+
const mType = this.getMiddlewareType(m.middleware);
|
|
340
|
+
if (mType === MiddlewareType.ExpressHandler) {
|
|
341
|
+
if (m.middleware?.name === middleware?.name) {
|
|
342
|
+
this.logger.warn(`[${middleware?.name}] already exists. Skipping...`, "configure-service");
|
|
343
|
+
middlewareExists = true;
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
if (!middlewareExists) {
|
|
349
|
+
this.middlewarePipeline.push({
|
|
350
|
+
timestamp: new Date(),
|
|
351
|
+
middleware,
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Helper method to add custom Expresso middleware to the middleware collection.
|
|
357
|
+
* @param middleware - The custom Expresso middleware to be added to the middleware collection.
|
|
358
|
+
* @returns void
|
|
359
|
+
*/
|
|
360
|
+
addIExpressoMiddleware(middleware) {
|
|
361
|
+
let middlewareExists = false;
|
|
362
|
+
if (this.middlewarePipeline.length === 0) {
|
|
363
|
+
this.middlewarePipeline.push({
|
|
364
|
+
timestamp: new Date(),
|
|
365
|
+
middleware,
|
|
366
|
+
});
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
this.middlewarePipeline.forEach((m) => {
|
|
370
|
+
const mType = this.getMiddlewareType(m.middleware);
|
|
371
|
+
if (mType === MiddlewareType.IExpressoMiddleware) {
|
|
372
|
+
if (m.middleware.constructor.name ===
|
|
373
|
+
middleware.constructor.name) {
|
|
374
|
+
this.logger.warn(`[${middleware.constructor.name}] already exists. Skipping...`, "configure-service");
|
|
375
|
+
middlewareExists = true;
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
if (!middlewareExists) {
|
|
381
|
+
this.middlewarePipeline.push({
|
|
382
|
+
timestamp: new Date(),
|
|
383
|
+
middleware,
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Adds a middleware to the middleware collection.
|
|
389
|
+
*
|
|
390
|
+
* @param options - The Express request handler function to be added to the middleware collection, or a middleware configuration object
|
|
391
|
+
* that is composed by a route and an expressjs handler, or a custom Expresso middleware.
|
|
392
|
+
*
|
|
393
|
+
* @example Express Handler
|
|
394
|
+
* const middleware = (req, res, next) => {
|
|
395
|
+
* // Your middleware logic here
|
|
396
|
+
* next();
|
|
397
|
+
* }
|
|
398
|
+
*
|
|
399
|
+
* @example Middleware Configuration Object
|
|
400
|
+
* const middleware = {
|
|
401
|
+
* path: "/",
|
|
402
|
+
* middlewares: [] // Array of Express Handlers
|
|
403
|
+
* }
|
|
404
|
+
*
|
|
405
|
+
* @example Expresso Middleware
|
|
406
|
+
* class CustomMiddleware implements IExpressoMiddleware {
|
|
407
|
+
* use(req: Request, res: Response, next: NextFunction): Promise<void> | void {
|
|
408
|
+
* // Your middleware logic here
|
|
409
|
+
* next();
|
|
410
|
+
* }
|
|
411
|
+
* }
|
|
412
|
+
*/
|
|
413
|
+
addMiddleware(options) {
|
|
414
|
+
switch (this.getMiddlewareType(options)) {
|
|
415
|
+
case MiddlewareType.Config:
|
|
416
|
+
this.addConfigMiddleware(options);
|
|
417
|
+
break;
|
|
418
|
+
case MiddlewareType.ExpressHandler:
|
|
419
|
+
this.addExpressHandlerMiddleware(options);
|
|
420
|
+
break;
|
|
421
|
+
case MiddlewareType.IExpressoMiddleware:
|
|
422
|
+
this.addIExpressoMiddleware(options);
|
|
423
|
+
break;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Retrieves middleware pipeline in the order they were added.
|
|
428
|
+
*
|
|
429
|
+
* @returns An array of Express request handlers representing the middlewares.
|
|
430
|
+
*/
|
|
431
|
+
getMiddlewarePipeline() {
|
|
432
|
+
return this.middlewarePipeline.sort((a, b) => {
|
|
433
|
+
return a.timestamp.getTime() - b.timestamp.getTime();
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* View middleware pipeline formatted.
|
|
438
|
+
* @returns void
|
|
439
|
+
*/
|
|
440
|
+
viewMiddlewarePipeline() {
|
|
441
|
+
const sortedMiddlewarePipeline = this.getMiddlewarePipeline();
|
|
442
|
+
const formattedPipeline = sortedMiddlewarePipeline.map((m) => {
|
|
443
|
+
const middlewareType = this.getMiddlewareType(m.middleware);
|
|
444
|
+
if (middlewareType === MiddlewareType.Config) {
|
|
445
|
+
const middlewareNames = m.middleware.middlewares.map((mw) => mw?.name || "Anonymous");
|
|
446
|
+
return {
|
|
447
|
+
timestamp: m.timestamp.toISOString(),
|
|
448
|
+
path: m.middleware.path,
|
|
449
|
+
middleware: `[${middlewareNames.join(", ")}]`,
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
else if (middlewareType === MiddlewareType.IExpressoMiddleware) {
|
|
453
|
+
return {
|
|
454
|
+
timestamp: m.timestamp.toISOString(),
|
|
455
|
+
path: m.middleware.path ?? "Global",
|
|
456
|
+
middleware: m.middleware.constructor.name,
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
return {
|
|
461
|
+
timestamp: m.timestamp.toISOString(),
|
|
462
|
+
path: "Global",
|
|
463
|
+
middleware: m.middleware?.name,
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
});
|
|
467
|
+
console.table(formattedPipeline);
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Gets the configured error handler middleware.
|
|
471
|
+
*
|
|
472
|
+
* @returns The error handler middleware.
|
|
473
|
+
*/
|
|
474
|
+
getErrorHandler() {
|
|
475
|
+
return this.errorHandler;
|
|
476
|
+
}
|
|
477
|
+
};
|
|
478
|
+
Middleware = Middleware_1 = __decorate([
|
|
479
|
+
(0, index_1.provideSingleton)(Middleware_1)
|
|
480
|
+
], Middleware);
|
|
481
|
+
exports.Middleware = Middleware;
|