@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,19 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { injectable } from "@expressots/core";
8
+ let BaseMiddleware = class BaseMiddleware {
9
+ // httpContext is initialized when the middleware is invoked
10
+ // see resolveMiddleware in server.ts for more details
11
+ httpContext;
12
+ bind(serviceIdentifier) {
13
+ return this.httpContext.container.bind(serviceIdentifier);
14
+ }
15
+ };
16
+ BaseMiddleware = __decorate([
17
+ injectable()
18
+ ], BaseMiddleware);
19
+ export { BaseMiddleware };
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Symbol to identify conditional middleware configuration objects.
3
+ * Used internally for type checking.
4
+ */
5
+ export const CONDITIONAL_MIDDLEWARE_SYMBOL = Symbol("ConditionalMiddleware");
6
+ /**
7
+ * Type guard to check if an object is a ConditionalMiddlewareConfig.
8
+ */
9
+ export function isConditionalMiddleware(item) {
10
+ return (typeof item === "object" &&
11
+ item !== null &&
12
+ "condition" in item &&
13
+ "middleware" in item &&
14
+ typeof item.condition === "function");
15
+ }
16
+ /**
17
+ * Creates a conditional middleware configuration that executes the middleware
18
+ * when the condition evaluates to true.
19
+ *
20
+ * @param condition - Function that receives the Request and returns boolean or Promise<boolean>
21
+ * @param middleware - The middleware to execute when condition is true
22
+ * @returns ConditionalMiddlewareConfig object
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * // Phase 2: Class reference support - no 'new' keyword needed
27
+ * @Get("/admin",
28
+ * when(req => req.hostname.startsWith("admin."), AdminMiddleware),
29
+ * AuthMiddleware
30
+ * )
31
+ * async adminHandler() {}
32
+ * ```
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * // Async condition with class reference (Phase 2)
37
+ * @Get("/api",
38
+ * when(async req => {
39
+ * const user = await getUser(req);
40
+ * return user.isAdmin;
41
+ * }, AdminMiddleware)
42
+ * )
43
+ * async apiHandler() {}
44
+ * ```
45
+ */
46
+ export function when(condition,
47
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
+ middleware) {
49
+ return {
50
+ condition,
51
+ middleware: middleware,
52
+ skipOnFalse: true,
53
+ };
54
+ }
55
+ /**
56
+ * Creates a conditional middleware configuration that executes the middleware
57
+ * when the condition evaluates to false (inverse of `when`).
58
+ *
59
+ * @param condition - Function that receives the Request and returns boolean or Promise<boolean>
60
+ * @param middleware - The middleware to execute when condition is false
61
+ * @returns ConditionalMiddlewareConfig object
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * // Phase 2: Class reference support - no 'new' keyword needed
66
+ * @Get("/public",
67
+ * unless(req => req.headers.authorization, AuthMiddleware)
68
+ * )
69
+ * async publicHandler() {}
70
+ * ```
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * // Skip authentication for public routes (Phase 2: class reference)
75
+ * @Get("/health",
76
+ * unless(req => req.path.startsWith("/api"), AuthMiddleware)
77
+ * )
78
+ * async healthCheck() {}
79
+ * ```
80
+ */
81
+ export function unless(condition,
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
+ middleware) {
84
+ return {
85
+ condition: (req) => {
86
+ const result = condition(req);
87
+ // Invert the condition: if condition returns Promise, return inverted Promise
88
+ if (result instanceof Promise) {
89
+ return result.then((value) => !value);
90
+ }
91
+ return !result;
92
+ },
93
+ middleware: middleware,
94
+ skipOnFalse: true,
95
+ };
96
+ }
@@ -0,0 +1,63 @@
1
+ export const TYPE = {
2
+ AuthProvider: Symbol.for("AuthProvider"),
3
+ Controller: Symbol.for("Controller"),
4
+ HttpContext: Symbol.for("HttpContext"),
5
+ };
6
+ // Import exception filter metadata keys from core to maintain compatibility
7
+ import { EXCEPTION_FILTER_METADATA_KEY } from "@expressots/core";
8
+ export const METADATA_KEY = {
9
+ controller: "inversify-express-utils:controller",
10
+ controllerMethod: "inversify-express-utils:controller-method",
11
+ controllerParameter: "inversify-express-utils:controller-parameter",
12
+ httpContext: "inversify-express-utils:httpcontext",
13
+ version: "inversify-express-utils:version",
14
+ accept: "inversify-express-utils:accept",
15
+ consumes: "inversify-express-utils:consumes",
16
+ produces: "inversify-express-utils:produces",
17
+ csvOptions: "inversify-express-utils:csv-options",
18
+ xmlOptions: "inversify-express-utils:xml-options",
19
+ yamlOptions: "inversify-express-utils:yaml-options",
20
+ streamResponse: "inversify-express-utils:stream-response",
21
+ // Validation metadata
22
+ validationSchema: "inversify-express-utils:validation-schema",
23
+ validationOptions: "inversify-express-utils:validation-options",
24
+ // Re-export exception filter metadata keys from core for backward compatibility
25
+ exceptionFilter: EXCEPTION_FILTER_METADATA_KEY.exceptionFilter,
26
+ controllerExceptionFilters: EXCEPTION_FILTER_METADATA_KEY.controllerExceptionFilters,
27
+ methodExceptionFilters: EXCEPTION_FILTER_METADATA_KEY.methodExceptionFilters,
28
+ };
29
+ export const HTTP_CODE_METADATA = {
30
+ httpCode: "inversify-express-utils:httpcode",
31
+ statusCode: "inversify-express-utils:statuscode",
32
+ path: "inversify-express-utils:path",
33
+ };
34
+ export const RENDER_METADATA_KEY = Symbol("Render");
35
+ export var PARAMETER_TYPE;
36
+ (function (PARAMETER_TYPE) {
37
+ PARAMETER_TYPE[PARAMETER_TYPE["REQUEST"] = 0] = "REQUEST";
38
+ PARAMETER_TYPE[PARAMETER_TYPE["RESPONSE"] = 1] = "RESPONSE";
39
+ PARAMETER_TYPE[PARAMETER_TYPE["PARAMS"] = 2] = "PARAMS";
40
+ PARAMETER_TYPE[PARAMETER_TYPE["QUERY"] = 3] = "QUERY";
41
+ PARAMETER_TYPE[PARAMETER_TYPE["BODY"] = 4] = "BODY";
42
+ PARAMETER_TYPE[PARAMETER_TYPE["HEADERS"] = 5] = "HEADERS";
43
+ PARAMETER_TYPE[PARAMETER_TYPE["COOKIES"] = 6] = "COOKIES";
44
+ PARAMETER_TYPE[PARAMETER_TYPE["NEXT"] = 7] = "NEXT";
45
+ PARAMETER_TYPE[PARAMETER_TYPE["PRINCIPAL"] = 8] = "PRINCIPAL";
46
+ })(PARAMETER_TYPE || (PARAMETER_TYPE = {}));
47
+ export var HTTP_VERBS_ENUM;
48
+ (function (HTTP_VERBS_ENUM) {
49
+ HTTP_VERBS_ENUM["all"] = "ALL";
50
+ HTTP_VERBS_ENUM["connect"] = "CONNECT";
51
+ HTTP_VERBS_ENUM["delete"] = "DELETE";
52
+ HTTP_VERBS_ENUM["get"] = "GET";
53
+ HTTP_VERBS_ENUM["head"] = "HEAD";
54
+ HTTP_VERBS_ENUM["options"] = "OPTIONS";
55
+ HTTP_VERBS_ENUM["patch"] = "PATCH";
56
+ HTTP_VERBS_ENUM["post"] = "POST";
57
+ HTTP_VERBS_ENUM["propfind"] = "PROPFIND";
58
+ HTTP_VERBS_ENUM["put"] = "PUT";
59
+ HTTP_VERBS_ENUM["trace"] = "TRACE";
60
+ })(HTTP_VERBS_ENUM || (HTTP_VERBS_ENUM = {}));
61
+ export const DUPLICATED_CONTROLLER_NAME = (name) => `Two controllers cannot have the same name: ${name}`;
62
+ export const NO_CONTROLLERS_FOUND = "No controller found! Please ensure that you have register at least one Controller.";
63
+ export const DEFAULT_ROUTING_ROOT_PATH = "/";
@@ -0,0 +1,6 @@
1
+ export class HttpContent {
2
+ _headers = {};
3
+ get headers() {
4
+ return this._headers;
5
+ }
6
+ }
@@ -0,0 +1,120 @@
1
+ import "reflect-metadata";
2
+ import { METADATA_KEY } from "./constants.js";
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 function Accept(...contentTypes) {
19
+ return (target, key) => {
20
+ Reflect.defineMetadata(METADATA_KEY.accept, contentTypes, target, key);
21
+ };
22
+ }
23
+ /**
24
+ * Consumes decorator to specify which content types this route consumes for requests.
25
+ * Used for content negotiation based on Content-Type header.
26
+ * @param contentTypes - Array of consumed content types (e.g., ["application/json", "application/xml"])
27
+ * @returns MethodDecorator
28
+ * @example
29
+ * ```typescript
30
+ * @Consumes("application/json", "application/xml")
31
+ * @Post("/users")
32
+ * createUser(@body() user: UserDto) {
33
+ * return this.userService.create(user);
34
+ * }
35
+ * ```
36
+ * @public API
37
+ */
38
+ export function Consumes(...contentTypes) {
39
+ return (target, key) => {
40
+ Reflect.defineMetadata(METADATA_KEY.consumes, contentTypes, target, key);
41
+ };
42
+ }
43
+ /**
44
+ * Produces decorator to specify which content types this route produces for responses.
45
+ * Alias for @Accept() decorator.
46
+ * @param contentTypes - Array of produced content types
47
+ * @returns MethodDecorator
48
+ * @public API
49
+ */
50
+ export function Produces(...contentTypes) {
51
+ return Accept(...contentTypes);
52
+ }
53
+ /**
54
+ * CsvOptions decorator to configure CSV formatting options for a route.
55
+ * @param options - CSV formatting options
56
+ * @returns MethodDecorator
57
+ * @example
58
+ * ```typescript
59
+ * @CsvOptions({ fields: ["id", "name"], includeHeaders: true })
60
+ * @Get("/users")
61
+ * getUsers() {
62
+ * return [{ id: 1, name: "John", email: "john@example.com" }];
63
+ * }
64
+ * ```
65
+ * @public API
66
+ */
67
+ export function CsvOptions(options) {
68
+ return (target, key) => {
69
+ Reflect.defineMetadata(METADATA_KEY.csvOptions, options, target, key);
70
+ };
71
+ }
72
+ /**
73
+ * XmlOptions decorator to configure XML formatting options for a route.
74
+ * @param options - XML formatting options
75
+ * @returns MethodDecorator
76
+ * @example
77
+ * ```typescript
78
+ * @XmlOptions({ rootElement: "users", itemElement: "user", prettyPrint: true })
79
+ * @Get("/users")
80
+ * getUsers() {
81
+ * return [{ id: 1, name: "John" }];
82
+ * }
83
+ * ```
84
+ * @public API
85
+ */
86
+ export function XmlOptions(options) {
87
+ return (target, key) => {
88
+ Reflect.defineMetadata(METADATA_KEY.xmlOptions, options, target, key);
89
+ };
90
+ }
91
+ /**
92
+ * YamlOptions decorator to configure YAML formatting options for a route.
93
+ * @param options - YAML formatting options
94
+ * @returns MethodDecorator
95
+ * @public API
96
+ */
97
+ export function YamlOptions(options) {
98
+ return (target, key) => {
99
+ Reflect.defineMetadata(METADATA_KEY.yamlOptions, options, target, key);
100
+ };
101
+ }
102
+ /**
103
+ * StreamResponse decorator to indicate that the response should be streamed.
104
+ * Useful for large datasets.
105
+ * @returns MethodDecorator
106
+ * @example
107
+ * ```typescript
108
+ * @StreamResponse()
109
+ * @Get("/large-dataset")
110
+ * getLargeDataset() {
111
+ * return this.dataService.streamLargeDataset(); // Returns async iterator
112
+ * }
113
+ * ```
114
+ * @public API
115
+ */
116
+ export function StreamResponse() {
117
+ return (target, key) => {
118
+ Reflect.defineMetadata(METADATA_KEY.streamResponse, true, target, key);
119
+ };
120
+ }