@expressots/core 2.3.0 → 2.5.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.
Files changed (223) hide show
  1. package/lib/CHANGELOG.md +71 -26
  2. package/lib/cjs/application/app-container.js +10 -2
  3. package/lib/cjs/application/application-factory.js +33 -44
  4. package/lib/cjs/console/console.js +26 -39
  5. package/lib/cjs/controller/base-controller.js +2 -13
  6. package/lib/cjs/error/app-error.js +11 -0
  7. package/lib/cjs/error/report.js +4 -1
  8. package/lib/cjs/error/status-code.js +8 -2
  9. package/lib/cjs/middleware/middleware-resolver.js +16 -13
  10. package/lib/cjs/middleware/middleware-service.js +33 -11
  11. package/lib/cjs/provider/dto-validator/dto-validator.provider.js +3 -12
  12. package/lib/cjs/provider/environment/env-validator.provider.js +2 -2
  13. package/lib/cjs/provider/logger/logger-service.js +1 -0
  14. package/lib/cjs/provider/provider-service.js +2 -0
  15. package/lib/cjs/types/application/app-container.d.ts +0 -1
  16. package/lib/cjs/types/application/application-factory.d.ts +0 -1
  17. package/lib/cjs/types/application/index.d.ts +0 -1
  18. package/lib/cjs/types/common/color-service.provider.d.ts +0 -1
  19. package/lib/cjs/types/common/index.d.ts +0 -1
  20. package/lib/cjs/types/common/package-resolver.provider.d.ts +0 -1
  21. package/lib/cjs/types/common/project-config.provider.d.ts +0 -1
  22. package/lib/cjs/types/console/console.d.ts +0 -1
  23. package/lib/cjs/types/console/index.d.ts +0 -1
  24. package/lib/cjs/types/container-module/container-module.d.ts +0 -1
  25. package/lib/cjs/types/container-module/index.d.ts +0 -1
  26. package/lib/cjs/types/controller/base-controller.d.ts +2 -3
  27. package/lib/cjs/types/controller/index.d.ts +0 -1
  28. package/lib/cjs/types/decorator/index.d.ts +0 -1
  29. package/lib/cjs/types/decorator/scope-binding.d.ts +0 -1
  30. package/lib/cjs/types/error/app-error.d.ts +0 -1
  31. package/lib/cjs/types/error/error-handler-middleware.d.ts +0 -1
  32. package/lib/cjs/types/error/index.d.ts +0 -1
  33. package/lib/cjs/types/error/report.d.ts +0 -1
  34. package/lib/cjs/types/error/status-code.d.ts +0 -1
  35. package/lib/cjs/types/index.d.ts +0 -1
  36. package/lib/cjs/types/middleware/index.d.ts +2 -1
  37. package/lib/cjs/types/middleware/interfaces/body-parser.interface.d.ts +0 -1
  38. package/lib/cjs/types/middleware/interfaces/compression.interface.d.ts +0 -1
  39. package/lib/cjs/types/middleware/interfaces/cookie-parser.interface.d.ts +0 -1
  40. package/lib/cjs/types/middleware/interfaces/cookie-session/cookie-session.interface.d.ts +0 -1
  41. package/lib/cjs/types/middleware/interfaces/cookie-session/keygrip.interface.d.ts +0 -1
  42. package/lib/cjs/types/middleware/interfaces/cors.interface.d.ts +0 -1
  43. package/lib/cjs/types/middleware/interfaces/express-rate-limit.interface.d.ts +292 -0
  44. package/lib/cjs/types/middleware/interfaces/helmet.interface.d.ts +210 -0
  45. package/lib/cjs/types/middleware/interfaces/morgan.interface.d.ts +0 -1
  46. package/lib/cjs/types/middleware/interfaces/serve-favicon.interface.d.ts +0 -1
  47. package/lib/cjs/types/middleware/interfaces/serve-static.interface.d.ts +0 -1
  48. package/lib/cjs/types/middleware/middleware-resolver.d.ts +0 -1
  49. package/lib/cjs/types/middleware/middleware-service.d.ts +24 -1
  50. package/lib/cjs/types/provider/dto-validator/dto-validator.provider.d.ts +0 -1
  51. package/lib/cjs/types/provider/environment/env-validator.provider.d.ts +0 -1
  52. package/lib/cjs/types/provider/index.d.ts +0 -1
  53. package/lib/cjs/types/provider/logger/logger-service.d.ts +0 -1
  54. package/lib/cjs/types/provider/provider-service.d.ts +0 -1
  55. package/lib/cjs/types/render/handlebars.interface.d.ts +0 -1
  56. package/lib/cjs/types/render/index.d.ts +0 -1
  57. package/lib/cjs/types/render/render.type.d.ts +0 -1
  58. package/lib/package.json +7 -8
  59. package/package.json +7 -8
  60. package/lib/cjs/types/application/app-container.d.ts.map +0 -1
  61. package/lib/cjs/types/application/application-factory.d.ts.map +0 -1
  62. package/lib/cjs/types/application/index.d.ts.map +0 -1
  63. package/lib/cjs/types/common/color-service.provider.d.ts.map +0 -1
  64. package/lib/cjs/types/common/index.d.ts.map +0 -1
  65. package/lib/cjs/types/common/package-resolver.provider.d.ts.map +0 -1
  66. package/lib/cjs/types/common/project-config.provider.d.ts.map +0 -1
  67. package/lib/cjs/types/console/console.d.ts.map +0 -1
  68. package/lib/cjs/types/console/index.d.ts.map +0 -1
  69. package/lib/cjs/types/container-module/container-module.d.ts.map +0 -1
  70. package/lib/cjs/types/container-module/index.d.ts.map +0 -1
  71. package/lib/cjs/types/controller/base-controller.d.ts.map +0 -1
  72. package/lib/cjs/types/controller/index.d.ts.map +0 -1
  73. package/lib/cjs/types/decorator/index.d.ts.map +0 -1
  74. package/lib/cjs/types/decorator/scope-binding.d.ts.map +0 -1
  75. package/lib/cjs/types/error/app-error.d.ts.map +0 -1
  76. package/lib/cjs/types/error/error-handler-middleware.d.ts.map +0 -1
  77. package/lib/cjs/types/error/index.d.ts.map +0 -1
  78. package/lib/cjs/types/error/report.d.ts.map +0 -1
  79. package/lib/cjs/types/error/status-code.d.ts.map +0 -1
  80. package/lib/cjs/types/index.d.ts.map +0 -1
  81. package/lib/cjs/types/middleware/index.d.ts.map +0 -1
  82. package/lib/cjs/types/middleware/interfaces/body-parser.interface.d.ts.map +0 -1
  83. package/lib/cjs/types/middleware/interfaces/compression.interface.d.ts.map +0 -1
  84. package/lib/cjs/types/middleware/interfaces/cookie-parser.interface.d.ts.map +0 -1
  85. package/lib/cjs/types/middleware/interfaces/cookie-session/cookie-session.interface.d.ts.map +0 -1
  86. package/lib/cjs/types/middleware/interfaces/cookie-session/keygrip.interface.d.ts.map +0 -1
  87. package/lib/cjs/types/middleware/interfaces/cors.interface.d.ts.map +0 -1
  88. package/lib/cjs/types/middleware/interfaces/morgan.interface.d.ts.map +0 -1
  89. package/lib/cjs/types/middleware/interfaces/serve-favicon.interface.d.ts.map +0 -1
  90. package/lib/cjs/types/middleware/interfaces/serve-static.interface.d.ts.map +0 -1
  91. package/lib/cjs/types/middleware/middleware-resolver.d.ts.map +0 -1
  92. package/lib/cjs/types/middleware/middleware-service.d.ts.map +0 -1
  93. package/lib/cjs/types/provider/dto-validator/dto-validator.provider.d.ts.map +0 -1
  94. package/lib/cjs/types/provider/environment/env-validator.provider.d.ts.map +0 -1
  95. package/lib/cjs/types/provider/index.d.ts.map +0 -1
  96. package/lib/cjs/types/provider/logger/logger-service.d.ts.map +0 -1
  97. package/lib/cjs/types/provider/provider-service.d.ts.map +0 -1
  98. package/lib/cjs/types/render/handlebars.interface.d.ts.map +0 -1
  99. package/lib/cjs/types/render/index.d.ts.map +0 -1
  100. package/lib/cjs/types/render/render.type.d.ts.map +0 -1
  101. package/lib/esm/application/app-container.js +0 -82
  102. package/lib/esm/application/application-factory.js +0 -72
  103. package/lib/esm/application/index.js +0 -7
  104. package/lib/esm/common/color-service.provider.js +0 -46
  105. package/lib/esm/common/package-resolver.provider.js +0 -35
  106. package/lib/esm/console/console.js +0 -61
  107. package/lib/esm/console/index.js +0 -5
  108. package/lib/esm/container-module/container-module.js +0 -111
  109. package/lib/esm/container-module/index.js +0 -6
  110. package/lib/esm/controller/base-controller.js +0 -75
  111. package/lib/esm/controller/index.js +0 -5
  112. package/lib/esm/decorator/index.js +0 -17
  113. package/lib/esm/decorator/scope-binding.js +0 -44
  114. package/lib/esm/error/app-error.js +0 -37
  115. package/lib/esm/error/error-handler-middleware.js +0 -28
  116. package/lib/esm/error/index.js +0 -9
  117. package/lib/esm/error/report.js +0 -57
  118. package/lib/esm/error/status-code.js +0 -89
  119. package/lib/esm/index.mjs +0 -26
  120. package/lib/esm/middleware/index.js +0 -29
  121. package/lib/esm/middleware/interfaces/body-parser.interface.js +0 -2
  122. package/lib/esm/middleware/interfaces/compression.interface.js +0 -2
  123. package/lib/esm/middleware/interfaces/cookie-parser.interface.js +0 -2
  124. package/lib/esm/middleware/interfaces/cookie-session/cookie-session.interface.js +0 -2
  125. package/lib/esm/middleware/interfaces/cookie-session/keygrip.interface.js +0 -2
  126. package/lib/esm/middleware/interfaces/cors.interface.js +0 -2
  127. package/lib/esm/middleware/interfaces/morgan.interface.js +0 -2
  128. package/lib/esm/middleware/interfaces/serve-favicon.interface.js +0 -2
  129. package/lib/esm/middleware/interfaces/serve-static.interface.js +0 -2
  130. package/lib/esm/middleware/middleware-resolver.js +0 -69
  131. package/lib/esm/middleware/middleware-service.js +0 -258
  132. package/lib/esm/provider/dto-validator/dto-validator.provider.js +0 -53
  133. package/lib/esm/provider/environment/env-validator.provider.js +0 -96
  134. package/lib/esm/provider/index.js +0 -11
  135. package/lib/esm/provider/logger/logger-service.js +0 -115
  136. package/lib/esm/provider/provider-service.js +0 -38
  137. package/lib/esm/render/handlebars.interface.js +0 -2
  138. package/lib/esm/render/index.js +0 -2
  139. package/lib/esm/render/render.type.js +0 -2
  140. package/lib/esm/types/application/app-container.d.ts +0 -126
  141. package/lib/esm/types/application/app-container.d.ts.map +0 -1
  142. package/lib/esm/types/application/application-factory.d.ts +0 -34
  143. package/lib/esm/types/application/application-factory.d.ts.map +0 -1
  144. package/lib/esm/types/application/index.d.ts +0 -3
  145. package/lib/esm/types/application/index.d.ts.map +0 -1
  146. package/lib/esm/types/common/color-service.provider.d.ts +0 -30
  147. package/lib/esm/types/common/color-service.provider.d.ts.map +0 -1
  148. package/lib/esm/types/common/index.d.ts +0 -2
  149. package/lib/esm/types/common/index.d.ts.map +0 -1
  150. package/lib/esm/types/common/package-resolver.provider.d.ts +0 -9
  151. package/lib/esm/types/common/package-resolver.provider.d.ts.map +0 -1
  152. package/lib/esm/types/common/project-config.provider.d.ts +0 -48
  153. package/lib/esm/types/common/project-config.provider.d.ts.map +0 -1
  154. package/lib/esm/types/console/console.d.ts +0 -28
  155. package/lib/esm/types/console/console.d.ts.map +0 -1
  156. package/lib/esm/types/console/index.d.ts +0 -2
  157. package/lib/esm/types/console/index.d.ts.map +0 -1
  158. package/lib/esm/types/container-module/container-module.d.ts +0 -29
  159. package/lib/esm/types/container-module/container-module.d.ts.map +0 -1
  160. package/lib/esm/types/container-module/index.d.ts +0 -2
  161. package/lib/esm/types/container-module/index.d.ts.map +0 -1
  162. package/lib/esm/types/controller/base-controller.d.ts +0 -49
  163. package/lib/esm/types/controller/base-controller.d.ts.map +0 -1
  164. package/lib/esm/types/controller/index.d.ts +0 -2
  165. package/lib/esm/types/controller/index.d.ts.map +0 -1
  166. package/lib/esm/types/decorator/index.d.ts +0 -2
  167. package/lib/esm/types/decorator/index.d.ts.map +0 -1
  168. package/lib/esm/types/decorator/scope-binding.d.ts +0 -34
  169. package/lib/esm/types/decorator/scope-binding.d.ts.map +0 -1
  170. package/lib/esm/types/error/app-error.d.ts +0 -30
  171. package/lib/esm/types/error/app-error.d.ts.map +0 -1
  172. package/lib/esm/types/error/error-handler-middleware.d.ts +0 -12
  173. package/lib/esm/types/error/error-handler-middleware.d.ts.map +0 -1
  174. package/lib/esm/types/error/index.d.ts +0 -4
  175. package/lib/esm/types/error/index.d.ts.map +0 -1
  176. package/lib/esm/types/error/report.d.ts +0 -26
  177. package/lib/esm/types/error/report.d.ts.map +0 -1
  178. package/lib/esm/types/error/status-code.d.ts +0 -137
  179. package/lib/esm/types/error/status-code.d.ts.map +0 -1
  180. package/lib/esm/types/index.d.ts +0 -11
  181. package/lib/esm/types/index.d.ts.map +0 -1
  182. package/lib/esm/types/middleware/index.d.ts +0 -10
  183. package/lib/esm/types/middleware/index.d.ts.map +0 -1
  184. package/lib/esm/types/middleware/interfaces/body-parser.interface.d.ts +0 -34
  185. package/lib/esm/types/middleware/interfaces/body-parser.interface.d.ts.map +0 -1
  186. package/lib/esm/types/middleware/interfaces/compression.interface.d.ts +0 -99
  187. package/lib/esm/types/middleware/interfaces/compression.interface.d.ts.map +0 -1
  188. package/lib/esm/types/middleware/interfaces/cookie-parser.interface.d.ts +0 -10
  189. package/lib/esm/types/middleware/interfaces/cookie-parser.interface.d.ts.map +0 -1
  190. package/lib/esm/types/middleware/interfaces/cookie-session/cookie-session.interface.d.ts +0 -58
  191. package/lib/esm/types/middleware/interfaces/cookie-session/cookie-session.interface.d.ts.map +0 -1
  192. package/lib/esm/types/middleware/interfaces/cookie-session/keygrip.interface.d.ts +0 -28
  193. package/lib/esm/types/middleware/interfaces/cookie-session/keygrip.interface.d.ts.map +0 -1
  194. package/lib/esm/types/middleware/interfaces/cors.interface.d.ts +0 -58
  195. package/lib/esm/types/middleware/interfaces/cors.interface.d.ts.map +0 -1
  196. package/lib/esm/types/middleware/interfaces/morgan.interface.d.ts +0 -41
  197. package/lib/esm/types/middleware/interfaces/morgan.interface.d.ts.map +0 -1
  198. package/lib/esm/types/middleware/interfaces/serve-favicon.interface.d.ts +0 -12
  199. package/lib/esm/types/middleware/interfaces/serve-favicon.interface.d.ts.map +0 -1
  200. package/lib/esm/types/middleware/interfaces/serve-static.interface.d.ts +0 -71
  201. package/lib/esm/types/middleware/interfaces/serve-static.interface.d.ts.map +0 -1
  202. package/lib/esm/types/middleware/middleware-resolver.d.ts +0 -12
  203. package/lib/esm/types/middleware/middleware-resolver.d.ts.map +0 -1
  204. package/lib/esm/types/middleware/middleware-service.d.ts +0 -237
  205. package/lib/esm/types/middleware/middleware-service.d.ts.map +0 -1
  206. package/lib/esm/types/provider/dto-validator/dto-validator.provider.d.ts +0 -12
  207. package/lib/esm/types/provider/dto-validator/dto-validator.provider.d.ts.map +0 -1
  208. package/lib/esm/types/provider/environment/env-validator.provider.d.ts +0 -31
  209. package/lib/esm/types/provider/environment/env-validator.provider.d.ts.map +0 -1
  210. package/lib/esm/types/provider/index.d.ts +0 -5
  211. package/lib/esm/types/provider/index.d.ts.map +0 -1
  212. package/lib/esm/types/provider/logger/logger-service.d.ts +0 -50
  213. package/lib/esm/types/provider/logger/logger-service.d.ts.map +0 -1
  214. package/lib/esm/types/provider/provider-service.d.ts +0 -31
  215. package/lib/esm/types/provider/provider-service.d.ts.map +0 -1
  216. package/lib/esm/types/render/handlebars.interface.d.ts +0 -47
  217. package/lib/esm/types/render/handlebars.interface.d.ts.map +0 -1
  218. package/lib/esm/types/render/index.d.ts +0 -3
  219. package/lib/esm/types/render/index.d.ts.map +0 -1
  220. package/lib/esm/types/render/render.type.d.ts +0 -13
  221. package/lib/esm/types/render/render.type.d.ts.map +0 -1
  222. /package/lib/{esm/common/index.js → cjs/middleware/interfaces/express-rate-limit.interface.js} +0 -0
  223. /package/lib/{esm/common/project-config.provider.js → cjs/middleware/interfaces/helmet.interface.js} +0 -0
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,69 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.middlewareResolver = void 0;
4
- const logger_service_1 = require("../provider/logger/logger-service");
5
- /**
6
- * MiddlewareResolver class is responsible for resolving and retrieving Express middlewares
7
- * by their names. It maintains a registry of available middlewares and provides
8
- * a method to retrieve them by their name. If a middleware is not installed, it logs
9
- * an informative message.
10
- */
11
- class MiddlewareResolver {
12
- logger;
13
- constructor() {
14
- this.logger = new logger_service_1.Logger();
15
- }
16
- /**
17
- * A registry object mapping middleware names to their corresponding package names.
18
- * It is used to identify and require the middleware from the current working directory.
19
- */
20
- middlewareRegistry = {
21
- cors: "cors",
22
- compression: "compression",
23
- cookieParser: "cookie-parser",
24
- cookieSession: "cookie-session",
25
- serveFavicon: "serve-favicon",
26
- morgan: "morgan",
27
- // Add other middlewares
28
- };
29
- /**
30
- * Retrieves a middleware by its name and optionally configures it with provided options.
31
- *
32
- * @param {string} middlewareName - The name of the middleware to be retrieved.
33
- * @param {...any} options - Optional arguments to configure the middleware.
34
- * @returns {express.RequestHandler | null} - Returns the configured middleware or null if not found or not installed.
35
- */
36
- getMiddleware(middlewareName, ...options) {
37
- const packageName = this.middlewareRegistry[middlewareName];
38
- if (!packageName) {
39
- this.logger.error(`Middleware ${packageName} not found`, "middleware-resolver");
40
- return null;
41
- }
42
- let hasMiddleware = "";
43
- try {
44
- hasMiddleware = require.resolve(packageName, { paths: [process.cwd()] });
45
- }
46
- catch (error) {
47
- this.logger.warn(`Middleware [${packageName}] not installed. Please install it using your package manager.`, "middleware-resolver");
48
- }
49
- if (hasMiddleware) {
50
- // eslint-disable-next-line @typescript-eslint/no-var-requires
51
- const middleware = require(hasMiddleware);
52
- return middleware(...options) || middleware.default(...options);
53
- }
54
- return null;
55
- }
56
- }
57
- /**
58
- * A utility function that wraps the creation and retrieval of middleware.
59
- * It creates a new instance of MiddlewareResolver and calls the getMiddleware method.
60
- *
61
- * @param {string} middleware - The name of the middleware to be retrieved.
62
- * @param {...any} options - Optional arguments to configure the middleware.
63
- * @returns {express.RequestHandler | null} - Returns the configured middleware or null if not found or not installed.
64
- */
65
- function middlewareResolver(middleware, ...options) {
66
- const resolver = new MiddlewareResolver();
67
- return resolver.getMiddleware(middleware, ...options);
68
- }
69
- exports.middlewareResolver = middlewareResolver;
@@ -1,258 +0,0 @@
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 logger_service_1 = require("../provider/logger/logger-service");
18
- const middleware_resolver_1 = require("./middleware-resolver");
19
- /**
20
- * Singleton class that implements the IConfigure interface.
21
- * Manages the middleware configuration for the application,
22
- * including adding Body Parser and retrieving all configured middlewares.
23
- *
24
- * @see IConfigure
25
- */
26
- let Middleware = Middleware_1 = class Middleware {
27
- middlewarePipeline = [];
28
- errorHandler;
29
- logger = new logger_service_1.Logger();
30
- /**
31
- * Checks if a middleware with the given name exists in the middleware collection.
32
- *
33
- * @param middlewareName - The name of the middleware to be checked.
34
- *
35
- * @returns A boolean value indicating whether the middleware exists or not.
36
- */
37
- middlewareExists(middlewareName) {
38
- const middlewareIndex = this.middlewarePipeline.findIndex((m) => typeof m.middleware === "object"
39
- ? m.middleware.middlewares.some((mw) => mw?.name === middlewareName)
40
- : m.middleware?.name === middlewareName);
41
- return middlewareIndex !== -1;
42
- }
43
- /**
44
- * Adds a Body Parser middleware to the middleware collection using the given options.
45
- *
46
- * @param options - Optional configuration options for the JSON body parser.
47
- */
48
- addBodyParser(options) {
49
- const middlewareExist = this.middlewareExists("jsonParser");
50
- if (middlewareExist) {
51
- this.logger.warn(`[jsonParser] already exists. Skipping...`, "configure-service");
52
- }
53
- else {
54
- this.middlewarePipeline.push({
55
- timestamp: new Date(),
56
- middleware: express_1.default.json(options),
57
- });
58
- }
59
- }
60
- /**
61
- * Adds Cross-Origin Resource Sharing (CORS) middleware to enable or control cross-origin requests.
62
- *
63
- * @param options - Optional configuration options for CORS. Defines the behavior of CORS requests like allowed origins, methods, headers, etc.
64
- */
65
- addCors(options) {
66
- const middleware = (0, middleware_resolver_1.middlewareResolver)("cors", options);
67
- const middlewareExist = this.middlewareExists("cors");
68
- if (middleware && !middlewareExist) {
69
- this.middlewarePipeline.push({
70
- timestamp: new Date(),
71
- middleware,
72
- });
73
- }
74
- }
75
- /**
76
- * Adds Compression middleware to reduce the size of the response body and improve the speed of the client-server communication.
77
- *
78
- * @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.
79
- */
80
- addCompression(options) {
81
- const middleware = (0, middleware_resolver_1.middlewareResolver)("compression", options);
82
- const middlewareExist = this.middlewareExists("compression");
83
- if (middleware && !middlewareExist) {
84
- this.middlewarePipeline.push({
85
- timestamp: new Date(),
86
- middleware,
87
- });
88
- }
89
- }
90
- /**
91
- * Adds Morgan middleware to log HTTP requests.
92
- *
93
- * @param format - The log format. Can be a string or a function.
94
- * @param options - Optional configuration options for Morgan. Defines the behavior of the logger like the output stream, buffer duration, etc.
95
- */
96
- addMorgan(format, options) {
97
- const middleware = (0, middleware_resolver_1.middlewareResolver)("morgan", format, options);
98
- const middlewareExist = this.middlewareExists("morgan");
99
- if (middleware && !middlewareExist) {
100
- this.middlewarePipeline.push({
101
- timestamp: new Date(),
102
- middleware,
103
- });
104
- }
105
- }
106
- /**
107
- * Adds Cookie Parser middleware to parse the cookie header and populate req.cookies with an object keyed by the cookie names.
108
- *
109
- * @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.
110
- * @param options - Optional configuration options for Cookie Parser.
111
- */
112
- addCookieParser(secret, options) {
113
- const middleware = (0, middleware_resolver_1.middlewareResolver)("cookieParser", secret, options);
114
- const middlewareExist = this.middlewareExists("cookieParser");
115
- if (middleware && !middlewareExist) {
116
- this.middlewarePipeline.push({
117
- timestamp: new Date(),
118
- middleware,
119
- });
120
- }
121
- }
122
- /**
123
- * Adds Cookie Session middleware to enable cookie-based sessions.
124
- *
125
- * @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.
126
- */
127
- addCookieSession(options) {
128
- const middleware = (0, middleware_resolver_1.middlewareResolver)("cookieSession", options);
129
- const middlewareExist = this.middlewareExists("cookieSession");
130
- if (middleware && !middlewareExist) {
131
- this.middlewarePipeline.push({
132
- timestamp: new Date(),
133
- middleware,
134
- });
135
- }
136
- }
137
- /**
138
- * Adds a middleware to serve the favicon to the middleware collection.
139
- * The favicon is the icon that is displayed in the browser tab for the application.
140
- *
141
- * @param path - The path to the favicon file.
142
- * @param options - Optional configuration options for serving the favicon. Defines the behavior of the favicon middleware like cache control, custom headers, etc.
143
- */
144
- addServeFavicon(path, options) {
145
- const middleware = (0, middleware_resolver_1.middlewareResolver)("serveFavicon", path, options);
146
- const middlewareExist = this.middlewareExists("serveFavicon");
147
- if (middleware && !middlewareExist) {
148
- this.middlewarePipeline.push({
149
- timestamp: new Date(),
150
- middleware,
151
- });
152
- }
153
- }
154
- /**
155
- * Configures the error handling middleware for the application.
156
- *
157
- * @param errorHandling - The Express error handler function that takes care of processing errors and formulating the response.
158
- */
159
- setErrorHandler(errorHandling) {
160
- if (!errorHandling) {
161
- this.errorHandler = error_handler_middleware_1.default;
162
- }
163
- else {
164
- this.errorHandler = errorHandling;
165
- }
166
- }
167
- /**
168
- * Adds a middleware to serve static files from the specified root directory.
169
- * Allows the application to serve files like images, CSS, JavaScript, etc.
170
- *
171
- * @param root - The root directory from which the static assets are to be served.
172
- * @param options - Optional configuration options for serving static files. Defines behavior like cache control, custom headers, etc.
173
- */
174
- serveStatic(root, options) {
175
- const middlewareExist = this.middlewareExists("serveStatic");
176
- if (middlewareExist) {
177
- this.logger.warn(`[serveStatic] already exists. Skipping...`, "configure-service");
178
- }
179
- else {
180
- this.middlewarePipeline.push({
181
- timestamp: new Date(),
182
- middleware: express_1.default.static(root, options),
183
- });
184
- }
185
- }
186
- /**
187
- * Adds a middleware to the middleware collection.
188
- *
189
- * @param middleware - The Express request handler function to be added to the middleware collection.
190
- *
191
- */
192
- addMiddleware(...middleware) {
193
- let config;
194
- if (typeof middleware[0] === "string") {
195
- const [path, ...middlewares] = middleware;
196
- config = {
197
- path,
198
- middlewares: middlewares,
199
- };
200
- }
201
- else {
202
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
203
- config = {
204
- middlewares: middleware,
205
- };
206
- }
207
- if (config.path) {
208
- // verify if middleware if path already exists
209
- const middlewareIndex = this.middlewarePipeline.findIndex((m) => typeof m.middleware === "object" && m.middleware.path === config.path);
210
- if (middlewareIndex !== -1) {
211
- this.logger.warn(`[${config.path}] route already exists. Skipping...`, "configure-service");
212
- }
213
- else {
214
- this.middlewarePipeline.push({
215
- timestamp: new Date(),
216
- middleware: config,
217
- });
218
- }
219
- }
220
- else {
221
- config.middlewares.forEach((m) => {
222
- const middlewareName = m?.name || "anonymous";
223
- const middlewareExist = this.middlewareExists(middlewareName);
224
- if (middlewareExist) {
225
- this.logger.warn(`[${middlewareName}] already exists. Skipping...`, "configure-service");
226
- }
227
- else {
228
- this.middlewarePipeline.push({
229
- timestamp: new Date(),
230
- middleware: config,
231
- });
232
- }
233
- });
234
- }
235
- }
236
- /**
237
- * Retrieves middleware pipeline in the order they were added.
238
- *
239
- * @returns An array of Express request handlers representing the middlewares.
240
- */
241
- getMiddlewarePipeline() {
242
- return this.middlewarePipeline.sort((a, b) => {
243
- return a.timestamp.getTime() - b.timestamp.getTime();
244
- });
245
- }
246
- /**
247
- * Gets the configured error handler middleware.
248
- *
249
- * @returns The error handler middleware.
250
- */
251
- getErrorHandler() {
252
- return this.errorHandler;
253
- }
254
- };
255
- exports.Middleware = Middleware;
256
- exports.Middleware = Middleware = Middleware_1 = __decorate([
257
- (0, index_1.provideSingleton)(Middleware_1)
258
- ], Middleware);
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ValidateDTO = void 0;
4
- require("reflect-metadata");
5
- const status_code_1 = require("../../error/status-code");
6
- const package_resolver_provider_1 = require("../../common/package-resolver.provider");
7
- const logger_service_1 = require("../logger/logger-service");
8
- /**
9
- * Validate the DTO using class-validator and class-transformer.
10
- * @param type - The type of the DTO to validate.
11
- * @returns A RequestHandler function.
12
- * @throws An exception if the DTO is invalid.
13
- *
14
- */
15
- function ValidateDTO(type) {
16
- return async (req, res, next) => {
17
- const logger = new logger_service_1.Logger();
18
- const classValidator = (0, package_resolver_provider_1.packageResolver)("class-validator");
19
- const classTransformer = (0, package_resolver_provider_1.packageResolver)("class-transformer");
20
- if (!classValidator || !classTransformer) {
21
- return next();
22
- }
23
- try {
24
- const errors = await classValidator.validate(classTransformer.plainToClass(type, req.body));
25
- if (errors.length > 0) {
26
- const DTO = errors.reduce((acc, error) => {
27
- if (error.constraints) {
28
- const propertyName = error.property;
29
- if (!acc.some((e) => e.property === propertyName)) {
30
- acc.push({ property: propertyName, messages: [] });
31
- }
32
- const target = acc.find((e) => e.property === propertyName);
33
- target.messages.push(...Object.values(error.constraints));
34
- }
35
- return acc;
36
- }, []);
37
- res.status(status_code_1.StatusCode.BadRequest).json({
38
- errorCode: status_code_1.StatusCode.BadRequest,
39
- errorMessage: "Bad Request",
40
- DTO,
41
- });
42
- }
43
- else {
44
- next();
45
- }
46
- }
47
- catch (error) {
48
- logger.error(`An exception occurred while validating the DTO: ${error}`, "validate-dto-provider");
49
- next(error);
50
- }
51
- };
52
- }
53
- exports.ValidateDTO = ValidateDTO;
@@ -1,96 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- var EnvValidatorProvider_1;
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.EnvValidatorProvider = void 0;
17
- const fs_1 = __importDefault(require("fs"));
18
- const path_1 = __importDefault(require("path"));
19
- const dotenv_1 = __importDefault(require("dotenv"));
20
- const inversify_binding_decorators_1 = require("inversify-binding-decorators");
21
- const logger_service_1 = require("../logger/logger-service");
22
- /**
23
- * The EnvValidatorProvider class provides utility methods for working with environment variables.
24
- * It validates, loads, and retrieves environment variables from the .env file.
25
- * @provide EnvValidatorProvider
26
- */
27
- let EnvValidatorProvider = EnvValidatorProvider_1 = class EnvValidatorProvider {
28
- logger;
29
- constructor() {
30
- this.logger = new logger_service_1.Logger();
31
- }
32
- /**
33
- * Retrieves the value of an environment variable, or a default value if the variable is not set.
34
- * @param key - The key of the environment variable.
35
- * @param defaultValue - The default value to return if the environment variable is not set.
36
- * @returns The value of the environment variable, or the default value if not set.
37
- */
38
- get(key, defaultValue = undefined) {
39
- return process.env[key] ?? defaultValue;
40
- }
41
- /**
42
- * Validates and loads all environment variables from the .env file.
43
- * If the .env file does not exist or any environment variables are not set, the process will exit with an error.
44
- */
45
- checkAll() {
46
- // Get the full path of the .env file
47
- const envFilePath = path_1.default.join(process.cwd(), ".", ".env");
48
- // Check if the .env file exists
49
- if (!fs_1.default.existsSync(envFilePath)) {
50
- this.logger.error("Environment file .env is not defined.", "env-validator-provider");
51
- process.exit(1);
52
- }
53
- // Load the environment variables from the .env file
54
- const dotenvConfigOutput = dotenv_1.default.config({ path: envFilePath });
55
- const dotEnvParsed = dotenvConfigOutput.parsed;
56
- /* Verify if all environment variables are defined */
57
- let hasError = false;
58
- if (dotEnvParsed) {
59
- for (const key of Object.keys(dotEnvParsed)) {
60
- // Check if the environment variable is not defined or is an empty string
61
- if (!process.env[key] || process.env[key] === "") {
62
- this.logger.error(`Environment variable ${key} is not defined.`, "env-validator-provider");
63
- hasError = true;
64
- }
65
- }
66
- }
67
- if (hasError) {
68
- process.exit(1);
69
- }
70
- }
71
- };
72
- exports.EnvValidatorProvider = EnvValidatorProvider;
73
- exports.EnvValidatorProvider = EnvValidatorProvider = EnvValidatorProvider_1 = __decorate([
74
- (0, inversify_binding_decorators_1.provide)(EnvValidatorProvider_1),
75
- __metadata("design:paramtypes", [])
76
- ], EnvValidatorProvider);
77
- String.prototype.AsBoolean = function () {
78
- switch (this.toLowerCase().trim()) {
79
- case "true":
80
- case "1":
81
- case "yes":
82
- return true;
83
- case "false":
84
- case "0":
85
- case "no":
86
- return false;
87
- default:
88
- return undefined;
89
- }
90
- };
91
- String.prototype.AsNumber = function () {
92
- return Number(this);
93
- };
94
- String.prototype.AsString = function () {
95
- return String(this);
96
- };
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ValidateDTO = exports.Env = exports.Logger = exports.Provider = void 0;
4
- var provider_service_1 = require("./provider-service");
5
- Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return provider_service_1.Provider; } });
6
- var logger_service_1 = require("./logger/logger-service");
7
- Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return logger_service_1.Logger; } });
8
- var env_validator_provider_1 = require("./environment/env-validator.provider");
9
- Object.defineProperty(exports, "Env", { enumerable: true, get: function () { return env_validator_provider_1.EnvValidatorProvider; } });
10
- var dto_validator_provider_1 = require("./dto-validator/dto-validator.provider");
11
- Object.defineProperty(exports, "ValidateDTO", { enumerable: true, get: function () { return dto_validator_provider_1.ValidateDTO; } });
@@ -1,115 +0,0 @@
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
- var Logger_1;
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.Logger = void 0;
14
- const inversify_binding_decorators_1 = require("inversify-binding-decorators");
15
- const color_service_provider_1 = require("../../common/color-service.provider");
16
- /**
17
- * Applies a specified color to a text string.
18
- *
19
- * @param text - The text to be colored.
20
- * @param color - The color to be applied.
21
- * @returns The colored text.
22
- */
23
- function colorText(text, color) {
24
- return `${color_service_provider_1.colorCodes[color]}${text}\x1b[0m`;
25
- }
26
- /**
27
- * Class that provides logging functionality with colorized text.
28
- */
29
- let Logger = Logger_1 = class Logger {
30
- pid;
31
- constructor() {
32
- this.pid = process.pid;
33
- }
34
- /**
35
- * Formats the log message with color, timestamps, and log levels.
36
- *
37
- * @param logLevel - The level of the log (e.g. INFO, WARN).
38
- * @param message - The main log message.
39
- * @param module - Optional module name.
40
- * @returns The formatted log message.
41
- */
42
- formatMessage(logLevel = "NONE", message, module) {
43
- const localDate = new Date();
44
- const options = {
45
- year: "numeric",
46
- month: "2-digit",
47
- day: "2-digit",
48
- hour: "2-digit",
49
- minute: "2-digit",
50
- second: "2-digit",
51
- };
52
- const timestamp = colorText(localDate.toLocaleString(undefined, options).replace(",", ""), "white");
53
- let logColor;
54
- switch (logLevel) {
55
- case "INFO":
56
- logColor = "blue";
57
- break;
58
- case "WARN":
59
- logColor = "yellow";
60
- break;
61
- case "ERROR":
62
- logColor = "red";
63
- break;
64
- default:
65
- logColor = "none";
66
- break;
67
- }
68
- const formattedLogLevel = colorText(logLevel.padEnd(5, " "), logColor);
69
- if (logLevel === "NONE") {
70
- return `${colorText("[ExpressoTS]", "none")} ${timestamp} ${colorText("[PID:" + this.pid + "]", "none")} ${formattedLogLevel} [${colorText(module || "", "none")}] ${colorText(message, logColor)}\n`;
71
- }
72
- return `${colorText("[ExpressoTS]", "green")} ${timestamp} ${colorText("[PID:" + this.pid + "]", "green")} ${formattedLogLevel} [${colorText(module || "", "green")}] ${colorText(message, logColor)}\n`;
73
- }
74
- /**
75
- * Logs a generic message.
76
- *
77
- * @param message - The message to log.
78
- * @param module - Optional module name.
79
- */
80
- msg(message, module) {
81
- process.stdout.write(this.formatMessage("NONE", message, module));
82
- }
83
- /**
84
- * Logs an informational message.
85
- *
86
- * @param message - The message to log.
87
- * @param module - Optional module name.
88
- */
89
- info(message, module) {
90
- process.stdout.write(this.formatMessage("INFO", message, module));
91
- }
92
- /**
93
- * Logs a warning message.
94
- *
95
- * @param message - The message to log.
96
- * @param module - Optional module name.
97
- */
98
- warn(message, module) {
99
- process.stdout.write(this.formatMessage("WARN", message, module));
100
- }
101
- /**
102
- * Logs an error message.
103
- *
104
- * @param message - The message to log.
105
- * @param module - Optional module name.
106
- */
107
- error(message, module) {
108
- process.stderr.write(this.formatMessage("ERROR", message, module));
109
- }
110
- };
111
- exports.Logger = Logger;
112
- exports.Logger = Logger = Logger_1 = __decorate([
113
- (0, inversify_binding_decorators_1.provide)(Logger_1),
114
- __metadata("design:paramtypes", [])
115
- ], Logger);