@expressots/adapter-express 3.0.0-beta.4.2 → 4.0.0-preview.1

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 (239) hide show
  1. package/README.md +39 -96
  2. package/lib/CHANGELOG.md +43 -0
  3. package/lib/README.md +39 -96
  4. package/lib/cjs/adapter-express/application-express.base.js +3 -1
  5. package/lib/cjs/adapter-express/application-express.js +1049 -85
  6. package/lib/cjs/adapter-express/express-utils/conditional-middleware.js +102 -0
  7. package/lib/cjs/adapter-express/express-utils/constants.js +17 -0
  8. package/lib/cjs/adapter-express/express-utils/content-negotiation-decorators.js +129 -0
  9. package/lib/cjs/adapter-express/express-utils/decorators.js +186 -49
  10. package/lib/cjs/adapter-express/express-utils/exception-filter-decorators.js +11 -0
  11. package/lib/cjs/adapter-express/express-utils/guard-context-factory.js +84 -0
  12. package/lib/cjs/adapter-express/express-utils/guard-middleware.js +115 -0
  13. package/lib/cjs/adapter-express/express-utils/guard-utils.js +18 -0
  14. package/lib/cjs/adapter-express/express-utils/http-context-store.js +15 -0
  15. package/lib/cjs/adapter-express/express-utils/http-status-middleware.js +37 -2
  16. package/lib/cjs/adapter-express/express-utils/index.js +67 -1
  17. package/lib/cjs/adapter-express/express-utils/interceptor-middleware.js +132 -0
  18. package/lib/cjs/adapter-express/express-utils/inversify-express-server.js +810 -63
  19. package/lib/cjs/adapter-express/express-utils/lazy-module-middleware.js +241 -0
  20. package/lib/cjs/adapter-express/express-utils/middleware-composition.js +95 -0
  21. package/lib/cjs/adapter-express/express-utils/permission-preloader.middleware.js +48 -0
  22. package/lib/cjs/adapter-express/express-utils/route-constraints.js +95 -0
  23. package/lib/cjs/adapter-express/express-utils/scope-extractor.interface.js +2 -0
  24. package/lib/cjs/adapter-express/express-utils/scope-extractor.js +66 -0
  25. package/lib/cjs/adapter-express/express-utils/setup-authorization.js +71 -0
  26. package/lib/cjs/adapter-express/express-utils/setup-event-system.js +113 -0
  27. package/lib/cjs/adapter-express/express-utils/setup-interceptors.js +103 -0
  28. package/lib/cjs/adapter-express/express-utils/setup-lazy-loading.js +228 -0
  29. package/lib/cjs/adapter-express/express-utils/utils.js +30 -12
  30. package/lib/cjs/adapter-express/express-utils/validation-decorators.js +205 -0
  31. package/lib/cjs/adapter-express/express-utils/validation-service.js +252 -0
  32. package/lib/cjs/adapter-express/index.js +7 -5
  33. package/lib/cjs/adapter-express/micro-api/application-express-micro-route.js +31 -1
  34. package/lib/cjs/adapter-express/micro-api/application-express-micro.js +11 -37
  35. package/lib/cjs/adapter-express/micro-api/gateway/circuit-breaker.js +174 -0
  36. package/lib/cjs/adapter-express/micro-api/gateway/index.js +11 -0
  37. package/lib/cjs/adapter-express/micro-api/gateway/service-proxy.js +214 -0
  38. package/lib/cjs/adapter-express/micro-api/index.js +27 -3
  39. package/lib/cjs/adapter-express/micro-api/micro.js +217 -0
  40. package/lib/cjs/adapter-express/micro-api/queue/index.js +8 -0
  41. package/lib/cjs/adapter-express/micro-api/queue/queue.interface.js +2 -0
  42. package/lib/cjs/adapter-express/micro-api/queue/rabbitmq-consumer.js +255 -0
  43. package/lib/cjs/adapter-express/micro-api/serverless/aws-lambda.adapter.js +183 -0
  44. package/lib/cjs/adapter-express/micro-api/serverless/cloudflare.adapter.js +158 -0
  45. package/lib/cjs/adapter-express/micro-api/serverless/index.js +12 -0
  46. package/lib/cjs/adapter-express/micro-api/serverless/vercel.adapter.js +102 -0
  47. package/lib/cjs/adapter-express/micro-api/service-mesh/index.js +10 -0
  48. package/lib/cjs/adapter-express/micro-api/service-mesh/service-client.js +194 -0
  49. package/lib/cjs/adapter-express/micro-api/service-mesh/service-discovery.js +261 -0
  50. package/lib/cjs/adapter-express/middleware/index.js +21 -0
  51. package/lib/cjs/adapter-express/middleware/request-logging.middleware.js +244 -0
  52. package/lib/cjs/adapter-express/render/engine.js +15 -15
  53. package/lib/cjs/adapter-express/render/index.js +5 -0
  54. package/lib/cjs/adapter-express/studio/index.js +9 -0
  55. package/lib/cjs/adapter-express/studio/studio-integration.js +214 -0
  56. package/lib/cjs/index.js +1 -1
  57. package/lib/cjs/types/adapter-express/application-express.base.d.ts +20 -7
  58. package/lib/cjs/types/adapter-express/application-express.d.ts +273 -32
  59. package/lib/cjs/types/adapter-express/express-utils/base-middleware.d.ts +2 -2
  60. package/lib/cjs/types/adapter-express/express-utils/conditional-middleware.d.ts +97 -0
  61. package/lib/cjs/types/adapter-express/express-utils/constants.d.ts +13 -0
  62. package/lib/cjs/types/adapter-express/express-utils/content-negotiation-decorators.d.ts +94 -0
  63. package/lib/cjs/types/adapter-express/express-utils/decorators.d.ts +54 -6
  64. package/lib/cjs/types/adapter-express/express-utils/exception-filter-decorators.d.ts +6 -0
  65. package/lib/cjs/types/adapter-express/express-utils/guard-context-factory.d.ts +17 -0
  66. package/lib/cjs/types/adapter-express/express-utils/guard-middleware.d.ts +22 -0
  67. package/lib/cjs/types/adapter-express/express-utils/guard-utils.d.ts +11 -0
  68. package/lib/cjs/types/adapter-express/express-utils/http-context-store.d.ts +20 -0
  69. package/lib/cjs/types/adapter-express/express-utils/httpResponseMessage.d.ts +1 -1
  70. package/lib/cjs/types/adapter-express/express-utils/index.d.ts +30 -2
  71. package/lib/cjs/types/adapter-express/express-utils/interceptor-middleware.d.ts +40 -0
  72. package/lib/cjs/types/adapter-express/express-utils/interfaces.d.ts +42 -5
  73. package/lib/cjs/types/adapter-express/express-utils/inversify-express-server.d.ts +114 -2
  74. package/lib/cjs/types/adapter-express/express-utils/lazy-module-middleware.d.ts +122 -0
  75. package/lib/cjs/types/adapter-express/express-utils/middleware-composition.d.ts +85 -0
  76. package/lib/cjs/types/adapter-express/express-utils/permission-preloader.middleware.d.ts +10 -0
  77. package/lib/cjs/types/adapter-express/express-utils/route-constraints.d.ts +89 -0
  78. package/lib/cjs/types/adapter-express/express-utils/scope-extractor.d.ts +21 -0
  79. package/lib/cjs/types/adapter-express/express-utils/scope-extractor.interface.d.ts +12 -0
  80. package/lib/cjs/types/adapter-express/express-utils/setup-authorization.d.ts +34 -0
  81. package/lib/cjs/types/adapter-express/express-utils/setup-event-system.d.ts +118 -0
  82. package/lib/cjs/types/adapter-express/express-utils/setup-interceptors.d.ts +115 -0
  83. package/lib/cjs/types/adapter-express/express-utils/setup-lazy-loading.d.ts +123 -0
  84. package/lib/cjs/types/adapter-express/express-utils/utils.d.ts +17 -2
  85. package/lib/cjs/types/adapter-express/express-utils/validation-decorators.d.ts +145 -0
  86. package/lib/cjs/types/adapter-express/express-utils/validation-service.d.ts +88 -0
  87. package/lib/cjs/types/adapter-express/index.d.ts +6 -4
  88. package/lib/cjs/types/adapter-express/micro-api/application-express-micro-route.d.ts +25 -14
  89. package/lib/cjs/types/adapter-express/micro-api/application-express-micro.d.ts +3 -10
  90. package/lib/cjs/types/adapter-express/micro-api/gateway/circuit-breaker.d.ts +111 -0
  91. package/lib/cjs/types/adapter-express/micro-api/gateway/index.d.ts +5 -0
  92. package/lib/cjs/types/adapter-express/micro-api/gateway/service-proxy.d.ts +83 -0
  93. package/lib/cjs/types/adapter-express/micro-api/index.d.ts +7 -1
  94. package/lib/cjs/types/adapter-express/micro-api/micro.d.ts +66 -0
  95. package/lib/cjs/types/adapter-express/micro-api/queue/index.d.ts +5 -0
  96. package/lib/cjs/types/adapter-express/micro-api/queue/queue.interface.d.ts +60 -0
  97. package/lib/cjs/types/adapter-express/micro-api/queue/rabbitmq-consumer.d.ts +86 -0
  98. package/lib/cjs/types/adapter-express/micro-api/serverless/aws-lambda.adapter.d.ts +77 -0
  99. package/lib/cjs/types/adapter-express/micro-api/serverless/cloudflare.adapter.d.ts +64 -0
  100. package/lib/cjs/types/adapter-express/micro-api/serverless/index.d.ts +6 -0
  101. package/lib/cjs/types/adapter-express/micro-api/serverless/vercel.adapter.d.ts +56 -0
  102. package/lib/cjs/types/adapter-express/micro-api/service-mesh/index.d.ts +5 -0
  103. package/lib/cjs/types/adapter-express/micro-api/service-mesh/service-client.d.ts +122 -0
  104. package/lib/cjs/types/adapter-express/micro-api/service-mesh/service-discovery.d.ts +150 -0
  105. package/lib/cjs/types/adapter-express/middleware/index.d.ts +5 -0
  106. package/lib/cjs/types/adapter-express/middleware/request-logging.middleware.d.ts +65 -0
  107. package/lib/cjs/types/adapter-express/render/index.d.ts +1 -0
  108. package/lib/cjs/types/adapter-express/studio/index.d.ts +1 -0
  109. package/lib/cjs/types/adapter-express/studio/studio-integration.d.ts +92 -0
  110. package/lib/cjs/types/index.d.ts +1 -1
  111. package/lib/esm/adapter-express/application-express.base.js +24 -0
  112. package/lib/esm/adapter-express/application-express.js +1300 -0
  113. package/lib/esm/adapter-express/application-express.types.js +1 -0
  114. package/lib/esm/adapter-express/express-utils/base-middleware.js +19 -0
  115. package/lib/esm/adapter-express/express-utils/conditional-middleware.js +96 -0
  116. package/lib/esm/adapter-express/express-utils/constants.js +63 -0
  117. package/lib/esm/adapter-express/express-utils/content/httpContent.js +6 -0
  118. package/lib/esm/adapter-express/express-utils/content-negotiation-decorators.js +120 -0
  119. package/lib/esm/adapter-express/express-utils/decorators.js +575 -0
  120. package/lib/esm/adapter-express/express-utils/exception-filter-decorators.js +6 -0
  121. package/lib/esm/adapter-express/express-utils/guard-context-factory.js +83 -0
  122. package/lib/esm/adapter-express/express-utils/guard-middleware.js +115 -0
  123. package/lib/esm/adapter-express/express-utils/guard-utils.js +14 -0
  124. package/lib/esm/adapter-express/express-utils/http-context-store.js +10 -0
  125. package/lib/esm/adapter-express/express-utils/http-status-middleware.js +116 -0
  126. package/lib/esm/adapter-express/express-utils/httpResponseMessage.js +29 -0
  127. package/lib/esm/adapter-express/express-utils/index.js +24 -0
  128. package/lib/esm/adapter-express/express-utils/interceptor-middleware.js +130 -0
  129. package/lib/esm/adapter-express/express-utils/interfaces.js +1 -0
  130. package/lib/esm/adapter-express/express-utils/inversify-express-server.js +1031 -0
  131. package/lib/esm/adapter-express/express-utils/lazy-module-middleware.js +236 -0
  132. package/lib/esm/adapter-express/express-utils/middleware-composition.js +89 -0
  133. package/lib/esm/adapter-express/express-utils/permission-preloader.middleware.js +45 -0
  134. package/lib/esm/adapter-express/express-utils/resolver-multer.js +30 -0
  135. package/lib/esm/adapter-express/express-utils/route-constraints.js +91 -0
  136. package/lib/esm/adapter-express/express-utils/scope-extractor.interface.js +1 -0
  137. package/lib/esm/adapter-express/express-utils/scope-extractor.js +63 -0
  138. package/lib/esm/adapter-express/express-utils/setup-authorization.js +68 -0
  139. package/lib/esm/adapter-express/express-utils/setup-event-system.js +110 -0
  140. package/lib/esm/adapter-express/express-utils/setup-interceptors.js +100 -0
  141. package/lib/esm/adapter-express/express-utils/setup-lazy-loading.js +225 -0
  142. package/lib/esm/adapter-express/express-utils/utils.js +68 -0
  143. package/lib/esm/adapter-express/express-utils/validation-decorators.js +199 -0
  144. package/lib/esm/adapter-express/express-utils/validation-service.js +251 -0
  145. package/lib/esm/adapter-express/index.js +7 -0
  146. package/lib/esm/adapter-express/micro-api/application-express-micro-container.js +48 -0
  147. package/lib/esm/adapter-express/micro-api/application-express-micro-route.js +128 -0
  148. package/lib/esm/adapter-express/micro-api/application-express-micro.js +161 -0
  149. package/lib/esm/adapter-express/micro-api/gateway/circuit-breaker.js +174 -0
  150. package/lib/esm/adapter-express/micro-api/gateway/index.js +5 -0
  151. package/lib/esm/adapter-express/micro-api/gateway/service-proxy.js +210 -0
  152. package/lib/esm/adapter-express/micro-api/index.js +10 -0
  153. package/lib/esm/adapter-express/micro-api/micro.js +211 -0
  154. package/lib/esm/adapter-express/micro-api/queue/index.js +4 -0
  155. package/lib/esm/adapter-express/micro-api/queue/queue.interface.js +1 -0
  156. package/lib/esm/adapter-express/micro-api/queue/rabbitmq-consumer.js +229 -0
  157. package/lib/esm/adapter-express/micro-api/serverless/aws-lambda.adapter.js +180 -0
  158. package/lib/esm/adapter-express/micro-api/serverless/cloudflare.adapter.js +155 -0
  159. package/lib/esm/adapter-express/micro-api/serverless/index.js +6 -0
  160. package/lib/esm/adapter-express/micro-api/serverless/vercel.adapter.js +99 -0
  161. package/lib/esm/adapter-express/micro-api/service-mesh/index.js +5 -0
  162. package/lib/esm/adapter-express/micro-api/service-mesh/service-client.js +191 -0
  163. package/lib/esm/adapter-express/micro-api/service-mesh/service-discovery.js +259 -0
  164. package/lib/esm/adapter-express/middleware/index.js +5 -0
  165. package/lib/esm/adapter-express/middleware/request-logging.middleware.js +239 -0
  166. package/lib/esm/adapter-express/render/constants.js +37 -0
  167. package/lib/esm/adapter-express/render/engine.js +51 -0
  168. package/lib/esm/adapter-express/render/index.js +1 -0
  169. package/lib/esm/adapter-express/render/resolve-render.js +30 -0
  170. package/lib/esm/adapter-express/studio/index.js +1 -0
  171. package/lib/esm/adapter-express/studio/studio-integration.js +184 -0
  172. package/lib/esm/index.mjs +1 -0
  173. package/lib/esm/package.json +3 -0
  174. package/lib/esm/types/adapter-express/application-express.base.d.ts +77 -0
  175. package/lib/esm/types/adapter-express/application-express.d.ts +411 -0
  176. package/lib/esm/types/adapter-express/application-express.types.d.ts +23 -0
  177. package/lib/esm/types/adapter-express/express-utils/base-middleware.d.ts +8 -0
  178. package/lib/esm/types/adapter-express/express-utils/conditional-middleware.d.ts +97 -0
  179. package/lib/esm/types/adapter-express/express-utils/constants.d.ts +57 -0
  180. package/lib/esm/types/adapter-express/express-utils/content/httpContent.d.ts +6 -0
  181. package/lib/esm/types/adapter-express/express-utils/content-negotiation-decorators.d.ts +94 -0
  182. package/lib/esm/types/adapter-express/express-utils/decorators.d.ts +257 -0
  183. package/lib/esm/types/adapter-express/express-utils/exception-filter-decorators.d.ts +6 -0
  184. package/lib/esm/types/adapter-express/express-utils/guard-context-factory.d.ts +17 -0
  185. package/lib/esm/types/adapter-express/express-utils/guard-middleware.d.ts +22 -0
  186. package/lib/esm/types/adapter-express/express-utils/guard-utils.d.ts +11 -0
  187. package/lib/esm/types/adapter-express/express-utils/http-context-store.d.ts +20 -0
  188. package/lib/esm/types/adapter-express/express-utils/http-status-middleware.d.ts +26 -0
  189. package/lib/esm/types/adapter-express/express-utils/httpResponseMessage.d.ts +14 -0
  190. package/lib/esm/types/adapter-express/express-utils/index.d.ts +30 -0
  191. package/lib/esm/types/adapter-express/express-utils/interceptor-middleware.d.ts +40 -0
  192. package/lib/esm/types/adapter-express/express-utils/interfaces.d.ts +115 -0
  193. package/lib/esm/types/adapter-express/express-utils/inversify-express-server.d.ts +172 -0
  194. package/lib/esm/types/adapter-express/express-utils/lazy-module-middleware.d.ts +122 -0
  195. package/lib/esm/types/adapter-express/express-utils/middleware-composition.d.ts +85 -0
  196. package/lib/esm/types/adapter-express/express-utils/permission-preloader.middleware.d.ts +10 -0
  197. package/lib/esm/types/adapter-express/express-utils/resolver-multer.d.ts +7 -0
  198. package/lib/esm/types/adapter-express/express-utils/route-constraints.d.ts +89 -0
  199. package/lib/esm/types/adapter-express/express-utils/scope-extractor.d.ts +21 -0
  200. package/lib/esm/types/adapter-express/express-utils/scope-extractor.interface.d.ts +12 -0
  201. package/lib/esm/types/adapter-express/express-utils/setup-authorization.d.ts +34 -0
  202. package/lib/esm/types/adapter-express/express-utils/setup-event-system.d.ts +118 -0
  203. package/lib/esm/types/adapter-express/express-utils/setup-interceptors.d.ts +115 -0
  204. package/lib/esm/types/adapter-express/express-utils/setup-lazy-loading.d.ts +123 -0
  205. package/lib/esm/types/adapter-express/express-utils/utils.d.ts +24 -0
  206. package/lib/esm/types/adapter-express/express-utils/validation-decorators.d.ts +145 -0
  207. package/lib/esm/types/adapter-express/express-utils/validation-service.d.ts +88 -0
  208. package/lib/esm/types/adapter-express/index.d.ts +7 -0
  209. package/lib/esm/types/adapter-express/micro-api/application-express-micro-container.d.ts +47 -0
  210. package/lib/esm/types/adapter-express/micro-api/application-express-micro-route.d.ts +104 -0
  211. package/lib/esm/types/adapter-express/micro-api/application-express-micro.d.ts +72 -0
  212. package/lib/esm/types/adapter-express/micro-api/gateway/circuit-breaker.d.ts +111 -0
  213. package/lib/esm/types/adapter-express/micro-api/gateway/index.d.ts +5 -0
  214. package/lib/esm/types/adapter-express/micro-api/gateway/service-proxy.d.ts +83 -0
  215. package/lib/esm/types/adapter-express/micro-api/index.d.ts +7 -0
  216. package/lib/esm/types/adapter-express/micro-api/micro.d.ts +66 -0
  217. package/lib/esm/types/adapter-express/micro-api/queue/index.d.ts +5 -0
  218. package/lib/esm/types/adapter-express/micro-api/queue/queue.interface.d.ts +60 -0
  219. package/lib/esm/types/adapter-express/micro-api/queue/rabbitmq-consumer.d.ts +86 -0
  220. package/lib/esm/types/adapter-express/micro-api/serverless/aws-lambda.adapter.d.ts +77 -0
  221. package/lib/esm/types/adapter-express/micro-api/serverless/cloudflare.adapter.d.ts +64 -0
  222. package/lib/esm/types/adapter-express/micro-api/serverless/index.d.ts +6 -0
  223. package/lib/esm/types/adapter-express/micro-api/serverless/vercel.adapter.d.ts +56 -0
  224. package/lib/esm/types/adapter-express/micro-api/service-mesh/index.d.ts +5 -0
  225. package/lib/esm/types/adapter-express/micro-api/service-mesh/service-client.d.ts +122 -0
  226. package/lib/esm/types/adapter-express/micro-api/service-mesh/service-discovery.d.ts +150 -0
  227. package/lib/esm/types/adapter-express/middleware/index.d.ts +5 -0
  228. package/lib/esm/types/adapter-express/middleware/request-logging.middleware.d.ts +65 -0
  229. package/lib/esm/types/adapter-express/render/constants.d.ts +26 -0
  230. package/lib/esm/types/adapter-express/render/engine.d.ts +20 -0
  231. package/lib/esm/types/adapter-express/render/index.d.ts +5 -0
  232. package/lib/esm/types/adapter-express/render/resolve-render.d.ts +7 -0
  233. package/lib/esm/types/adapter-express/studio/index.d.ts +1 -0
  234. package/lib/esm/types/adapter-express/studio/studio-integration.d.ts +92 -0
  235. package/lib/esm/types/index.d.ts +1 -0
  236. package/lib/package.json +156 -146
  237. package/package.json +156 -146
  238. package/lib/cjs/di/di.interfaces.js +0 -10
  239. package/lib/cjs/types/di/di.interfaces.d.ts +0 -289
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Validation Service
3
+ * @module @expressots/adapter-express
4
+ *
5
+ * Service for validating request parameters using the Smart Validation System.
6
+ * Integrates with the route handler to automatically validate parameters.
7
+ */
8
+ import type { Request, Response } from "express";
9
+ import { ValidationRegistry, SmartFieldDetector, HelpfulErrorFormatter, ValidationResult, ValidationConfig } from "@expressots/core";
10
+ import { ValidationSchemaMetadata } from "./validation-decorators.js";
11
+ import type { NewableFunction } from "./interfaces.js";
12
+ /**
13
+ * Validation Service
14
+ *
15
+ * Handles validation of request parameters (body, query, params, headers)
16
+ * using the configured validation adapters and smart field detection.
17
+ */
18
+ export declare class ValidationService {
19
+ private registry;
20
+ private smartDetector;
21
+ private errorFormatter;
22
+ private enabled;
23
+ private config;
24
+ constructor();
25
+ /**
26
+ * Enable the validation service with the given configuration
27
+ * @param config - Validation configuration
28
+ */
29
+ enable(config?: ValidationConfig): void;
30
+ /**
31
+ * Register built-in validation adapters
32
+ * Additional adapters (Zod, Yup, Joi) can be registered via config.adapters
33
+ * @private
34
+ */
35
+ private registerBuiltInAdapters;
36
+ /**
37
+ * Disable the validation service
38
+ */
39
+ disable(): void;
40
+ /**
41
+ * Check if validation is enabled
42
+ */
43
+ isEnabled(): boolean;
44
+ /**
45
+ * Get the validation registry for adapter management
46
+ */
47
+ getRegistry(): ValidationRegistry;
48
+ /**
49
+ * Get the smart field detector
50
+ */
51
+ getSmartDetector(): SmartFieldDetector;
52
+ /**
53
+ * Get the error formatter
54
+ */
55
+ getErrorFormatter(): HelpfulErrorFormatter;
56
+ /**
57
+ * Validate request parameters based on controller method metadata
58
+ * @param req - Express request
59
+ * @param res - Express response
60
+ * @param controllerConstructor - Controller class constructor
61
+ * @param methodName - Method name
62
+ * @param args - Current parameter values
63
+ * @returns Validated and transformed arguments, or null if validation failed (response sent)
64
+ */
65
+ validateParameters(req: Request, res: Response, controllerConstructor: NewableFunction, methodName: string, args: Array<unknown>): Promise<Array<unknown> | null>;
66
+ /**
67
+ * Infer validation metadata from TypeScript type information
68
+ * Uses reflect-metadata to get parameter types and automatically
69
+ * detect class-validator DTOs or Zod schemas
70
+ */
71
+ private inferValidationFromTypes;
72
+ /**
73
+ * Validate a single value against a schema
74
+ */
75
+ validateValue(value: unknown, metadata: ValidationSchemaMetadata): Promise<ValidationResult>;
76
+ /**
77
+ * Get the parameter value from the request
78
+ */
79
+ private getParameterValue;
80
+ /**
81
+ * Validate request data using smart field detection
82
+ */
83
+ private validateWithSmartDetection;
84
+ /**
85
+ * Send validation error response
86
+ */
87
+ private sendValidationError;
88
+ }
@@ -1,5 +1,7 @@
1
- export * from "./express-utils";
2
- export { AppExpress } from "./application-express";
3
- export * from "./micro-api";
1
+ export * from "./express-utils/index.js";
2
+ export { AppExpress } from "./application-express.js";
3
+ export * from "./micro-api/index.js";
4
4
  export { IWebServerPublic, IWebServer, IWebServerConstructor, Environment, IEnvironment, RenderEngine, } from "@expressots/shared";
