@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,30 @@
1
+ export * from "./decorators.js";
2
+ export { Accept, Consumes, Produces, CsvOptions, XmlOptions, YamlOptions, StreamResponse, } from "./content-negotiation-decorators.js";
3
+ export { Controller } from "./interfaces.js";
4
+ export { Patterns, pattern } from "./route-constraints.js";
5
+ export { when, unless, isConditionalMiddleware } from "./conditional-middleware.js";
6
+ export type { ConditionalMiddlewareConfig, MiddlewareCondition } from "./conditional-middleware.js";
7
+ export { combine, sequence, isComposedMiddleware } from "./middleware-composition.js";
8
+ export type { ComposedMiddlewareConfig } from "./middleware-composition.js";
9
+ export { Catch, UseFilters } from "./exception-filter-decorators.js";
10
+ export { getControllerGuards, getMethodGuards } from "./guard-utils.js";
11
+ export { GuardContextFactory } from "./guard-context-factory.js";
12
+ export { GuardMiddleware } from "./guard-middleware.js";
13
+ export { InterceptorMiddleware, createInterceptorMiddleware } from "./interceptor-middleware.js";
14
+ export { ScopeExtractor } from "./scope-extractor.js";
15
+ export type { IScopeExtractor } from "./scope-extractor.interface.js";
16
+ export { PermissionPreloaderMiddleware } from "./permission-preloader.middleware.js";
17
+ export { TYPE } from "./constants.js";
18
+ export type { AuthProvider, Principal } from "./interfaces.js";
19
+ export { setupAuthorizationForExpress } from "./setup-authorization.js";
20
+ export { setupEventSystemForExpress } from "./setup-event-system.js";
21
+ export type { EventSystemOptions, EventSystemSetupResult } from "./setup-event-system.js";
22
+ export { setupInterceptorsForExpress } from "./setup-interceptors.js";
23
+ export type { InterceptorSystemOptions, InterceptorSystemSetupResult, BuiltInInterceptor, InterceptorClass, } from "./setup-interceptors.js";
24
+ export { setupLazyLoadingForExpress } from "./setup-lazy-loading.js";
25
+ export type { LazyLoadingOptions, LazyLoadingSetupResult, LazyLoadingExpressOptions, LazyLoadingExpressResult, LazyRouteMapping, } from "./setup-lazy-loading.js";
26
+ export { createLazyModuleMiddleware, createRouteMappings } from "./lazy-module-middleware.js";
27
+ export { validatedBody, validatedQuery, validatedParam, validatedHeaders, Validate, getValidationMetadata, hasValidationMetadata, } from "./validation-decorators.js";
28
+ export type { ValidationSchemaMetadata, SchemaType, ValidatedDecoratorOptions, } from "./validation-decorators.js";
29
+ export { ValidationService } from "./validation-service.js";
30
+ export { getHttpContext, hasHttpContext } from "./http-context-store.js";
@@ -0,0 +1,40 @@
1
+ import { Request, Response, NextFunction } from "express";
2
+ import { Container, interfaces, InterceptorExecutor } from "@expressots/core";
3
+ import "reflect-metadata";
4
+ /**
5
+ * Express middleware that executes interceptors around route handler
6
+ *
7
+ * @layer internal
8
+ * @audience framework-developers
9
+ *
10
+ * @summary Quick Start
11
+ * InterceptorMiddleware integrates the interceptor system with Express.
12
+ * It wraps the route handler with interceptors defined via @UseInterceptors().
13
+ *
14
+ * @internal
15
+ */
16
+ export declare class InterceptorMiddleware {
17
+ private executor;
18
+ private container;
19
+ constructor(executor: InterceptorExecutor, container: Container);
20
+ /**
21
+ * Create middleware for a specific controller and method
22
+ * @param controllerClass - Controller class
23
+ * @param methodName - Method name
24
+ * @param handler - Original route handler
25
+ */
26
+ createMiddleware(controllerClass: NewableFunction, methodName: string | symbol, handler: (req: Request, res: Response, next: NextFunction) => Promise<unknown>): (req: Request, res: Response, next: NextFunction) => Promise<void>;
27
+ /**
28
+ * Extract interceptors from controller and method metadata
29
+ * @private
30
+ */
31
+ private extractInterceptors;
32
+ }
33
+ /**
34
+ * Factory function to create interceptor middleware
35
+ * @param container - DI container
36
+ * @param controllerClass - Controller class
37
+ * @param methodName - Method name
38
+ * @param handler - Original handler
39
+ */
40
+ export declare function createInterceptorMiddleware(container: interfaces.Container | Container, controllerClass: NewableFunction, methodName: string | symbol, handler: (req: Request, res: Response, next: NextFunction) => Promise<unknown>): (req: Request, res: Response, next: NextFunction) => Promise<void>;
@@ -0,0 +1,115 @@
1
+ import type { Application, NextFunction, Request, RequestHandler, Response } from "express";
2
+ import { interfaces as inversifyInterfaces } from "@expressots/core";
3
+ import { HTTP_VERBS_ENUM, PARAMETER_TYPE } from "./constants.js";
4
+ import { HttpResponseMessage } from "./httpResponseMessage.js";
5
+ /**
6
+ * Type for a constructor function (class)
7
+ */
8
+ export type NewableFunction = abstract new (...args: Array<any>) => any;
9
+ type Prototype<T> = {
10
+ [P in keyof T]: T[P] extends NewableFunction ? T[P] : T[P] | undefined;
11
+ } & {
12
+ constructor: NewableFunction;
13
+ };
14
+ interface ConstructorFunction<T = Record<string, unknown>> {
15
+ new (...args: Array<unknown>): T;
16
+ prototype: Prototype<T>;
17
+ }
18
+ export type DecoratorTarget<T = unknown> = ConstructorFunction<T> | Prototype<T>;
19
+ export interface IExpressoMiddleware {
20
+ use(req: Request, res: Response, next: NextFunction): Promise<void> | void;
21
+ }
22
+ /**
23
+ * Conditional middleware configuration type.
24
+ * Import from conditional-middleware.ts for the full ConditionalMiddlewareConfig interface.
25
+ */
26
+ export interface ConditionalMiddlewareConfig {
27
+ condition: (req: Request) => boolean | Promise<boolean>;
28
+ middleware: Middleware;
29
+ skipOnFalse?: boolean;
30
+ }
31
+ /**
32
+ * Composed middleware configuration type.
33
+ * Import from middleware-composition.ts for the full ComposedMiddlewareConfig interface.
34
+ */
35
+ export interface ComposedMiddlewareConfig {
36
+ middleware: Array<Middleware>;
37
+ type: "combine" | "sequence";
38
+ }
39
+ /**
40
+ * Middleware class constructor type.
41
+ * Supports classes that extend ExpressoMiddleware or implement IExpressoMiddleware.
42
+ * Accepts both concrete and abstract class constructors.
43
+ * Phase 2: Supports class references without 'new' keyword.
44
+ */
45
+ export type MiddlewareClass = (new (...args: Array<unknown>) => IExpressoMiddleware) | (abstract new (...args: Array<unknown>) => IExpressoMiddleware);
46
+ /**
47
+ * Union type for all supported middleware types.
48
+ * Phase 2: Includes class constructors (class references) for cleaner API.
49
+ * Note: Uses 'any' for class constructors to support typeof class types (e.g., typeof AdminMiddleware).
50
+ */
51
+ export type Middleware = string | symbol | RequestHandler | IExpressoMiddleware | ConditionalMiddlewareConfig | MiddlewareClass | {
52
+ prototype: IExpressoMiddleware;
53
+ } | any;
54
+ export type ControllerHandler = (...params: Array<unknown>) => unknown;
55
+ export type BaseController = Record<string, ControllerHandler>;
56
+ export interface Controller {
57
+ }
58
+ export interface ControllerMetadata {
59
+ middleware: Array<Middleware>;
60
+ path: string;
61
+ target: DecoratorTarget;
62
+ version?: string | number;
63
+ }
64
+ export interface ControllerMethodMetadata extends ControllerMetadata {
65
+ key: string;
66
+ method: keyof typeof HTTP_VERBS_ENUM;
67
+ version?: string | number;
68
+ }
69
+ export interface ControllerParameterMetadata {
70
+ [methodName: string]: Array<ParameterMetadata>;
71
+ }
72
+ export interface ParameterMetadata {
73
+ index: number;
74
+ injectRoot: boolean;
75
+ parameterName?: string | undefined;
76
+ type: PARAMETER_TYPE;
77
+ }
78
+ export type ExtractedParameters = Array<ParameterMetadata> | [Request, Response, NextFunction] | Array<unknown>;
79
+ export type HandlerDecorator = (target: object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
80
+ export type ConfigFunction = (app: Application) => void;
81
+ export interface RoutingConfig {
82
+ rootPath: string;
83
+ }
84
+ export interface Principal<T = unknown> {
85
+ details: T;
86
+ isAuthenticated(): Promise<boolean>;
87
+ isInRole(role: string): Promise<boolean>;
88
+ isResourceOwner(resourceId: unknown): Promise<boolean>;
89
+ }
90
+ export interface AuthProvider {
91
+ getUser(req: Request, res: Response, next: NextFunction): Promise<Principal>;
92
+ }
93
+ export interface HttpContext<T = unknown> {
94
+ container: inversifyInterfaces.Container;
95
+ request: Request;
96
+ response: Response;
97
+ user: Principal<T>;
98
+ }
99
+ export interface IHttpActionResult {
100
+ executeAsync(): Promise<HttpResponseMessage>;
101
+ }
102
+ export interface RouteDetails {
103
+ args?: Array<string>;
104
+ route: string;
105
+ }
106
+ export interface RouteInfo {
107
+ controller: string;
108
+ endpoints: Array<RouteDetails>;
109
+ }
110
+ export interface RawMetadata {
111
+ controllerMetadata: ControllerMetadata;
112
+ methodMetadata: Array<ControllerMethodMetadata>;
113
+ parameterMetadata: ControllerParameterMetadata;
114
+ }
115
+ export {};
@@ -0,0 +1,172 @@
1
+ import express, { Application, Router } from "express";
2
+ import { interfaces, ContentNegotiationService } from "@expressots/core";
3
+ import type { AuthProvider, ConfigFunction, RoutingConfig } from "./interfaces.js";
4
+ import { ValidationService } from "./validation-service.js";
5
+ export declare class InversifyExpressServer {
6
+ private _router;
7
+ private _container;
8
+ private _app;
9
+ private _configFn;
10
+ private _errorConfigFn;
11
+ private _routingConfig;
12
+ private _AuthProvider;
13
+ private _forceControllers;
14
+ private _contentNegotiationService?;
15
+ private _validationService?;
16
+ /**
17
+ * Wrapper for the express server.
18
+ *
19
+ * @param container Container loaded with all controllers and their dependencies.
20
+ * @param customRouter optional express.Router custom router
21
+ * @param routingConfig optional interfaces.RoutingConfig routing config
22
+ * @param customApp optional express.Application custom app
23
+ * @param authProvider optional interfaces.AuthProvider auth provider
24
+ * @param forceControllers optional boolean setting to force controllers (defaults do true)
25
+ */
26
+ constructor(container: interfaces.Container, customRouter?: Router | null, routingConfig?: RoutingConfig | null, customApp?: Application | null, authProvider?: (new () => AuthProvider) | null, forceControllers?: boolean);
27
+ /**
28
+ * Sets the configuration function to be applied to the application.
29
+ * Note that the config function is not actually executed until a call to
30
+ * InversifyExpresServer.build().
31
+ *
32
+ * This method is chainable.
33
+ *
34
+ * @param fn Function in which app-level middleware can be registered.
35
+ */
36
+ setConfig(fn: ConfigFunction): InversifyExpressServer;
37
+ /**
38
+ * Sets the error handler configuration function to be applied to the application.
39
+ * Note that the error config function is not actually executed until a call to
40
+ * InversifyExpressServer.build().
41
+ *
42
+ * This method is chainable.
43
+ *
44
+ * @param fn Function in which app-level error handlers can be registered.
45
+ */
46
+ setErrorConfig(fn: ConfigFunction): InversifyExpressServer;
47
+ /**
48
+ * Applies all routes and configuration to the server, returning the express application.
49
+ */
50
+ build(): express.Application;
51
+ /**
52
+ * Install a catch-all 404 handler that runs after every registered route.
53
+ *
54
+ * When the user has the suggestions feature enabled (default in development),
55
+ * this consults the route registry, computes "Did you mean ...?" suggestions
56
+ * via `getErrorHints` from `@expressots/core`, logs them through the framework
57
+ * Logger, and returns a structured RFC-7807-style JSON 404 instead of the
58
+ * default Express HTML.
59
+ *
60
+ * Users who want the legacy Express HTML 404 can opt out by configuring the
61
+ * Logger with `suggestions.enabled = false` (this also disables the JSON
62
+ * envelope so they can install their own 404 handler in the error-config fn).
63
+ *
64
+ * @private
65
+ */
66
+ private registerNotFoundHandler;
67
+ /**
68
+ * Resolve the user-configured suggestions config, falling back to the
69
+ * env-aware default when the Logger is not bound or has no overrides.
70
+ *
71
+ * @private
72
+ */
73
+ private resolveSuggestionsConfig;
74
+ /**
75
+ * Resolve the framework Logger from DI when available.
76
+ *
77
+ * @private
78
+ */
79
+ private resolveLogger;
80
+ private registerControllers;
81
+ /**
82
+ * Initialize the interceptor system by binding required components
83
+ * @private
84
+ */
85
+ private initializeInterceptorSystem;
86
+ /**
87
+ * Check if the interceptor system is properly initialized
88
+ * @private
89
+ */
90
+ private isInterceptorSystemReady;
91
+ /**
92
+ * Extract interceptors from controller and method metadata
93
+ * @private
94
+ */
95
+ private extractInterceptors;
96
+ /**
97
+ * Wrap a handler with interceptor middleware
98
+ * @private
99
+ */
100
+ private wrapWithInterceptors;
101
+ /**
102
+ * Checks if a middleware item is a class constructor (not an instance).
103
+ * Handles classes that extend ExpressoMiddleware (which has abstract use method).
104
+ * Note: Abstract methods don't exist at runtime, so we check for concrete implementations.
105
+ */
106
+ private isMiddlewareClass;
107
+ private isExpressoMiddleware;
108
+ private resolveMiddleware;
109
+ /**
110
+ * Creates a lazy middleware handler for class constructors.
111
+ * Supports both container-bound middleware (via @provide()) and direct instantiation.
112
+ *
113
+ * Performance: Instances are created per-request to support request-scoped state.
114
+ * For better performance with stateless middleware, use container-bound middleware
115
+ * with proper scoping (singleton/request scope) via @provide().
116
+ *
117
+ * Note: If container resolution fails (e.g., base class missing @injectable()),
118
+ * falls back to direct instantiation for backward compatibility.
119
+ */
120
+ private createLazyMiddlewareHandler;
121
+ /**
122
+ * Creates a request handler for conditional middleware.
123
+ * Evaluates the condition and executes the wrapped middleware if condition is true.
124
+ */
125
+ private createConditionalMiddlewareHandler;
126
+ /**
127
+ * Creates a request handler for composed middleware (Phase 3: Middleware Composition).
128
+ * Executes all middleware in the composition sequentially.
129
+ * Both 'combine' and 'sequence' types behave the same way - they execute middleware
130
+ * sequentially and propagate errors normally (Express handles errors via next(error)).
131
+ *
132
+ * @param config - ComposedMiddlewareConfig containing the middleware array and type
133
+ * @returns Express RequestHandler
134
+ */
135
+ private createComposedMiddlewareHandler;
136
+ /**
137
+ * Executes a chain of middleware handlers sequentially.
138
+ * Each middleware calls next() to proceed to the next one.
139
+ * Handles both synchronous and asynchronous middleware.
140
+ */
141
+ private executeMiddlewareChain;
142
+ private copyHeadersTo;
143
+ private handleHttpResponseMessage;
144
+ private handlerFactory;
145
+ private executeRouteHandler;
146
+ private _getHttpContext;
147
+ /**
148
+ * Sets the content negotiation service instance.
149
+ * @param service - Content negotiation service instance
150
+ */
151
+ setContentNegotiationService(service: ContentNegotiationService): void;
152
+ /**
153
+ * Gets the content negotiation service if available.
154
+ * @returns Content negotiation service or undefined
155
+ */
156
+ private getContentNegotiationService;
157
+ /**
158
+ * Sets the validation service instance.
159
+ * @param service - Validation service instance
160
+ */
161
+ setValidationService(service: ValidationService): void;
162
+ /**
163
+ * Gets the validation service if available.
164
+ * @returns Validation service or undefined
165
+ */
166
+ private getValidationService;
167
+ private _createHttpContext;
168
+ private _getCurrentUser;
169
+ private extractParameters;
170
+ private getParam;
171
+ private _getPrincipal;
172
+ }
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Lazy Module Auto-Load Middleware
3
+ *
4
+ * Automatically loads lazy modules when their routes are accessed.
5
+ * This provides seamless lazy loading without 404 errors.
6
+ *
7
+ * @module adapter-express
8
+ */
9
+ import { RequestHandler, Router, Express } from "express";
10
+ import { LazyModuleLoader, ILazyModule } from "@expressots/core";
11
+ /**
12
+ * Route prefix mapping for lazy modules.
13
+ * Maps route prefixes to module names for auto-loading.
14
+ */
15
+ export interface LazyRouteMapping {
16
+ /** Route prefix (e.g., "/admin", "/reports") */
17
+ prefix: string;
18
+ /** Module name to load when this prefix is accessed */
19
+ moduleName: string;
20
+ /** Whether the module is currently loaded */
21
+ loaded: boolean;
22
+ }
23
+ /**
24
+ * Configuration for the lazy module middleware.
25
+ */
26
+ export interface LazyModuleMiddlewareConfig {
27
+ /** Route mappings */
28
+ routes: Array<LazyRouteMapping>;
29
+ /** The lazy module loader instance */
30
+ loader: LazyModuleLoader;
31
+ /** Global route prefix (e.g., "/api") */
32
+ globalPrefix?: string;
33
+ /** Callback when a module starts loading */
34
+ onLoadStart?: (moduleName: string, path: string) => void;
35
+ /** Callback when a module finishes loading */
36
+ onLoadComplete?: (moduleName: string, loadTimeMs: number) => void;
37
+ /** Callback when module loading fails */
38
+ onLoadError?: (moduleName: string, error: Error) => void;
39
+ /**
40
+ * Express app or router for dynamic route registration.
41
+ * When provided, routes are registered dynamically after module load,
42
+ * eliminating the need for 307 redirects.
43
+ */
44
+ expressApp?: Express | Router;
45
+ /**
46
+ * Callback to register lazy module routes after loading.
47
+ * When provided, this is called to register the module's routes dynamically.
48
+ * If not provided and expressApp is set, default registration is attempted.
49
+ */
50
+ onRegisterRoutes?: (moduleName: string, router: Router) => void;
51
+ }
52
+ /**
53
+ * Create middleware that auto-loads lazy modules when their routes are accessed.
54
+ *
55
+ * @layer public
56
+ * @audience application-developers
57
+ * @concept lazy-loading
58
+ *
59
+ * UNIQUE: Seamless lazy loading - no 404s! Modules load automatically
60
+ * when their routes are accessed for the first time.
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * const middleware = createLazyModuleMiddleware({
65
+ * routes: [
66
+ * { prefix: "/admin", moduleName: "AdminModule", loaded: false },
67
+ * { prefix: "/reports", moduleName: "ReportsModule", loaded: false }
68
+ * ],
69
+ * loader: lazyModuleLoader,
70
+ * globalPrefix: "/api"
71
+ * });
72
+ *
73
+ * app.use(middleware);
74
+ * ```
75
+ *
76
+ * @param config - Middleware configuration
77
+ * @returns Express middleware function
78
+ *
79
+ * @public API
80
+ */
81
+ export declare function createLazyModuleMiddleware(config: LazyModuleMiddlewareConfig): RequestHandler;
82
+ /**
83
+ * Extract route prefixes from a lazy module.
84
+ *
85
+ * Uses auto-detected routes from CreateLazyModule (which analyzes @controller decorators),
86
+ * falls back to prefetchOn config, and finally infers from module name.
87
+ *
88
+ * @param lazyModule - The lazy module to analyze
89
+ * @returns Detected route prefixes
90
+ *
91
+ * @public API
92
+ */
93
+ export declare function extractRoutePrefixes(lazyModule: ILazyModule): Array<string>;
94
+ /**
95
+ * Create route mappings from lazy modules.
96
+ *
97
+ * Route detection priority:
98
+ * 1. Manual routePrefixMap (if provided)
99
+ * 2. Auto-detected from @controller() decorators (via CreateLazyModule)
100
+ * 3. prefetchOn config
101
+ * 4. Inferred from module name
102
+ *
103
+ * @param lazyModules - Array of lazy modules
104
+ * @param routePrefixMap - Optional manual prefix mappings { moduleName: prefix }
105
+ * @returns Array of route mappings
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * // Zero-config: routes auto-detected from controllers!
110
+ * const mappings = createRouteMappings([AdminModule, ReportsModule]);
111
+ * // Automatically maps @controller("/admin") -> /admin
112
+ *
113
+ * // Or with manual overrides
114
+ * const mappings = createRouteMappings(
115
+ * [AdminModule, ReportsModule],
116
+ * { "AdminModule": "/admin-panel" } // Override auto-detection
117
+ * );
118
+ * ```
119
+ *
120
+ * @public API
121
+ */
122
+ export declare function createRouteMappings(lazyModules: Array<ILazyModule>, routePrefixMap?: Record<string, string>): Array<LazyRouteMapping>;
@@ -0,0 +1,85 @@
1
+ import type { Middleware } from "./interfaces.js";
2
+ /**
3
+ * Configuration object for composed middleware.
4
+ * Represents a group of middleware that should be executed together.
5
+ */
6
+ export interface ComposedMiddlewareConfig {
7
+ /**
8
+ * Array of middleware to execute.
9
+ * Can be any valid ExpressoTS middleware type (function, class instance, class reference, or container-bound).
10
+ */
11
+ middleware: Array<Middleware>;
12
+ /**
13
+ * Composition type: 'combine' or 'sequence'.
14
+ * - 'combine': All middleware execute sequentially, errors propagate normally
15
+ * - 'sequence': Middleware execute sequentially, execution stops on error
16
+ */
17
+ type: "combine" | "sequence";
18
+ /**
19
+ * Symbol to identify composed middleware configuration objects.
20
+ * Used internally for type checking.
21
+ */
22
+ [COMPOSED_MIDDLEWARE_SYMBOL]: true;
23
+ }
24
+ /**
25
+ * Symbol to identify composed middleware configuration objects.
26
+ * Used internally for type checking.
27
+ */
28
+ export declare const COMPOSED_MIDDLEWARE_SYMBOL: unique symbol;
29
+ /**
30
+ * Type guard to check if an object is a ComposedMiddlewareConfig.
31
+ */
32
+ export declare function isComposedMiddleware(item: unknown): item is ComposedMiddlewareConfig;
33
+ /**
34
+ * Combines multiple middleware into a single middleware that executes all of them sequentially.
35
+ * All middleware will execute in order. If any middleware calls `next(error)`, the error
36
+ * is propagated to Express's error handling system.
37
+ *
38
+ * @param middleware - Array of middleware to combine
39
+ * @returns ComposedMiddlewareConfig object
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * // Combine multiple middleware into a reusable group
44
+ * @Get("/api", combine(AuthMiddleware, LoggingMiddleware, RateLimitMiddleware))
45
+ * async apiHandler() {}
46
+ * ```
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * // Combine with conditional middleware (Phase 3)
51
+ * @Get("/admin",
52
+ * when(req => req.method === "POST", combine(BodyParser, ValidationMiddleware)),
53
+ * combine(AuthMiddleware, LoggingMiddleware)
54
+ * )
55
+ * async adminHandler() {}
56
+ * ```
57
+ */
58
+ export declare function combine(...middleware: Array<Middleware>): ComposedMiddlewareConfig;
59
+ /**
60
+ * Sequences multiple middleware that execute one after another.
61
+ * Similar to `combine()`, but semantically indicates sequential execution
62
+ * where each middleware depends on the previous one completing successfully.
63
+ * If any middleware calls `next(error)`, execution stops and the error is propagated.
64
+ *
65
+ * @param middleware - Array of middleware to sequence
66
+ * @returns ComposedMiddlewareConfig object
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * // Sequence middleware where each depends on the previous
71
+ * @Get("/api", sequence(ValidateMiddleware, TransformMiddleware, ProcessMiddleware))
72
+ * async apiHandler() {}
73
+ * ```
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * // Sequence with conditional middleware
78
+ * @Get("/data",
79
+ * when(req => req.method === "POST", sequence(BodyParser, ValidateMiddleware)),
80
+ * sequence(AuthMiddleware, ProcessMiddleware)
81
+ * )
82
+ * async dataHandler() {}
83
+ * ```
84
+ */
85
+ export declare function sequence(...middleware: Array<Middleware>): ComposedMiddlewareConfig;
@@ -0,0 +1,10 @@
1
+ import { Request, Response, NextFunction } from "express";
2
+ import { BaseMiddleware } from "./base-middleware.js";
3
+ /**
4
+ * Middleware that preloads permissions for authenticated users
5
+ * Caches permissions in request-scoped SecurityContext
6
+ */
7
+ export declare class PermissionPreloaderMiddleware extends BaseMiddleware {
8
+ private securityContext?;
9
+ handler(req: Request, res: Response, next: NextFunction): Promise<void>;
10
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Resolve package from the current working directory.
3
+ * @param packageName
4
+ * @param options
5
+ * @returns
6
+ */
7
+ export declare function packageResolver(packageName: string): any;
@@ -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;