@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,89 @@
1
+ /**
2
+ * Route parameter patterns for common use cases.
3
+ * These are Express regex patterns that can be used in route paths.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * import { Patterns, pattern } from "@expressots/adapter-express";
8
+ *
9
+ * @Get(`/users/${pattern("id", Patterns.NUMERIC_ID)}`)
10
+ * getUserById(@param("id") id: number) {
11
+ * // Only matches numeric IDs like /users/123
12
+ * }
13
+ *
14
+ * @Get(`/documents/${pattern("uuid", Patterns.UUID)}`)
15
+ * getDocument(@param("uuid") uuid: string) {
16
+ * // Only matches valid UUIDs
17
+ * }
18
+ * ```
19
+ *
20
+ * @public API
21
+ */
22
+ export declare const Patterns: {
23
+ /**
24
+ * Matches one or more digits (numeric ID)
25
+ * Example: /users/123 ✅, /users/abc ❌
26
+ */
27
+ readonly NUMERIC_ID: "(\\d+)";
28
+ /**
29
+ * Matches a valid UUID v4 format
30
+ * Example: /documents/550e8400-e29b-41d4-a716-446655440000 ✅
31
+ */
32
+ readonly UUID: "([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})";
33
+ /**
34
+ * Matches lowercase letters, numbers, and hyphens (URL-friendly slug)
35
+ * Example: /posts/my-awesome-post ✅, /posts/My_Post ❌
36
+ */
37
+ readonly SLUG: "([a-z0-9-]+)";
38
+ /**
39
+ * Matches alphanumeric characters (letters and numbers only)
40
+ * Example: /codes/ABC123 ✅, /codes/ABC-123 ❌
41
+ */
42
+ readonly ALPHANUMERIC: "([a-zA-Z0-9]+)";
43
+ /**
44
+ * Matches lowercase letters only
45
+ * Example: /tags/javascript ✅, /tags/JavaScript ❌
46
+ */
47
+ readonly LOWERCASE: "([a-z]+)";
48
+ /**
49
+ * Matches uppercase letters only
50
+ * Example: /codes/USD ✅, /codes/usd ❌
51
+ */
52
+ readonly UPPERCASE: "([A-Z]+)";
53
+ /**
54
+ * Matches email format (basic validation)
55
+ * Example: /users/user@example.com ✅
56
+ */
57
+ readonly EMAIL: "([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})";
58
+ /**
59
+ * Matches hexadecimal string (e.g., color codes, hash)
60
+ * Example: /colors/ff5733 ✅, /colors/xyz ❌
61
+ */
62
+ readonly HEXADECIMAL: "([0-9a-fA-F]+)";
63
+ /**
64
+ * Matches MongoDB ObjectId format (24 hex characters)
65
+ * Example: /documents/507f1f77bcf86cd799439011 ✅
66
+ */
67
+ readonly MONGO_ID: "([0-9a-fA-F]{24})";
68
+ };
69
+ /**
70
+ * Helper function to build route parameter patterns.
71
+ * This is optional - you can also use Patterns directly in template strings.
72
+ *
73
+ * @param paramName - The parameter name (e.g., "id", "uuid")
74
+ * @param pattern - The pattern from Patterns
75
+ * @returns The formatted route parameter with pattern
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * import { pattern, Patterns } from "@expressots/adapter-express";
80
+ *
81
+ * @Get(`/users/${pattern("id", Patterns.NUMERIC_ID)}`)
82
+ * getUserById(@param("id") id: number) {
83
+ * // Route: /users/:id(\\d+)
84
+ * }
85
+ * ```
86
+ *
87
+ * @public API
88
+ */
89
+ export declare function pattern(paramName: string, patternValue: string): string;
@@ -0,0 +1,21 @@
1
+ import { Request } from "express";
2
+ import type { GuardScope } from "@expressots/core";
3
+ import type { IScopeExtractor } from "./scope-extractor.interface.js";
4
+ /**
5
+ * Extracts scope information from requests
6
+ * Supports tenant extraction from subdomain, header, or param
7
+ * Note: This is bound manually in setupAuthorizationForExpress() to allow user overrides
8
+ */
9
+ export declare class ScopeExtractor implements IScopeExtractor {
10
+ extract(req: Request): Promise<GuardScope>;
11
+ /**
12
+ * Extract tenant ID from multiple sources
13
+ * @private
14
+ */
15
+ private extractTenant;
16
+ /**
17
+ * Generate or retrieve request ID
18
+ * @private
19
+ */
20
+ private generateRequestId;
21
+ }
@@ -0,0 +1,12 @@
1
+ import { Request } from "express";
2
+ import type { GuardScope } from "@expressots/core";
3
+ /**
4
+ * Interface for extracting scope information from requests
5
+ */
6
+ export interface IScopeExtractor {
7
+ /**
8
+ * Extract scope information from request
9
+ * @param req - Express request
10
+ */
11
+ extract(req: Request): Promise<GuardScope>;
12
+ }
@@ -0,0 +1,34 @@
1
+ import { interfaces } from "@expressots/core";
2
+ import { type AuthorizationConfig } from "@expressots/core";
3
+ import type { AuthProvider } from "./interfaces.js";
4
+ import type { IMiddleware } from "@expressots/core";
5
+ /**
6
+ * Express-specific authorization setup
7
+ * Automatically registers all adapter-specific services and middleware
8
+ *
9
+ * @param container - DI container
10
+ * @param config - Authorization configuration
11
+ * @param middleware - Optional middleware manager to add PermissionPreloaderMiddleware
12
+ * @param authProvider - Optional AuthProvider class (if not already bound)
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * export class App extends AppExpress {
17
+ * async configureServices(): Promise<void> {
18
+ * setupAuthorizationForExpress(
19
+ * this.config.Container,
20
+ * {
21
+ * enablePreloading: true,
22
+ * enableCaching: true,
23
+ * permissionHierarchy: {
24
+ * admin: ["moderator", "user"],
25
+ * moderator: ["user"],
26
+ * },
27
+ * },
28
+ * this.Middleware,
29
+ * );
30
+ * }
31
+ * }
32
+ * ```
33
+ */
34
+ export declare function setupAuthorizationForExpress(container: interfaces.Container, config?: AuthorizationConfig, middleware?: IMiddleware, authProvider?: new () => AuthProvider): void;
@@ -0,0 +1,118 @@
1
+ import { interfaces, EventRegistry, EventEmitter, EventRecorder, EventFlowTracker } from "@expressots/core";
2
+ /**
3
+ * Configuration options for the event system setup.
4
+ *
5
+ * @public API
6
+ */
7
+ export interface EventSystemOptions {
8
+ /**
9
+ * Enable event recording for debugging.
10
+ * When true, all emitted events are recorded for later inspection or replay.
11
+ * @default true in development, false in production
12
+ */
13
+ enableRecording?: boolean;
14
+ /**
15
+ * Enable flow tracking for event visualization.
16
+ * When true, tracks the flow of events through handlers.
17
+ * @default true in development, false in production
18
+ */
19
+ enableFlowTracking?: boolean;
20
+ /**
21
+ * Maximum number of events to keep in the recording buffer.
22
+ * @default 1000
23
+ */
24
+ maxRecordedEvents?: number;
25
+ /**
26
+ * Default timeout for handler execution in milliseconds.
27
+ * @default 30000
28
+ */
29
+ defaultTimeout?: number;
30
+ /**
31
+ * Auto-discover event handlers from the container.
32
+ * When true, scans the container for @OnEvent decorated handlers.
33
+ * @default true
34
+ */
35
+ autoDiscover?: boolean;
36
+ /**
37
+ * Callback when an event is emitted.
38
+ */
39
+ onEmit?: (event: unknown) => void;
40
+ /**
41
+ * Callback when a handler completes execution.
42
+ */
43
+ onHandlerComplete?: (result: {
44
+ handler: string;
45
+ success: boolean;
46
+ duration: number;
47
+ }) => void;
48
+ /**
49
+ * Custom error handler for handler failures.
50
+ */
51
+ onError?: (error: Error, event: unknown, handlerName: string) => void;
52
+ }
53
+ /**
54
+ * Result of event system setup.
55
+ *
56
+ * @public API
57
+ */
58
+ export interface EventSystemSetupResult {
59
+ /**
60
+ * The event registry instance.
61
+ */
62
+ registry: EventRegistry;
63
+ /**
64
+ * The event emitter instance.
65
+ */
66
+ emitter: EventEmitter;
67
+ /**
68
+ * The event recorder instance (if recording is enabled).
69
+ */
70
+ recorder: EventRecorder;
71
+ /**
72
+ * The flow tracker instance (if flow tracking is enabled).
73
+ */
74
+ flowTracker: EventFlowTracker;
75
+ /**
76
+ * Number of event handlers discovered.
77
+ */
78
+ handlersDiscovered: number;
79
+ }
80
+ /**
81
+ * Set up the ExpressoTS Event System with zero boilerplate.
82
+ *
83
+ * This function:
84
+ * 1. Registers all event system services (EventRegistry, EventEmitter, EventRecorder, EventFlowTracker)
85
+ * 2. Auto-discovers and registers all @OnEvent decorated handlers
86
+ * 3. Configures recording and flow tracking based on environment
87
+ * 4. Sets up replay emitter for development debugging
88
+ *
89
+ * @param container - The DI container
90
+ * @param options - Configuration options for the event system
91
+ * @returns Setup result with references to all event system services
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * export class App extends AppExpress {
96
+ * async configureServices(): Promise<void> {
97
+ * // Simple setup with defaults (recommended)
98
+ * const { handlersDiscovered } = setupEventSystemForExpress(
99
+ * this.config.Container
100
+ * );
101
+ * console.log(`Discovered ${handlersDiscovered} event handlers`);
102
+ *
103
+ * // Or with custom options
104
+ * setupEventSystemForExpress(this.config.Container, {
105
+ * enableRecording: true,
106
+ * maxRecordedEvents: 500,
107
+ * defaultTimeout: 10000,
108
+ * onError: (error, event, handler) => {
109
+ * console.error(`Handler ${handler} failed:`, error);
110
+ * }
111
+ * });
112
+ * }
113
+ * }
114
+ * ```
115
+ *
116
+ * @public API
117
+ */
118
+ export declare function setupEventSystemForExpress(container: interfaces.Container, options?: EventSystemOptions): EventSystemSetupResult;
@@ -0,0 +1,115 @@
1
+ import { interfaces } from "@expressots/core";
2
+ import { InterceptorRegistry, InterceptorExecutor, IInterceptor } from "@expressots/core";
3
+ /**
4
+ * Type for interceptor classes that can be registered.
5
+ * Accepts any class constructor, including those with DI-injected dependencies.
6
+ * The DI container resolves constructor parameters at runtime.
7
+ */
8
+ export type InterceptorClass = new (...args: Array<any>) => IInterceptor;
9
+ /**
10
+ * Built-in interceptor types that can be enabled via configuration.
11
+ *
12
+ * @public API
13
+ */
14
+ export type BuiltInInterceptor = "performance" | "logging" | "timeout";
15
+ /**
16
+ * Configuration options for the interceptor system setup.
17
+ *
18
+ * @public API
19
+ */
20
+ export interface InterceptorSystemOptions {
21
+ /**
22
+ * Enable and configure built-in interceptors.
23
+ * Set to true to enable with defaults, or provide configuration object.
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * {
28
+ * performance: true, // Enable with defaults
29
+ * logging: { logResponse: true }, // Enable with custom config
30
+ * timeout: { defaultTimeout: 5000 }
31
+ * }
32
+ * ```
33
+ */
34
+ builtIn?: {
35
+ performance?: boolean;
36
+ logging?: boolean;
37
+ timeout?: boolean | {
38
+ defaultTimeout?: number;
39
+ };
40
+ };
41
+ /**
42
+ * Custom interceptor classes to register.
43
+ * These will be bound as singletons and auto-discovered.
44
+ * Supports classes with DI-injected constructor dependencies.
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * customInterceptors: [CacheInterceptor, AuditInterceptor]
49
+ * ```
50
+ */
51
+ customInterceptors?: Array<InterceptorClass>;
52
+ /**
53
+ * Auto-discover interceptors from the container.
54
+ * When true, scans the container for @UseInterceptor decorated controllers/methods.
55
+ * @default true
56
+ */
57
+ autoDiscover?: boolean;
58
+ }
59
+ /**
60
+ * Result of interceptor system setup.
61
+ *
62
+ * @public API
63
+ */
64
+ export interface InterceptorSystemSetupResult {
65
+ /**
66
+ * The interceptor registry instance.
67
+ */
68
+ registry: InterceptorRegistry;
69
+ /**
70
+ * The interceptor executor instance.
71
+ */
72
+ executor: InterceptorExecutor;
73
+ /**
74
+ * Number of interceptors registered.
75
+ */
76
+ interceptorsRegistered: number;
77
+ }
78
+ /**
79
+ * Set up the ExpressoTS Interceptor System with zero boilerplate.
80
+ *
81
+ * This function:
82
+ * 1. Registers all interceptor infrastructure (InterceptorRegistry, InterceptorExecutor)
83
+ * 2. Optionally enables built-in interceptors (Performance, Logging, Timeout)
84
+ * 3. Registers custom interceptor classes
85
+ * 4. Initializes the interceptor registry
86
+ *
87
+ * @param container - The DI container
88
+ * @param options - Configuration options for the interceptor system
89
+ * @returns Setup result with references to interceptor services
90
+ *
91
+ * @example
92
+ * ```typescript
93
+ * export class App extends AppExpress {
94
+ * async configureServices(): Promise<void> {
95
+ * // Simple setup with performance interceptor
96
+ * setupInterceptorsForExpress(this.config.Container, {
97
+ * builtIn: { performance: true }
98
+ * });
99
+ *
100
+ * // Full setup with custom interceptors
101
+ * setupInterceptorsForExpress(this.config.Container, {
102
+ * builtIn: {
103
+ * performance: true,
104
+ * logging: true,
105
+ * timeout: { defaultTimeout: 5000 }
106
+ * },
107
+ * customInterceptors: [CacheInterceptor, AuditInterceptor]
108
+ * });
109
+ * }
110
+ * }
111
+ * ```
112
+ *
113
+ * @public API
114
+ */
115
+ export declare function setupInterceptorsForExpress(container: interfaces.Container, options?: InterceptorSystemOptions): InterceptorSystemSetupResult;
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Setup Lazy Loading for Express
3
+ *
4
+ * One-liner helper function to configure the lazy loading system.
5
+ *
6
+ * @module adapter-express
7
+ */
8
+ import { RequestHandler } from "express";
9
+ import { Container } from "@expressots/core";
10
+ import { ILazyModule, LazyLoadingOptions, LazyLoadingSetupResult } from "@expressots/core";
11
+ import { LazyRouteMapping } from "./lazy-module-middleware.js";
12
+ /**
13
+ * Set up the lazy loading system with one function call.
14
+ *
15
+ * @layer public
16
+ * @audience application-developers
17
+ * @concept lazy-loading
18
+ *
19
+ * UNIQUE: Zero-configuration lazy loading!
20
+ * - Auto-detects routes from @controller() decorators
21
+ * - Creates middleware for automatic module loading
22
+ * - Optional metrics and background warmup
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * // 1. Define lazy modules (routes auto-detected from @controller)
27
+ * // lazy-modules.ts
28
+ * export const AdminModule = CreateLazyModule([AdminController]);
29
+ * // Routes auto-detected: ["/admin"] from @controller("/admin")
30
+ *
31
+ * export const ReportsModule = CreateLazyModule([ReportsController]);
32
+ * // Routes auto-detected: ["/reports"] from @controller("/reports")
33
+ *
34
+ * // 2. Setup in app.ts (just pass the modules!)
35
+ * export class App extends AppExpress {
36
+ * async configureServices(): Promise<void> {
37
+ * const { middleware } = setupLazyLoadingForExpress(
38
+ * this.config.Container,
39
+ * {
40
+ * lazyModules: [AdminModule, ReportsModule],
41
+ * globalPrefix: "/api" // Optional
42
+ * }
43
+ * );
44
+ *
45
+ * // Add middleware - that's it!
46
+ * if (middleware) {
47
+ * this.Middleware.addMiddleware(middleware);
48
+ * }
49
+ * }
50
+ * }
51
+ *
52
+ * // Now:
53
+ * // - GET /api/admin/* → AdminModule auto-loads
54
+ * // - GET /api/reports/* → ReportsModule auto-loads
55
+ * // - No manual route mapping needed!
56
+ * ```
57
+ *
58
+ * @param container - The DI container
59
+ * @param options - Configuration options
60
+ * @returns Setup result with loader, manager, and middleware
61
+ *
62
+ * @public API
63
+ */
64
+ export declare function setupLazyLoadingForExpress(container: Container, options?: LazyLoadingExpressOptions): LazyLoadingExpressResult;
65
+ /**
66
+ * Extended lazy loading options for Express.
67
+ *
68
+ * @public API
69
+ */
70
+ export interface LazyLoadingExpressOptions extends LazyLoadingOptions {
71
+ /** Lazy modules to register */
72
+ lazyModules?: Array<ILazyModule>;
73
+ /**
74
+ * Manual route prefix mappings.
75
+ * Maps module names to route prefixes for auto-loading.
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * routePrefixes: {
80
+ * "AdminModule": "/admin",
81
+ * "ReportsModule": "/reports"
82
+ * }
83
+ * ```
84
+ */
85
+ routePrefixes?: Record<string, string>;
86
+ /**
87
+ * Global route prefix (e.g., "/api").
88
+ * Used when determining if a request matches a lazy module route.
89
+ */
90
+ globalPrefix?: string;
91
+ /**
92
+ * Enable automatic module loading when routes are accessed.
93
+ * When enabled, accessing a lazy module's route will trigger loading.
94
+ * @default true
95
+ */
96
+ enableAutoLoad?: boolean;
97
+ }
98
+ /**
99
+ * Extended result of lazy loading setup for Express.
100
+ *
101
+ * @public API
102
+ */
103
+ export interface LazyLoadingExpressResult extends LazyLoadingSetupResult {
104
+ /**
105
+ * Middleware for auto-loading lazy modules.
106
+ * Add this to your Express app to enable auto-loading.
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * const { middleware } = setupLazyLoadingForExpress(container, options);
111
+ * if (middleware) {
112
+ * this.Middleware.addMiddleware(middleware);
113
+ * }
114
+ * ```
115
+ */
116
+ middleware?: RequestHandler;
117
+ /**
118
+ * Route mappings used by the middleware.
119
+ */
120
+ routeMappings: Array<LazyRouteMapping>;
121
+ }
122
+ export type { LazyLoadingOptions, LazyLoadingSetupResult } from "@expressots/core";
123
+ export type { LazyRouteMapping } from "./lazy-module-middleware.js";
@@ -1,5 +1,5 @@
1
- import { interfaces } from "../../di/di.interfaces";
2
- import type { BaseController, ControllerMetadata, ControllerMethodMetadata, ControllerParameterMetadata, DecoratorTarget, IHttpActionResult } from "./interfaces";
1
+ import { interfaces } from "@expressots/core";
2
+ import type { BaseController, ControllerMetadata, ControllerMethodMetadata, ControllerParameterMetadata, DecoratorTarget, IHttpActionResult } from "./interfaces.js";
3
3
  export declare function getControllersFromContainer(container: interfaces.Container, forceControllers: boolean): Array<BaseController>;
