@expressots/adapter-express 3.0.0 → 4.0.0-preview.3

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 (244) hide show
  1. package/LICENSE.md +21 -21
  2. package/README.md +61 -118
  3. package/lib/CHANGELOG.md +36 -5
  4. package/lib/README.md +61 -118
  5. package/lib/cjs/adapter-express/application-express.base.js +3 -1
  6. package/lib/cjs/adapter-express/application-express.js +1405 -85
  7. package/lib/cjs/adapter-express/express-utils/conditional-middleware.js +102 -0
  8. package/lib/cjs/adapter-express/express-utils/constants.js +17 -0
  9. package/lib/cjs/adapter-express/express-utils/content-negotiation-decorators.js +129 -0
  10. package/lib/cjs/adapter-express/express-utils/decorators.js +225 -59
  11. package/lib/cjs/adapter-express/express-utils/exception-filter-decorators.js +11 -0
  12. package/lib/cjs/adapter-express/express-utils/guard-context-factory.js +84 -0
  13. package/lib/cjs/adapter-express/express-utils/guard-middleware.js +115 -0
  14. package/lib/cjs/adapter-express/express-utils/guard-utils.js +18 -0
  15. package/lib/cjs/adapter-express/express-utils/http-context-store.js +15 -0
  16. package/lib/cjs/adapter-express/express-utils/http-status-middleware.js +37 -2
  17. package/lib/cjs/adapter-express/express-utils/index.js +67 -1
  18. package/lib/cjs/adapter-express/express-utils/interceptor-middleware.js +132 -0
  19. package/lib/cjs/adapter-express/express-utils/inversify-express-server.js +827 -64
  20. package/lib/cjs/adapter-express/express-utils/lazy-module-middleware.js +241 -0
  21. package/lib/cjs/adapter-express/express-utils/middleware-composition.js +95 -0
  22. package/lib/cjs/adapter-express/express-utils/path-pattern-compat.js +129 -0
  23. package/lib/cjs/adapter-express/express-utils/permission-preloader.middleware.js +48 -0
  24. package/lib/cjs/adapter-express/express-utils/route-constraints.js +104 -0
  25. package/lib/cjs/adapter-express/express-utils/scope-extractor.interface.js +2 -0
  26. package/lib/cjs/adapter-express/express-utils/scope-extractor.js +66 -0
  27. package/lib/cjs/adapter-express/express-utils/setup-authorization.js +71 -0
  28. package/lib/cjs/adapter-express/express-utils/setup-event-system.js +113 -0
  29. package/lib/cjs/adapter-express/express-utils/setup-interceptors.js +103 -0
  30. package/lib/cjs/adapter-express/express-utils/setup-lazy-loading.js +228 -0
  31. package/lib/cjs/adapter-express/express-utils/utils.js +30 -12
  32. package/lib/cjs/adapter-express/express-utils/validation-decorators.js +205 -0
  33. package/lib/cjs/adapter-express/express-utils/validation-service.js +252 -0
  34. package/lib/cjs/adapter-express/index.js +7 -5
  35. package/lib/cjs/adapter-express/micro-api/application-express-micro-route.js +31 -1
  36. package/lib/cjs/adapter-express/micro-api/application-express-micro.js +8 -38
  37. package/lib/cjs/adapter-express/micro-api/gateway/circuit-breaker.js +174 -0
  38. package/lib/cjs/adapter-express/micro-api/gateway/index.js +11 -0
  39. package/lib/cjs/adapter-express/micro-api/gateway/service-proxy.js +214 -0
  40. package/lib/cjs/adapter-express/micro-api/index.js +27 -3
  41. package/lib/cjs/adapter-express/micro-api/micro.js +272 -0
  42. package/lib/cjs/adapter-express/micro-api/queue/index.js +8 -0
  43. package/lib/cjs/adapter-express/micro-api/queue/queue.interface.js +2 -0
  44. package/lib/cjs/adapter-express/micro-api/queue/rabbitmq-consumer.js +255 -0
  45. package/lib/cjs/adapter-express/micro-api/serverless/aws-lambda.adapter.js +183 -0
  46. package/lib/cjs/adapter-express/micro-api/serverless/cloudflare.adapter.js +158 -0
  47. package/lib/cjs/adapter-express/micro-api/serverless/index.js +12 -0
  48. package/lib/cjs/adapter-express/micro-api/serverless/vercel.adapter.js +102 -0
  49. package/lib/cjs/adapter-express/micro-api/service-mesh/index.js +10 -0
  50. package/lib/cjs/adapter-express/micro-api/service-mesh/service-client.js +194 -0
  51. package/lib/cjs/adapter-express/micro-api/service-mesh/service-discovery.js +261 -0
  52. package/lib/cjs/adapter-express/middleware/index.js +21 -0
  53. package/lib/cjs/adapter-express/middleware/request-logging.middleware.js +244 -0
  54. package/lib/cjs/adapter-express/render/engine.js +15 -15
  55. package/lib/cjs/adapter-express/render/index.js +5 -0
  56. package/lib/cjs/adapter-express/studio/index.js +10 -0
  57. package/lib/cjs/adapter-express/studio/studio-integration.js +267 -0
  58. package/lib/cjs/index.js +1 -1
  59. package/lib/cjs/types/adapter-express/application-express.base.d.ts +20 -7
  60. package/lib/cjs/types/adapter-express/application-express.d.ts +316 -33
  61. package/lib/cjs/types/adapter-express/express-utils/base-middleware.d.ts +2 -2
  62. package/lib/cjs/types/adapter-express/express-utils/conditional-middleware.d.ts +97 -0
  63. package/lib/cjs/types/adapter-express/express-utils/constants.d.ts +13 -0
  64. package/lib/cjs/types/adapter-express/express-utils/content-negotiation-decorators.d.ts +94 -0
  65. package/lib/cjs/types/adapter-express/express-utils/decorators.d.ts +54 -6
  66. package/lib/cjs/types/adapter-express/express-utils/exception-filter-decorators.d.ts +6 -0
  67. package/lib/cjs/types/adapter-express/express-utils/guard-context-factory.d.ts +17 -0
  68. package/lib/cjs/types/adapter-express/express-utils/guard-middleware.d.ts +22 -0
  69. package/lib/cjs/types/adapter-express/express-utils/guard-utils.d.ts +11 -0
  70. package/lib/cjs/types/adapter-express/express-utils/http-context-store.d.ts +20 -0
  71. package/lib/cjs/types/adapter-express/express-utils/httpResponseMessage.d.ts +1 -1
  72. package/lib/cjs/types/adapter-express/express-utils/index.d.ts +30 -2
  73. package/lib/cjs/types/adapter-express/express-utils/interceptor-middleware.d.ts +40 -0
  74. package/lib/cjs/types/adapter-express/express-utils/interfaces.d.ts +42 -5
  75. package/lib/cjs/types/adapter-express/express-utils/inversify-express-server.d.ts +114 -2
  76. package/lib/cjs/types/adapter-express/express-utils/lazy-module-middleware.d.ts +122 -0
  77. package/lib/cjs/types/adapter-express/express-utils/middleware-composition.d.ts +85 -0
  78. package/lib/cjs/types/adapter-express/express-utils/path-pattern-compat.d.ts +66 -0
  79. package/lib/cjs/types/adapter-express/express-utils/permission-preloader.middleware.d.ts +10 -0
  80. package/lib/cjs/types/adapter-express/express-utils/route-constraints.d.ts +98 -0
  81. package/lib/cjs/types/adapter-express/express-utils/scope-extractor.d.ts +21 -0
  82. package/lib/cjs/types/adapter-express/express-utils/scope-extractor.interface.d.ts +12 -0
  83. package/lib/cjs/types/adapter-express/express-utils/setup-authorization.d.ts +34 -0
  84. package/lib/cjs/types/adapter-express/express-utils/setup-event-system.d.ts +118 -0
  85. package/lib/cjs/types/adapter-express/express-utils/setup-interceptors.d.ts +115 -0
  86. package/lib/cjs/types/adapter-express/express-utils/setup-lazy-loading.d.ts +123 -0
  87. package/lib/cjs/types/adapter-express/express-utils/utils.d.ts +17 -2
  88. package/lib/cjs/types/adapter-express/express-utils/validation-decorators.d.ts +145 -0
  89. package/lib/cjs/types/adapter-express/express-utils/validation-service.d.ts +88 -0
  90. package/lib/cjs/types/adapter-express/index.d.ts +6 -4
  91. package/lib/cjs/types/adapter-express/micro-api/application-express-micro-route.d.ts +25 -14
  92. package/lib/cjs/types/adapter-express/micro-api/application-express-micro.d.ts +3 -10
  93. package/lib/cjs/types/adapter-express/micro-api/gateway/circuit-breaker.d.ts +111 -0
  94. package/lib/cjs/types/adapter-express/micro-api/gateway/index.d.ts +5 -0
  95. package/lib/cjs/types/adapter-express/micro-api/gateway/service-proxy.d.ts +83 -0
  96. package/lib/cjs/types/adapter-express/micro-api/index.d.ts +7 -1
  97. package/lib/cjs/types/adapter-express/micro-api/micro.d.ts +83 -0
  98. package/lib/cjs/types/adapter-express/micro-api/queue/index.d.ts +5 -0
  99. package/lib/cjs/types/adapter-express/micro-api/queue/queue.interface.d.ts +60 -0
  100. package/lib/cjs/types/adapter-express/micro-api/queue/rabbitmq-consumer.d.ts +86 -0
  101. package/lib/cjs/types/adapter-express/micro-api/serverless/aws-lambda.adapter.d.ts +77 -0
  102. package/lib/cjs/types/adapter-express/micro-api/serverless/cloudflare.adapter.d.ts +64 -0
  103. package/lib/cjs/types/adapter-express/micro-api/serverless/index.d.ts +6 -0
  104. package/lib/cjs/types/adapter-express/micro-api/serverless/vercel.adapter.d.ts +56 -0
  105. package/lib/cjs/types/adapter-express/micro-api/service-mesh/index.d.ts +5 -0
  106. package/lib/cjs/types/adapter-express/micro-api/service-mesh/service-client.d.ts +122 -0
  107. package/lib/cjs/types/adapter-express/micro-api/service-mesh/service-discovery.d.ts +150 -0
  108. package/lib/cjs/types/adapter-express/middleware/index.d.ts +5 -0
  109. package/lib/cjs/types/adapter-express/middleware/request-logging.middleware.d.ts +65 -0
  110. package/lib/cjs/types/adapter-express/render/index.d.ts +1 -0
  111. package/lib/cjs/types/adapter-express/studio/index.d.ts +1 -0
  112. package/lib/cjs/types/adapter-express/studio/studio-integration.d.ts +170 -0
  113. package/lib/cjs/types/index.d.ts +1 -1
  114. package/lib/esm/adapter-express/application-express.base.js +24 -0
  115. package/lib/esm/adapter-express/application-express.js +1656 -0
  116. package/lib/esm/adapter-express/application-express.types.js +1 -0
  117. package/lib/esm/adapter-express/express-utils/base-middleware.js +19 -0
  118. package/lib/esm/adapter-express/express-utils/conditional-middleware.js +96 -0
  119. package/lib/esm/adapter-express/express-utils/constants.js +63 -0
  120. package/lib/esm/adapter-express/express-utils/content/httpContent.js +6 -0
  121. package/lib/esm/adapter-express/express-utils/content-negotiation-decorators.js +120 -0
  122. package/lib/esm/adapter-express/express-utils/decorators.js +604 -0
  123. package/lib/esm/adapter-express/express-utils/exception-filter-decorators.js +6 -0
  124. package/lib/esm/adapter-express/express-utils/guard-context-factory.js +83 -0
  125. package/lib/esm/adapter-express/express-utils/guard-middleware.js +115 -0
  126. package/lib/esm/adapter-express/express-utils/guard-utils.js +14 -0
  127. package/lib/esm/adapter-express/express-utils/http-context-store.js +10 -0
  128. package/lib/esm/adapter-express/express-utils/http-status-middleware.js +116 -0
  129. package/lib/esm/adapter-express/express-utils/httpResponseMessage.js +29 -0
  130. package/lib/esm/adapter-express/express-utils/index.js +24 -0
  131. package/lib/esm/adapter-express/express-utils/interceptor-middleware.js +130 -0
  132. package/lib/esm/adapter-express/express-utils/interfaces.js +1 -0
  133. package/lib/esm/adapter-express/express-utils/inversify-express-server.js +1047 -0
  134. package/lib/esm/adapter-express/express-utils/lazy-module-middleware.js +236 -0
  135. package/lib/esm/adapter-express/express-utils/middleware-composition.js +89 -0
  136. package/lib/esm/adapter-express/express-utils/path-pattern-compat.js +125 -0
  137. package/lib/esm/adapter-express/express-utils/permission-preloader.middleware.js +45 -0
  138. package/lib/esm/adapter-express/express-utils/resolver-multer.js +30 -0
  139. package/lib/esm/adapter-express/express-utils/route-constraints.js +100 -0
  140. package/lib/esm/adapter-express/express-utils/scope-extractor.interface.js +1 -0
  141. package/lib/esm/adapter-express/express-utils/scope-extractor.js +63 -0
  142. package/lib/esm/adapter-express/express-utils/setup-authorization.js +68 -0
  143. package/lib/esm/adapter-express/express-utils/setup-event-system.js +110 -0
  144. package/lib/esm/adapter-express/express-utils/setup-interceptors.js +100 -0
  145. package/lib/esm/adapter-express/express-utils/setup-lazy-loading.js +225 -0
  146. package/lib/esm/adapter-express/express-utils/utils.js +68 -0
  147. package/lib/esm/adapter-express/express-utils/validation-decorators.js +199 -0
  148. package/lib/esm/adapter-express/express-utils/validation-service.js +251 -0
  149. package/lib/esm/adapter-express/index.js +7 -0
  150. package/lib/esm/adapter-express/micro-api/application-express-micro-container.js +48 -0
  151. package/lib/esm/adapter-express/micro-api/application-express-micro-route.js +128 -0
  152. package/lib/esm/adapter-express/micro-api/application-express-micro.js +157 -0
  153. package/lib/esm/adapter-express/micro-api/gateway/circuit-breaker.js +174 -0
  154. package/lib/esm/adapter-express/micro-api/gateway/index.js +5 -0
  155. package/lib/esm/adapter-express/micro-api/gateway/service-proxy.js +210 -0
  156. package/lib/esm/adapter-express/micro-api/index.js +10 -0
  157. package/lib/esm/adapter-express/micro-api/micro.js +266 -0
  158. package/lib/esm/adapter-express/micro-api/queue/index.js +4 -0
  159. package/lib/esm/adapter-express/micro-api/queue/queue.interface.js +1 -0
  160. package/lib/esm/adapter-express/micro-api/queue/rabbitmq-consumer.js +229 -0
  161. package/lib/esm/adapter-express/micro-api/serverless/aws-lambda.adapter.js +180 -0
  162. package/lib/esm/adapter-express/micro-api/serverless/cloudflare.adapter.js +155 -0
  163. package/lib/esm/adapter-express/micro-api/serverless/index.js +6 -0
  164. package/lib/esm/adapter-express/micro-api/serverless/vercel.adapter.js +99 -0
  165. package/lib/esm/adapter-express/micro-api/service-mesh/index.js +5 -0
  166. package/lib/esm/adapter-express/micro-api/service-mesh/service-client.js +191 -0
  167. package/lib/esm/adapter-express/micro-api/service-mesh/service-discovery.js +259 -0
  168. package/lib/esm/adapter-express/middleware/index.js +5 -0
  169. package/lib/esm/adapter-express/middleware/request-logging.middleware.js +239 -0
  170. package/lib/esm/adapter-express/render/constants.js +37 -0
  171. package/lib/esm/adapter-express/render/engine.js +51 -0
  172. package/lib/esm/adapter-express/render/index.js +1 -0
  173. package/lib/esm/adapter-express/render/resolve-render.js +30 -0
  174. package/lib/esm/adapter-express/studio/index.js +1 -0
  175. package/lib/esm/adapter-express/studio/studio-integration.js +236 -0
  176. package/lib/esm/index.mjs +1 -0
  177. package/lib/esm/package.json +3 -0
  178. package/lib/esm/types/adapter-express/application-express.base.d.ts +77 -0
  179. package/lib/esm/types/adapter-express/application-express.d.ts +453 -0
  180. package/lib/esm/types/adapter-express/application-express.types.d.ts +23 -0
  181. package/lib/esm/types/adapter-express/express-utils/base-middleware.d.ts +8 -0
  182. package/lib/esm/types/adapter-express/express-utils/conditional-middleware.d.ts +97 -0
  183. package/lib/esm/types/adapter-express/express-utils/constants.d.ts +57 -0
  184. package/lib/esm/types/adapter-express/express-utils/content/httpContent.d.ts +6 -0
  185. package/lib/esm/types/adapter-express/express-utils/content-negotiation-decorators.d.ts +94 -0
  186. package/lib/esm/types/adapter-express/express-utils/decorators.d.ts +257 -0
  187. package/lib/esm/types/adapter-express/express-utils/exception-filter-decorators.d.ts +6 -0
  188. package/lib/esm/types/adapter-express/express-utils/guard-context-factory.d.ts +17 -0
  189. package/lib/esm/types/adapter-express/express-utils/guard-middleware.d.ts +22 -0
  190. package/lib/esm/types/adapter-express/express-utils/guard-utils.d.ts +11 -0
  191. package/lib/esm/types/adapter-express/express-utils/http-context-store.d.ts +20 -0
  192. package/lib/esm/types/adapter-express/express-utils/http-status-middleware.d.ts +26 -0
  193. package/lib/esm/types/adapter-express/express-utils/httpResponseMessage.d.ts +14 -0
  194. package/lib/esm/types/adapter-express/express-utils/index.d.ts +30 -0
  195. package/lib/esm/types/adapter-express/express-utils/interceptor-middleware.d.ts +40 -0
  196. package/lib/esm/types/adapter-express/express-utils/interfaces.d.ts +115 -0
  197. package/lib/esm/types/adapter-express/express-utils/inversify-express-server.d.ts +172 -0
  198. package/lib/esm/types/adapter-express/express-utils/lazy-module-middleware.d.ts +122 -0
  199. package/lib/esm/types/adapter-express/express-utils/middleware-composition.d.ts +85 -0
  200. package/lib/esm/types/adapter-express/express-utils/path-pattern-compat.d.ts +66 -0
  201. package/lib/esm/types/adapter-express/express-utils/permission-preloader.middleware.d.ts +10 -0
  202. package/lib/esm/types/adapter-express/express-utils/resolver-multer.d.ts +7 -0
  203. package/lib/esm/types/adapter-express/express-utils/route-constraints.d.ts +98 -0
  204. package/lib/esm/types/adapter-express/express-utils/scope-extractor.d.ts +21 -0
  205. package/lib/esm/types/adapter-express/express-utils/scope-extractor.interface.d.ts +12 -0
  206. package/lib/esm/types/adapter-express/express-utils/setup-authorization.d.ts +34 -0
  207. package/lib/esm/types/adapter-express/express-utils/setup-event-system.d.ts +118 -0
  208. package/lib/esm/types/adapter-express/express-utils/setup-interceptors.d.ts +115 -0
  209. package/lib/esm/types/adapter-express/express-utils/setup-lazy-loading.d.ts +123 -0
  210. package/lib/esm/types/adapter-express/express-utils/utils.d.ts +24 -0
  211. package/lib/esm/types/adapter-express/express-utils/validation-decorators.d.ts +145 -0
  212. package/lib/esm/types/adapter-express/express-utils/validation-service.d.ts +88 -0
  213. package/lib/esm/types/adapter-express/index.d.ts +7 -0
  214. package/lib/esm/types/adapter-express/micro-api/application-express-micro-container.d.ts +47 -0
  215. package/lib/esm/types/adapter-express/micro-api/application-express-micro-route.d.ts +104 -0
  216. package/lib/esm/types/adapter-express/micro-api/application-express-micro.d.ts +72 -0
  217. package/lib/esm/types/adapter-express/micro-api/gateway/circuit-breaker.d.ts +111 -0
  218. package/lib/esm/types/adapter-express/micro-api/gateway/index.d.ts +5 -0
  219. package/lib/esm/types/adapter-express/micro-api/gateway/service-proxy.d.ts +83 -0
  220. package/lib/esm/types/adapter-express/micro-api/index.d.ts +7 -0
  221. package/lib/esm/types/adapter-express/micro-api/micro.d.ts +83 -0
  222. package/lib/esm/types/adapter-express/micro-api/queue/index.d.ts +5 -0
  223. package/lib/esm/types/adapter-express/micro-api/queue/queue.interface.d.ts +60 -0
  224. package/lib/esm/types/adapter-express/micro-api/queue/rabbitmq-consumer.d.ts +86 -0
  225. package/lib/esm/types/adapter-express/micro-api/serverless/aws-lambda.adapter.d.ts +77 -0
  226. package/lib/esm/types/adapter-express/micro-api/serverless/cloudflare.adapter.d.ts +64 -0
  227. package/lib/esm/types/adapter-express/micro-api/serverless/index.d.ts +6 -0
  228. package/lib/esm/types/adapter-express/micro-api/serverless/vercel.adapter.d.ts +56 -0
  229. package/lib/esm/types/adapter-express/micro-api/service-mesh/index.d.ts +5 -0
  230. package/lib/esm/types/adapter-express/micro-api/service-mesh/service-client.d.ts +122 -0
  231. package/lib/esm/types/adapter-express/micro-api/service-mesh/service-discovery.d.ts +150 -0
  232. package/lib/esm/types/adapter-express/middleware/index.d.ts +5 -0
  233. package/lib/esm/types/adapter-express/middleware/request-logging.middleware.d.ts +65 -0
  234. package/lib/esm/types/adapter-express/render/constants.d.ts +26 -0
  235. package/lib/esm/types/adapter-express/render/engine.d.ts +20 -0
  236. package/lib/esm/types/adapter-express/render/index.d.ts +5 -0
  237. package/lib/esm/types/adapter-express/render/resolve-render.d.ts +7 -0
  238. package/lib/esm/types/adapter-express/studio/index.d.ts +1 -0
  239. package/lib/esm/types/adapter-express/studio/studio-integration.d.ts +170 -0
  240. package/lib/esm/types/index.d.ts +1 -0
  241. package/lib/package.json +170 -146
  242. package/package.json +170 -146
  243. package/lib/cjs/di/di.interfaces.js +0 -10
  244. package/lib/cjs/types/di/di.interfaces.d.ts +0 -289