5
- export * from "./render";
5
+ export * from "./render/index.js";
6
+ export * from "./middleware/index.js";
7
+ export * from "./studio/index.js";
@@ -1,9 +1,13 @@
1
1
  import express from "express";
2
- import { Middleware } from "../express-utils/interfaces";
2
+ import { Middleware } from "../express-utils/interfaces.js";
3
+ /**
4
+ * Handler function that can return a value to be sent as response
5
+ */
6
+ type MicroRouteHandler = (req: express.Request, res: express.Response, next: express.NextFunction) => unknown | Promise<unknown>;
3
7
  type RouteDefinition = {
4
8
  method: "get" | "post" | "put" | "patch" | "delete";
5
9
  path: string;
6
- handler: express.RequestHandler;
10
+ handler: MicroRouteHandler;
7
11
  middleware: Array<Middleware>;
8
12
  };
9
13
  /**
@@ -11,12 +15,12 @@ type RouteDefinition = {
11
15
  * @public API
12
16
  */
13
17
  export interface IRoute {
14
- define(method: "get" | "post" | "put" | "delete" | "patch", path: string, handler: express.RequestHandler, ...middleware: Array<Middleware>): void;
15
- get(path: string, handler: express.RequestHandler, ...middleware: Array<Middleware>): void;
16
- post(path: string, handler: express.RequestHandler, ...middleware: Array<Middleware>): void;
17
- put(path: string, handler: express.RequestHandler, ...middleware: Array<Middleware>): void;
18
- delete(path: string, handler: express.RequestHandler, ...middleware: Array<Middleware>): void;
19
- patch(path: string, handler: express.RequestHandler, ...middleware: Array<Middleware>): void;
18
+ define(method: "get" | "post" | "put" | "delete" | "patch", path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
19
+ get(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
20
+ post(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
21
+ put(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
22
+ delete(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
23
+ patch(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
20
24
  }
21
25
  export declare class Route implements IRoute {
22
26
  private logger;
@@ -38,7 +42,7 @@ export declare class Route implements IRoute {
38
42
  * @param middleware - Route middleware
39
43
  * @public API
40
44
  */
41
- define(method: "get" | "post" | "put" | "delete" | "patch", path: string, handler: express.RequestHandler, ...middleware: Array<Middleware>): void;
45
+ define(method: "get" | "post" | "put" | "delete" | "patch", path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
42
46
  /**
43
47
  * Define a GET route
44
48
  * @param path - Route path
@@ -46,7 +50,7 @@ export declare class Route implements IRoute {
46
50
  * @param middleware - Route middleware
47
51
  * @public API
48
52
  */
49
- get(path: string, handler: express.RequestHandler, ...middleware: Array<Middleware>): void;
53
+ get(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
50
54
  /**
51
55
  * Define a POST route
52
56
  * @param path - Route path
@@ -54,7 +58,7 @@ export declare class Route implements IRoute {
54
58
  * @param middleware - Route middleware
55
59
  * @public API
56
60
  */
57
- post(path: string, handler: express.RequestHandler, ...middleware: Array<Middleware>): void;
61
+ post(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
58
62
  /**
59
63
  * Define a PUT route
60
64
  * @param path - Route path
@@ -62,7 +66,7 @@ export declare class Route implements IRoute {
62
66
  * @param middleware - Route middleware
63
67
  * @public API
64
68
  */
65
- put(path: string, handler: express.RequestHandler, ...middleware: Array<Middleware>): void;
69
+ put(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
66
70
  /**
67
71
  * Define a DELETE route
68
72
  * @param path - Route path
@@ -70,7 +74,7 @@ export declare class Route implements IRoute {
70
74
  * @param middleware - Route middleware
71
75
  * @public API
72
76
  */
73
- delete(path: string, handler: express.RequestHandler, ...middleware: Array<Middleware>): void;
77
+ delete(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
74
78
  /**
75
79
  * Define a PATCH route
76
80
  * @param path - Route path
@@ -78,7 +82,14 @@ export declare class Route implements IRoute {
78
82
  * @param middleware - Route middleware
79
83
  * @public API
80
84
  */
81
- patch(path: string, handler: express.RequestHandler, ...middleware: Array<Middleware>): void;
85
+ patch(path: string, handler: MicroRouteHandler, ...middleware: Array<Middleware>): void;
86
+ /**
87
+ * Wrap a handler to automatically send return values as response
88
+ * @param handler - The original handler
89
+ * @returns Wrapped Express request handler
90
+ * @private
91
+ */
92
+ private wrapHandler;
82
93
  /**
83
94
  * Apply the routes to the Express application
84
95
  */
@@ -1,8 +1,8 @@
1
1
  import { IMiddleware, interfaces } from "@expressots/core";
2
- import { Env, IConsoleMessage } from "@expressots/shared";
2
+ import { IConsoleMessage } from "@expressots/shared";
3
3
  import { Server } from "http";
4
- import { IIOC } from "./application-express-micro-container";
5
- import { IRoute } from "./application-express-micro-route";
4
+ import { IIOC } from "./application-express-micro-container.js";
5
+ import { IRoute } from "./application-express-micro-route.js";
6
6
  /**
7
7
  * Configuration options for the Express Micro API adapter
8
8
  * @public API
@@ -14,13 +14,6 @@ export type MicroAPIConfig = {
14
14
  * Interface for the Create Method of Express Micro API adapter
15
15
  */
16
16
  export interface ICreateMicroAPI {
17
- /**
18
- * Initialize the environment for the application
19
- * @param environment - The environment to initialize
20
- * @param options - Options for the environment initialization
21
- * @public API
22
- */
23
- initEnvironment(environment: Env.Environment, options?: Env.IEnvironment): void;
24
17
  /**
25
18
  * Set the global route prefix
26
19
  * @param prefix - The global route prefix
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Circuit Breaker States
3
+ */
4
+ export type CircuitState = "CLOSED" | "OPEN" | "HALF_OPEN";
5
+ /**
6
+ * Configuration for CircuitBreaker
7
+ */
8
+ export interface CircuitBreakerConfig {
9
+ /** Number of failures before opening the circuit (default: 5) */
10
+ failureThreshold?: number;
11
+ /** Number of successes in half-open state to close circuit (default: 2) */
12
+ successThreshold?: number;
13
+ /** Time in ms before attempting to close an open circuit (default: 60000) */
14
+ timeout?: number;
15
+ /** Monitoring period in ms for failure counting (default: 10000) */
16
+ monitoringPeriod?: number;
17
+ }
18
+ /**
19
+ * Circuit Breaker Statistics
20
+ */
21
+ export interface CircuitBreakerStats {
22
+ state: CircuitState;
23
+ failures: number;
24
+ successes: number;
25
+ totalCalls: number;
26
+ lastFailure?: Date;
27
+ lastSuccess?: Date;
28
+ openedAt?: Date;
29
+ }
30
+ /**
31
+ * CircuitBreaker - Protect against cascading failures in distributed systems.
32
+ *
33
+ * States:
34
+ * - CLOSED: Normal operation, requests pass through
35
+ * - OPEN: Requests fail immediately without calling the service
36
+ * - HALF_OPEN: Limited requests pass through to test if service recovered
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * const circuitBreaker = new CircuitBreaker({
41
+ * failureThreshold: 5,
42
+ * timeout: 60000,
43
+ * });
44
+ *
45
+ * app.Route.get("/external-api", async (req, res) => {
46
+ * try {
47
+ * const result = await circuitBreaker.execute(async () => {
48
+ * return await fetch("https://external-api.com/data");
49
+ * });
50
+ * res.json(await result.json());
51
+ * } catch (error) {
52
+ * if (error.message === "Circuit breaker is OPEN") {
53
+ * res.status(503).json({ error: "Service temporarily unavailable" });
54
+ * } else {
55
+ * res.status(500).json({ error: error.message });
56
+ * }
57
+ * }
58
+ * });
59
+ * ```
60
+ */
61
+ export declare class CircuitBreaker {
62
+ private state;
63
+ private failures;
64
+ private successes;
65
+ private totalSuccesses;
66
+ private totalCalls;
67
+ private lastFailure?;
68
+ private lastSuccess?;
69
+ private openedAt?;
70
+ private recentFailures;
71
+ private config;
72
+ constructor(config?: CircuitBreakerConfig);
73
+ /**
74
+ * Execute a function with circuit breaker protection
75
+ * @param fn - Function to execute
76
+ * @throws Error if circuit is open
77
+ */
78
+ execute<T>(fn: () => Promise<T>): Promise<T>;
79
+ /**
80
+ * Get current circuit state
81
+ */
82
+ getState(): CircuitState;
83
+ /**
84
+ * Get circuit breaker statistics
85
+ */
86
+ getStats(): CircuitBreakerStats;
87
+ /**
88
+ * Manually reset the circuit breaker
89
+ */
90
+ reset(): void;
91
+ /**
92
+ * Manually open the circuit
93
+ */
94
+ open(): void;
95
+ /**
96
+ * Handle successful call
97
+ */
98
+ private onSuccess;
99
+ /**
100
+ * Handle failed call
101
+ */
102
+ private onFailure;
103
+ /**
104
+ * Check if timeout has passed and we should try to reset
105
+ */
106
+ private shouldAttemptReset;
107
+ /**
108
+ * Remove failures outside the monitoring period
109
+ */
110
+ private cleanupRecentFailures;
111
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * API Gateway Utilities for ExpressoTS Micro Template
3
+ */
4
+ export { CircuitBreaker, type CircuitBreakerConfig, type CircuitBreakerStats, type CircuitState, } from "./circuit-breaker.js";
5
+ export { ServiceProxy, createProxy, type ServiceProxyConfig } from "./service-proxy.js";
@@ -0,0 +1,83 @@
1
+ import { Request, Response, NextFunction } from "express";
2
+ import { CircuitBreaker, CircuitBreakerConfig } from "./circuit-breaker.js";
3
+ /**
4
+ * Configuration for ServiceProxy
5
+ */
6
+ export interface ServiceProxyConfig {
7
+ /** Target service URL */
8
+ target: string;
9
+ /** Request timeout in ms (default: 30000) */
10
+ timeout?: number;
11
+ /** Number of retries on failure (default: 0) */
12
+ retries?: number;
13
+ /** Additional headers to add to proxied requests */
14
+ headers?: Record<string, string>;
15
+ /** Path rewrite function */
16
+ pathRewrite?: (path: string) => string;
17
+ /** Enable circuit breaker (default: false) */
18
+ circuitBreaker?: boolean | CircuitBreakerConfig;
19
+ /** Log requests (default: false) */
20
+ debug?: boolean;
21
+ }
22
+ /**
23
+ * ServiceProxy - Proxy requests to other microservices.
24
+ *
25
+ * Features:
26
+ * - Automatic request forwarding
27
+ * - Path rewriting
28
+ * - Custom headers
29
+ * - Request timeout
30
+ * - Retry support
31
+ * - Optional circuit breaker integration
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * // Proxy to user service
36
+ * const userProxy = createProxy({
37
+ * target: "http://user-service:3001",
38
+ * pathRewrite: (path) => path.replace("/api/users", ""),
39
+ * timeout: 5000,
40
+ * retries: 3,
41
+ * circuitBreaker: true,
42
+ * });
43
+ *
44
+ * app.Route.get("/api/users/*", userProxy.handler());
45
+ * app.Route.post("/api/users/*", userProxy.handler());
46
+ * ```
47
+ */
48
+ export declare class ServiceProxy {
49
+ private config;
50
+ constructor(config: ServiceProxyConfig);
51
+ /**
52
+ * Create an Express handler for proxying requests
53
+ */
54
+ handler(): (req: Request, res: Response, next: NextFunction) => void;
55
+ /**
56
+ * Proxy a request to the target service
57
+ */
58
+ private proxyRequest;
59
+ /**
60
+ * Execute request with retry logic
61
+ */
62
+ private executeWithRetry;
63
+ /**
64
+ * Execute a single request
65
+ */
66
+ private executeRequest;
67
+ /**
68
+ * Extract relevant headers from incoming request
69
+ */
70
+ private extractHeaders;
71
+ /**
72
+ * Delay helper
73
+ */
74
+ private delay;
75
+ /**
76
+ * Get circuit breaker stats (if enabled)
77
+ */
78
+ getCircuitBreakerStats(): ReturnType<CircuitBreaker["getStats"]> | undefined;
79
+ }
80
+ /**
81
+ * Create a new service proxy
82
+ */
83
+ export declare function createProxy(config: ServiceProxyConfig): ServiceProxy;
@@ -1 +1,7 @@
1
- export { createMicroAPI, MicroAPIConfig } from "./application-express-micro";
1
+ export { micro, type MicroApp, type MicroConfig } from "./micro.js";
2
+ export * from "./gateway/index.js";
3
+ export * from "./service-mesh/index.js";
4
+ export * from "./serverless/index.js";
5
+ export * from "./queue/index.js";
6
+ /** @deprecated Use micro() instead */
7
+ export { createMicroAPI, MicroAPIConfig } from "./application-express-micro.js";
@@ -0,0 +1,66 @@
1
+ import { IConsoleMessage } from "@expressots/shared";
2
+ import express from "express";
3
+ import { Server } from "http";
4
+ /**
5
+ * Minimal configuration for micro API
6
+ * @public API
7
+ */
8
+ export interface MicroConfig {
9
+ /** Disable automatic JSON parsing (default: true) */
10
+ autoParseJson?: boolean;
11
+ /** Global route prefix (e.g., "/api") */
12
+ globalPrefix?: string;
13
+ /** Show startup banner (default: true) */
14
+ showBanner?: boolean;
15
+ }
16
+ /**
17
+ * Route handler that can return a value or use res directly
18
+ */
19
+ type RouteHandler = (req: express.Request, res: express.Response, next: express.NextFunction) => unknown | Promise<unknown>;
20
+ /**
21
+ * Middleware type (Express-compatible)
22
+ */
23
+ type Middleware = express.RequestHandler | express.ErrorRequestHandler;
24
+ /**
25
+ * Pure simplicity micro API interface
26
+ * @public API
27
+ */
28
+ export interface MicroApp {
29
+ /** Register a GET route */
30
+ get(path: string, ...handlers: [...Array<Middleware>, RouteHandler]): this;
31
+ /** Register a POST route */
32
+ post(path: string, ...handlers: [...Array<Middleware>, RouteHandler]): this;
33
+ /** Register a PUT route */
34
+ put(path: string, ...handlers: [...Array<Middleware>, RouteHandler]): this;
35
+ /** Register a PATCH route */
36
+ patch(path: string, ...handlers: [...Array<Middleware>, RouteHandler]): this;
37
+ /** Register a DELETE route */
38
+ delete(path: string, ...handlers: [...Array<Middleware>, RouteHandler]): this;
39
+ /** Add global middleware */
40
+ use(...middleware: Array<Middleware>): this;
41
+ use(path: string, ...middleware: Array<Middleware>): this;
42
+ /** Set custom error handler */
43
+ setErrorHandler(handler: express.ErrorRequestHandler): this;
44
+ /** Start listening for requests */
45
+ listen(port: number | string, appInfo?: IConsoleMessage): Promise<void>;
46
+ /** Get the underlying HTTP server (available after listen) */
47
+ getHttpServer(): Server;
48
+ /** Get the Express app instance (for advanced use) */
49
+ getApp(): express.Application;
50
+ }
51
+ /**
52
+ * Create a new micro API instance
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * const app = micro();
57
+ * app.get("/", () => "Hello World");
58
+ * app.listen(3000);
59
+ * ```
60
+ *
61
+ * @param config - Optional configuration
62
+ * @returns MicroApp instance
63
+ * @public API
64
+ */
65
+ export declare function micro(config?: MicroConfig): MicroApp;
66
+ export {};
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Queue Integration for ExpressoTS Micro Template
3
+ */
4
+ export { type QueueMessage, type MessageHandler, type QueueConsumerConfig, type IQueueConsumer, type QueueStats, } from "./queue.interface.js";
5
+ export { RabbitMQConsumer, type RabbitMQConfig } from "./rabbitmq-consumer.js";
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Message format for queue consumers
3
+ */
4
+ export interface QueueMessage<T = unknown> {
5
+ /** Unique message ID */
6
+ id: string;
7
+ /** Message body */
8
+ body: T;
9
+ /** Message headers/attributes */
10
+ headers?: Record<string, string>;
11
+ /** Timestamp when message was published */
12
+ timestamp: Date;
13
+ /** Number of times message has been received */
14
+ receiveCount?: number;
15
+ /** Original raw message */
16
+ raw?: unknown;
17
+ }
18
+ /**
19
+ * Handler function for processing queue messages
20
+ */
21
+ export type MessageHandler<T = unknown> = (message: QueueMessage<T>) => Promise<void>;
22
+ /**
23
+ * Base configuration for queue consumers
24
+ */
25
+ export interface QueueConsumerConfig {
26
+ /** Queue/topic name */
27
+ queue: string;
28
+ /** Connection URL */
29
+ url?: string;
30
+ /** Number of concurrent message handlers (default: 1) */
31
+ concurrency?: number;
32
+ /** Auto-acknowledge messages (default: true) */
33
+ autoAck?: boolean;
34
+ /** Enable debug logging (default: false) */
35
+ debug?: boolean;
36
+ }
37
+ /**
38
+ * Queue consumer interface
39
+ */
40
+ export interface IQueueConsumer<T = unknown> {
41
+ /** Start consuming messages */
42
+ consume(handler: MessageHandler<T>): Promise<void>;
43
+ /** Publish a message to the queue */
44
+ publish(message: T): Promise<void>;
45
+ /** Stop consuming and close connection */
46
+ close(): Promise<void>;
47
+ /** Get consumer stats */
48
+ getStats(): QueueStats;
49
+ }
50
+ /**
51
+ * Queue statistics
52
+ */
53
+ export interface QueueStats {
54
+ messagesReceived: number;
55
+ messagesProcessed: number;
56
+ messagesFailed: number;
57
+ messagesPublished: number;
58
+ isConnected: boolean;
59
+ lastMessageAt?: Date;
60
+ }
@@ -0,0 +1,86 @@
1
+ import { IQueueConsumer, MessageHandler, QueueConsumerConfig, QueueStats } from "./queue.interface.js";
2
+ /**
3
+ * RabbitMQ-specific configuration
4
+ */
5
+ export interface RabbitMQConfig extends QueueConsumerConfig {
6
+ /** RabbitMQ connection URL */
7
+ url: string;
8
+ /** Exchange name (optional) */
9
+ exchange?: string;
10
+ /** Exchange type (default: "direct") */
11
+ exchangeType?: "direct" | "topic" | "fanout" | "headers";
12
+ /** Routing key for publishing */
13
+ routingKey?: string;
14
+ /** Prefetch count (default: 1) */
15
+ prefetch?: number;
16
+ /** Enable durable queue (default: true) */
17
+ durable?: boolean;
18
+ }
19
+ /**
20
+ * RabbitMQ Consumer - Message queue consumer for RabbitMQ.
21
+ *
22
+ * Features:
23
+ * - Message consumption with handlers
24
+ * - Message publishing
25
+ * - Exchange support
26
+ * - Automatic reconnection
27
+ * - Prefetch control
28
+ * - Dead letter queue support
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const orderQueue = new RabbitMQConsumer({
33
+ * url: process.env.RABBITMQ_URL,
34
+ * queue: "orders",
35
+ * prefetch: 10,
36
+ * });
37
+ *
38
+ * // Start consuming
39
+ * await orderQueue.consume(async (message) => {
40
+ * const order = message.body;
41
+ * console.log("Processing order:", order.id);
42
+ * await processOrder(order);
43
+ * });
44
+ *
45
+ * // Publish from HTTP endpoint
46
+ * app.Route.post("/orders", async (req, res) => {
47
+ * await orderQueue.publish(req.body);
48
+ * res.status(202).json({ message: "Order queued" });
49
+ * });
50
+ *
51
+ * // Graceful shutdown
52
+ * process.on("SIGTERM", async () => {
53
+ * await orderQueue.close();
54
+ * });
55
+ * ```
56
+ *
57
+ * Note: This implementation requires the 'amqplib' package.
58
+ * Install with: npm install amqplib @types/amqplib
59
+ */
60
+ export declare class RabbitMQConsumer<T = unknown> implements IQueueConsumer<T> {
61
+ private connection;
62
+ private channel;
63
+ private config;
64
+ private stats;
65
+ constructor(config: RabbitMQConfig);
66
+ /**
67
+ * Connect to RabbitMQ
68
+ */
69
+ private connect;
70
+ /**
71
+ * Start consuming messages
72
+ */
73
+ consume(handler: MessageHandler<T>): Promise<void>;
74
+ /**
75
+ * Publish a message to the queue
76
+ */
77
+ publish(message: T): Promise<void>;
78
+ /**
79
+ * Close the connection
80
+ */
81
+ close(): Promise<void>;
82
+ /**
83
+ * Get consumer statistics
84
+ */
85
+ getStats(): QueueStats;
86
+ }