4
4
  export declare function getControllersFromMetadata(): Array<DecoratorTarget>;
5
5
  export declare function getControllerMetadata(constructor: NewableFunction): ControllerMetadata;
@@ -7,3 +7,18 @@ export declare function getControllerMethodMetadata(constructor: NewableFunction
7
7
  export declare function getControllerParameterMetadata(constructor: NewableFunction): ControllerParameterMetadata;
8
8
  export declare function cleanUpMetadata(): void;
9
9
  export declare function instanceOfIHttpActionResult(value: unknown): value is IHttpActionResult;
10
+ /**
11
+ * Gets content negotiation metadata from a controller method.
12
+ * @param target - Controller instance
13
+ * @param propertyKey - Method name
14
+ * @returns Content negotiation metadata
15
+ */
16
+ export declare function getContentNegotiationMetadata(target: object, propertyKey: string | symbol): {
17
+ accept?: Array<string>;
18
+ consumes?: Array<string>;
19
+ produces?: Array<string>;
20
+ csvOptions?: import("@expressots/core").CsvFormatOptions;
21
+ xmlOptions?: import("@expressots/core").XmlFormatOptions;
22
+ yamlOptions?: import("@expressots/core").YamlFormatOptions;
23
+ streamResponse?: boolean;
24
+ };
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Validation Decorators
3
+ * @module @expressots/adapter-express
4
+ *
5
+ * Enhanced parameter decorators with validation support.
6
+ * These decorators extend the standard @body, @query, @param, @headers
7
+ * to accept optional schema for automatic validation.
8
+ */
9
+ import "reflect-metadata";
10
+ import type { ValidationOptions } from "@expressots/core";
11
+ /**
12
+ * Metadata stored for validation
13
+ */
14
+ export interface ValidationSchemaMetadata {
15
+ /** Parameter index */
16
+ index: number;
17
+ /** Parameter source (body, query, params, headers) */
18
+ source: "body" | "query" | "params" | "headers";
19
+ /** Schema to validate against */
20
+ schema?: unknown;
21
+ /** Validation options */
22
+ options?: ValidationOptions;
23
+ /** Whether this metadata was auto-inferred from TypeScript types */
24
+ inferred?: boolean;
25
+ }
26
+ /**
27
+ * Schema type - can be a class constructor, Zod schema, or any other schema type
28
+ */
29
+ export type SchemaType = (new (...args: Array<unknown>) => unknown) | object;
30
+ /**
31
+ * Options for validated decorators
32
+ */
33
+ export interface ValidatedDecoratorOptions extends ValidationOptions {
34
+ /** Force specific adapter by name */
35
+ adapter?: string;
36
+ }
37
+ /**
38
+ * Enhanced body decorator with validation support
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * // Without validation (backward compatible)
43
+ * @Post("/users")
44
+ * createUser(@body() user: CreateUserDTO) {}
45
+ *
46
+ * // With class-validator schema
47
+ * @Post("/users")
48
+ * createUser(@body(CreateUserDTO) user: CreateUserDTO) {}
49
+ *
50
+ * // With Zod schema
51
+ * const UserSchema = z.object({ email: z.string().email() });
52
+ * @Post("/users")
53
+ * createUser(@body(UserSchema) user: z.infer<typeof UserSchema>) {}
54
+ *
55
+ * // With validation options
56
+ * @Post("/users")
57
+ * createUser(@body({ group: "create", partial: false }) user: CreateUserDTO) {}
58
+ * ```
59
+ */
60
+ export declare const validatedBody: {
61
+ (schema?: SchemaType | ValidatedDecoratorOptions): ParameterDecorator;
62
+ (nameOrSchema?: string | SchemaType | ValidatedDecoratorOptions): ParameterDecorator;
63
+ };
64
+ /**
65
+ * Enhanced query decorator with validation support
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * // Extract single query param (backward compatible)
70
+ * @Get("/search")
71
+ * search(@query("page") page: number) {}
72
+ *
73
+ * // Extract all query params with validation
74
+ * @Get("/search")
75
+ * search(@query(SearchQueryDTO) query: SearchQueryDTO) {}
76
+ * ```
77
+ */
78
+ export declare const validatedQuery: {
79
+ (schema?: SchemaType | ValidatedDecoratorOptions): ParameterDecorator;
80
+ (nameOrSchema?: string | SchemaType | ValidatedDecoratorOptions): ParameterDecorator;
81
+ };
82
+ /**
83
+ * Enhanced param decorator with validation support
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * // Extract single route param (backward compatible)
88
+ * @Get("/:id")
89
+ * getUser(@param("id") id: string) {}
90
+ *
91
+ * // Extract all route params with validation
92
+ * @Get("/:userId/posts/:postId")
93
+ * getPost(@param(RouteParamsDTO) params: RouteParamsDTO) {}
94
+ * ```
95
+ */
96
+ export declare const validatedParam: {
97
+ (schema?: SchemaType | ValidatedDecoratorOptions): ParameterDecorator;
98
+ (nameOrSchema?: string | SchemaType | ValidatedDecoratorOptions): ParameterDecorator;
99
+ };
100
+ /**
101
+ * Enhanced headers decorator with validation support
102
+ *
103
+ * @example
104
+ * ```typescript
105
+ * // Extract single header (backward compatible)
106
+ * @Get("/")
107
+ * handle(@headers("authorization") auth: string) {}
108
+ *
109
+ * // Extract all headers with validation
110
+ * @Get("/")
111
+ * handle(@headers(RequiredHeadersDTO) headers: RequiredHeadersDTO) {}
112
+ * ```
113
+ */
114
+ export declare const validatedHeaders: {
115
+ (schema?: SchemaType | ValidatedDecoratorOptions): ParameterDecorator;
116
+ (nameOrSchema?: string | SchemaType | ValidatedDecoratorOptions): ParameterDecorator;
117
+ };
118
+ /**
119
+ * Get validation schema metadata for a method
120
+ * @param target - Controller constructor
121
+ * @param methodName - Method name
122
+ * @returns Array of validation metadata
123
+ */
124
+ export declare function getValidationMetadata(target: object, methodName: string): Array<ValidationSchemaMetadata>;
125
+ /**
126
+ * Check if a method has validation metadata
127
+ * @param target - Controller constructor
128
+ * @param methodName - Method name
129
+ * @returns true if validation is configured
130
+ */
131
+ export declare function hasValidationMetadata(target: object, methodName: string): boolean;
132
+ /**
133
+ * @Validate decorator - marks a parameter for auto-validation
134
+ * Can be used with any parameter decorator
135
+ *
136
+ * @example
137
+ * ```typescript
138
+ * @Post("/users")
139
+ * createUser(
140
+ * @Validate(CreateUserDTO)
141
+ * @body() user: CreateUserDTO
142
+ * ) {}
143
+ * ```
144
+ */
145
+ export declare function Validate<T = unknown>(schema: (new (...args: Array<unknown>) => T) | object, options?: ValidatedDecoratorOptions): ParameterDecorator;