@@ -0,0 +1,94 @@
1
+ import "reflect-metadata";
2
+ import type { CsvFormatOptions, XmlFormatOptions, YamlFormatOptions } from "@expressots/core";
3
+ /**
4
+ * Accept decorator to specify which content types this route accepts for responses.
5
+ * Used for content negotiation based on Accept header.
6
+ * @param contentTypes - Array of accepted content types (e.g., ["application/json", "application/xml"])
7
+ * @returns MethodDecorator
8
+ * @example
9
+ * ```typescript
10
+ * @Accept("application/json", "application/xml")
11
+ * @Get("/users")
12
+ * getUsers() {
13
+ * return [{ id: 1, name: "John" }];
14
+ * }
15
+ * ```
16
+ * @public API
17
+ */
18
+ export declare function Accept(...contentTypes: Array<string>): MethodDecorator;
19
+ /**
20
+ * Consumes decorator to specify which content types this route consumes for requests.
21
+ * Used for content negotiation based on Content-Type header.
22
+ * @param contentTypes - Array of consumed content types (e.g., ["application/json", "application/xml"])
23
+ * @returns MethodDecorator
24
+ * @example
25
+ * ```typescript
26
+ * @Consumes("application/json", "application/xml")
27
+ * @Post("/users")
28
+ * createUser(@body() user: UserDto) {
29
+ * return this.userService.create(user);
30
+ * }
31
+ * ```
32
+ * @public API
33
+ */
34
+ export declare function Consumes(...contentTypes: Array<string>): MethodDecorator;
35
+ /**
36
+ * Produces decorator to specify which content types this route produces for responses.
37
+ * Alias for @Accept() decorator.
38
+ * @param contentTypes - Array of produced content types
39
+ * @returns MethodDecorator
40
+ * @public API
41
+ */
42
+ export declare function Produces(...contentTypes: Array<string>): MethodDecorator;
43
+ /**
44
+ * CsvOptions decorator to configure CSV formatting options for a route.
45
+ * @param options - CSV formatting options
46
+ * @returns MethodDecorator
47
+ * @example
48
+ * ```typescript
49
+ * @CsvOptions({ fields: ["id", "name"], includeHeaders: true })
50
+ * @Get("/users")
51
+ * getUsers() {
52
+ * return [{ id: 1, name: "John", email: "john@example.com" }];
53
+ * }
54
+ * ```
55
+ * @public API
56
+ */
57
+ export declare function CsvOptions(options: CsvFormatOptions): MethodDecorator;
58
+ /**
59
+ * XmlOptions decorator to configure XML formatting options for a route.
60
+ * @param options - XML formatting options
61
+ * @returns MethodDecorator
62
+ * @example
63
+ * ```typescript
64
+ * @XmlOptions({ rootElement: "users", itemElement: "user", prettyPrint: true })
65
+ * @Get("/users")
66
+ * getUsers() {
67
+ * return [{ id: 1, name: "John" }];
68
+ * }
69
+ * ```
70
+ * @public API
71
+ */
72
+ export declare function XmlOptions(options: XmlFormatOptions): MethodDecorator;
73
+ /**
74
+ * YamlOptions decorator to configure YAML formatting options for a route.
75
+ * @param options - YAML formatting options
76
+ * @returns MethodDecorator
77
+ * @public API
78
+ */
79
+ export declare function YamlOptions(options: YamlFormatOptions): MethodDecorator;
80
+ /**
81
+ * StreamResponse decorator to indicate that the response should be streamed.
82
+ * Useful for large datasets.
83
+ * @returns MethodDecorator
84
+ * @example
85
+ * ```typescript
86
+ * @StreamResponse()
87
+ * @Get("/large-dataset")
88
+ * getLargeDataset() {
89
+ * return this.dataService.streamLargeDataset(); // Returns async iterator
90
+ * }
91
+ * ```
92
+ * @public API
93
+ */
94
+ export declare function StreamResponse(): MethodDecorator;
@@ -0,0 +1,257 @@
1
+ import "reflect-metadata";
2
+ import { PARAMETER_TYPE, HTTP_VERBS_ENUM } from "./constants.js";
3
+ import type { HandlerDecorator, Middleware, NewableFunction } from "./interfaces.js";
4
+ import { Request } from "express";
5
+ export declare const injectHttpContext: ParameterDecorator & PropertyDecorator;
6
+ /**
7
+ * Controller decorator to define a new controller
8
+ * @param path route path
9
+ * @param middleware array of middleware to be applied to all routes in the controller
10
+ * @public API
11
+ */
12
+ export declare function controller(path: string, ...middleware: Array<Middleware>): (target: NewableFunction) => void;
13
+ /**
14
+ * Http decorator to define the status code for a route
15
+ * @param code
16
+ * @returns MethodDecorator
17
+ * @example ```typescript
18
+ * @Http(200)
19
+ * @Get("/")
20
+ * hello() {
21
+ * return "Hello World";
22
+ * }
23
+ * ```
24
+ * @public API
25
+ */
26
+ export declare function Http(code: number): (target: object, key: string | symbol, descriptor: TypedPropertyDescriptor<any>) => void;
27
+ /**
28
+ * Version decorator to define the API version for a controller or route method
29
+ * @param version API version (e.g., "1", "1.0", "v1", or 1)
30
+ * @returns ClassDecorator | MethodDecorator
31
+ * @example ```typescript
32
+ * @Version("1")
33
+ * @controller("/users")
34
+ * class UserController {}
35
+ *
36
+ * // Or at method level:
37
+ * @Version("2")
38
+ * @Get("/")
39
+ * getUsers() {
40
+ * return "v2 users";
41
+ * }
42
+ * ```
43
+ * @public API
44
+ */
45
+ export declare function Version(version: string | number): (target: any, key?: string | symbol, descriptor?: any) => void;
46
+ /**
47
+ * Decorator to allow accept all HTTP methods
48
+ * @param path route path, wildcard
49
+ * @param middleware array of middleware to be applied to all routes defined in path logic
50
+ * @public API
51
+ */
52
+ export declare function All(path: string, ...middleware: Array<Middleware>): HandlerDecorator;
53
+ /**
54
+ * Decorator to allow GET HTTP method
55
+ * @param path route path
56
+ * @param middleware array of middleware to be applied to the route
57
+ * @public API
58
+ */
59
+ export declare function Get(path: string, ...middleware: Array<Middleware>): HandlerDecorator;
60
+ /**
61
+ * Decorator to allow POST HTTP method
62
+ * @param path route path
63
+ * @param middleware array of middleware to be applied to the route
64
+ * @public API
65
+ */
66
+ export declare function Post(path: string, ...middleware: Array<Middleware>): HandlerDecorator;
67
+ /**
68
+ * Decorator to allow PUT HTTP method
69
+ * @param path route path
70
+ * @param middleware array of middleware to be applied to the route
71
+ * @public API
72
+ */
73
+ export declare function Put(path: string, ...middleware: Array<Middleware>): HandlerDecorator;
74
+ /**
75
+ * Decorator to allow PATCH HTTP method
76
+ * @param path route path
77
+ * @param middleware array of middleware to be applied to the route
78
+ * @public API
79
+ */
80
+ export declare function Patch(path: string, ...middleware: Array<Middleware>): HandlerDecorator;
81
+ /**
82
+ * Decorator to allow HEAD HTTP method
83
+ * @param path route path
84
+ * @param middleware array of middleware to be applied to the route
85
+ * @public API
86
+ */
87
+ export declare function Head(path: string, ...middleware: Array<Middleware>): HandlerDecorator;
88
+ /**
89
+ * Decorator to allow DELETE HTTP method
90
+ * @param path route path
91
+ * @param middleware array of middleware to be applied to the route
92
+ * @public API
93
+ */
94
+ export declare function Delete(path: string, ...middleware: Array<Middleware>): HandlerDecorator;
95
+ /**
96
+ * Decorator to allow custom HTTP method
97
+ * @param method custom HTTP method
98
+ * @param path route path
99
+ * @param middleware array of middleware to be applied to the route
100
+ * @public API
101
+ */
102
+ export declare function Method(method: keyof typeof HTTP_VERBS_ENUM, path: string, ...middleware: Array<Middleware>): HandlerDecorator;
103
+ /**
104
+ * Parameter decorator to inject the request object
105
+ * @returns ParameterDecorator
106
+ */
107
+ export declare const request: () => ParameterDecorator;
108
+ /**
109
+ * Parameter decorator to inject the response object
110
+ * @returns ParameterDecorator
111
+ */
112
+ export declare const response: () => ParameterDecorator;
113
+ /**
114
+ * Parameter decorator to inject parameters from the route
115
+ * @returns ParameterDecorator
116
+ */
117
+ export declare const param: (paramName?: string) => ParameterDecorator;
118
+ /**
119
+ * Parameter decorator to inject query parameters
120
+ * @returns ParameterDecorator
121
+ */
122
+ export declare const query: (queryParamName?: string) => ParameterDecorator;
123
+ /**
124
+ * Parameter decorator to inject the request body
125
+ * @returns ParameterDecorator
126
+ */
127
+ export declare const body: () => ParameterDecorator;
128
+ /**
129
+ * Parameter decorator to inject the request headers
130
+ * @returns ParameterDecorator
131
+ */
132
+ export declare const headers: (headerName?: string) => ParameterDecorator;
133
+ /**
134
+ * Parameter decorator to inject the request cookies
135
+ * @returns ParameterDecorator
136
+ */
137
+ export declare const cookies: (cookieName?: string) => ParameterDecorator;
138
+ /**
139
+ * Parameter decorator next function
140
+ * @returns ParameterDecorator
141
+ */
142
+ export declare const next: () => ParameterDecorator;
143
+ /**
144
+ * Parameter decorator to inject the principal object obtained from AuthProvider
145
+ * @returns ParameterDecorator
146
+ */
147
+ export declare const principal: () => ParameterDecorator;
148
+ /**
149
+ * Parameter decorator to inject the request object
150
+ * @returns ParameterDecorator
151
+ * @param type - The type of parameter to inject
152
+ * @param parameterName - The name of the parameter to inject
153
+ * @public API
154
+ */
155
+ export declare function params(type: PARAMETER_TYPE, parameterName?: string): ParameterDecorator;
156
+ /**
157
+ * Render decorator to define the template and default data for a route
158
+ * @param template The template to render
159
+ * @param defaultData The default data to pass to the template
160
+ * @returns MethodDecorator
161
+ * @public API
162
+ */
163
+ export declare function Render(template: string, defaultData?: Record<string, unknown>): MethodDecorator;
164
+ export declare function getRenderMetadata(target: object, propertyKey: string | symbol): {
165
+ template?: string;
166
+ defaultData?: Record<string, unknown>;
167
+ };
168
+ /**
169
+ * Multer storage engine interface
170
+ */
171
+ export interface StorageEngine {
172
+ _handleFile(req: Request, file: MulterFile, callback: (error?: Error | null, info?: Partial<MulterFile>) => void): void;
173
+ _removeFile(req: Request, file: MulterFile, callback: (error: Error | null) => void): void;
174
+ }
175
+ /**
176
+ * Multer file interface
177
+ */
178
+ export interface MulterFile {
179
+ fieldname: string;
180
+ originalname: string;
181
+ encoding: string;
182
+ mimetype: string;
183
+ size: number;
184
+ destination?: string;
185
+ filename?: string;
186
+ path?: string;
187
+ buffer?: Buffer;
188
+ }
189
+ /**
190
+ * Multer limits interface
191
+ */
192
+ export interface MulterLimits {
193
+ fieldNameSize?: number;
194
+ fieldSize?: number;
195
+ fields?: number;
196
+ fileSize?: number;
197
+ files?: number;
198
+ parts?: number;
199
+ headerPairs?: number;
200
+ }
201
+ /**
202
+ * Multer options interface
203
+ */
204
+ export interface MulterOptions {
205
+ dest?: string;
206
+ storage?: StorageEngine;
207
+ limits?: MulterLimits;
208
+ fileFilter?: FileFilter;
209
+ }
210
+ export type FileFilterCallback = (error: Error | null, acceptFile: boolean) => void;
211
+ export type FileFilter = (req: Request, file: MulterFile, callback: FileFilterCallback) => void;
212
+ type FieldOptions = {
213
+ fieldName: string;
214
+ maxCount?: number;
215
+ };
216
+ /**
217
+ * File upload decorator to handle file uploads.
218
+ *
219
+ * This decorator integrates with the global upload configuration
220
+ * set via `Middleware.upload()` in app.ts. If global config exists,
221
+ * it will be used as defaults, with local options taking precedence.
222
+ *
223
+ * @param options - Field configuration (fieldName, maxCount, none, any)
224
+ * @param multerOptions - Optional multer options (overrides global config)
225
+ * @default { none: true }
226
+ * @returns MethodDecorator
227
+ *
228
+ * @example
229
+ * ```typescript
230
+ * // In app.ts - configure globally (optional)
231
+ * this.Middleware.upload({
232
+ * destination: './uploads',
233
+ * limits: { fileSize: 10 * 1024 * 1024 }
234
+ * });
235
+ *
236
+ * // In controller - uses global config automatically
237
+ * @Post('avatar')
238
+ * @FileUpload({ fieldName: 'avatar' })
239
+ * uploadAvatar(req: Request) {
240
+ * return req.file;
241
+ * }
242
+ *
243
+ * // Override global config for specific endpoint
244
+ * @Post('document')
245
+ * @FileUpload({ fieldName: 'doc' }, { limits: { fileSize: 50 * 1024 * 1024 } })
246
+ * uploadDocument(req: Request) {
247
+ * return req.file;
248
+ * }
249
+ * ```
250
+ *
251
+ * @public API
252
+ */
253
+ export declare function FileUpload(options?: FieldOptions | Array<FieldOptions> | {
254
+ none?: boolean;
255
+ any?: boolean;
256
+ }, multerOptions?: MulterOptions): MethodDecorator;
257
+ export {};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Re-export exception filter decorators from core for backward compatibility
3
+ * These decorators are now part of @expressots/core to avoid circular dependencies
4
+ * @public API
5
+ */
6
+ export { Catch, UseFilters } from "@expressots/core";
@@ -0,0 +1,17 @@
1
+ import "reflect-metadata";
2
+ import { Request, Response } from "express";
3
+ import { interfaces } from "@expressots/core";
4
+ import type { GuardContext } from "@expressots/core";
5
+ import type { IScopeExtractor } from "./scope-extractor.interface.js";
6
+ /**
7
+ * Factory for creating GuardContext from Express request/response
8
+ */
9
+ export declare class GuardContextFactory {
10
+ private container;
11
+ private scopeExtractor;
12
+ constructor(container: interfaces.Container, scopeExtractor: IScopeExtractor);
13
+ /**
14
+ * Create GuardContext from Express request/response
15
+ */
16
+ create(req: Request, res: Response): Promise<GuardContext>;
17
+ }
@@ -0,0 +1,22 @@
1
+ import { Request, Response, NextFunction } from "express";
2
+ import { Container } from "@expressots/core";
3
+ import { GuardExecutor } from "@expressots/core";
4
+ import { GuardContextFactory } from "./guard-context-factory.js";
5
+ /**
6
+ * Express middleware that executes guards before route handler
7
+ */
8
+ export declare class GuardMiddleware {
9
+ private executor;
10
+ private contextFactory;
11
+ private container;
12
+ constructor(executor: GuardExecutor, contextFactory: GuardContextFactory, container: Container);
13
+ /**
14
+ * Express middleware function
15
+ */
16
+ execute: (req: Request, res: Response, next: NextFunction) => Promise<void>;
17
+ /**
18
+ * Extract guards from request metadata
19
+ * @private
20
+ */
21
+ private extractGuards;
22
+ }
@@ -0,0 +1,11 @@
1
+ import "reflect-metadata";
2
+ import type { GuardClass, IGuard } from "@expressots/core";
3
+ import type { NewableFunction } from "./interfaces.js";
4
+ /**
5
+ * Extract guards from controller metadata
6
+ */
7
+ export declare function getControllerGuards(constructor: NewableFunction): Array<GuardClass | IGuard>;
8
+ /**
9
+ * Extract guards from method metadata
10
+ */
11
+ export declare function getMethodGuards(constructor: NewableFunction, methodName: string | symbol): Array<GuardClass | IGuard>;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Per-request HttpContext storage.
3
+ *
4
+ * Replaces the previous `Reflect.defineMetadata(METADATA_KEY.httpContext, ctx, req)`
5
+ * call in `InversifyExpressServer.build()`, which paid the cost of
6
+ * `reflect-metadata` map allocation and key lookup on every single request.
7
+ *
8
+ * A `WeakMap<Request, HttpContext>` is functionally identical (lookup keyed
9
+ * by request reference, GC'd when the request goes out of scope) and is
10
+ * substantially cheaper on the hot path because it bypasses
11
+ * `reflect-metadata`'s string-keyed metadata store.
12
+ *
13
+ * Both `InversifyExpressServer` and `GuardContextFactory` use this module
14
+ * so they observe the same per-request value.
15
+ */
16
+ import type { Request } from "express";
17
+ import type { HttpContext } from "./interfaces.js";
18
+ export declare function setHttpContext(req: Request, ctx: HttpContext): void;
19
+ export declare function getHttpContext(req: Request): HttpContext | undefined;
20
+ export declare function hasHttpContext(req: Request): boolean;
@@ -0,0 +1,26 @@
1
+ import "reflect-metadata";
2
+ import { Request, Response, NextFunction } from "express";
3
+ import { ExpressoMiddleware } from "@expressots/core";
4
+ /**
5
+ * Middleware that applies the status code to the response.
6
+ * @returns express.RequestHandler
7
+ */
8
+ export declare class HttpStatusCodeMiddleware extends ExpressoMiddleware {
9
+ private globalPrefix;
10
+ constructor(globalPrefix?: string);
11
+ use(req: Request, res: Response, next: NextFunction): void | Promise<void>;
12
+ /**
13
+ * Find the matching parameter path.
14
+ * @param path - The path to match.
15
+ * @param mapping - The mapping to check.
16
+ * @param method - The method to check.
17
+ * @returns The status code if found, otherwise null.
18
+ **/
19
+ private findMatchingParameterPath;
20
+ /**
21
+ * Set the default status code based on the request method.
22
+ * @param req - The request object.
23
+ * @param res - The response object.
24
+ **/
25
+ private setDefaultStatusCode;
26
+ }
@@ -0,0 +1,14 @@
1
+ import type { OutgoingHttpHeaders } from "node:http";
2
+ import { HttpContent } from "./content/httpContent.js";
3
+ export declare class HttpResponseMessage {
4
+ private _content;
5
+ private _headers;
6
+ get headers(): OutgoingHttpHeaders;
7
+ set headers(headers: OutgoingHttpHeaders);
8
+ get content(): HttpContent;
9
+ set content(value: HttpContent);
10
+ private _statusCode;
11
+ get statusCode(): number;
12
+ set statusCode(code: number);
13
+ constructor(statusCode?: number);
14
+ }
@@ -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 {};