@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,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getControllerGuards = getControllerGuards;
4
+ exports.getMethodGuards = getMethodGuards;
5
+ require("reflect-metadata");
6
+ const core_1 = require("@expressots/core");
7
+ /**
8
+ * Extract guards from controller metadata
9
+ */
10
+ function getControllerGuards(constructor) {
11
+ return (Reflect.getMetadata(core_1.GUARD_METADATA_KEY.controllerGuards, constructor) || []);
12
+ }
13
+ /**
14
+ * Extract guards from method metadata
15
+ */
16
+ function getMethodGuards(constructor, methodName) {
17
+ return (Reflect.getMetadata(core_1.GUARD_METADATA_KEY.methodGuards, constructor, methodName) || []);
18
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setHttpContext = setHttpContext;
4
+ exports.getHttpContext = getHttpContext;
5
+ exports.hasHttpContext = hasHttpContext;
6
+ const httpContextByRequest = new WeakMap();
7
+ function setHttpContext(req, ctx) {
8
+ httpContextByRequest.set(req, ctx);
9
+ }
10
+ function getHttpContext(req) {
11
+ return httpContextByRequest.get(req);
12
+ }
13
+ function hasHttpContext(req) {
14
+ return httpContextByRequest.has(req);
15
+ }
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HttpStatusCodeMiddleware = void 0;
4
4
  require("reflect-metadata");
5
5
  const core_1 = require("@expressots/core");
6
- const constants_1 = require("./constants");
6
+ const constants_js_1 = require("./constants.js");
7
7
  /**
8
8
  * Middleware that applies the status code to the response.
9
9
  * @returns express.RequestHandler
@@ -14,7 +14,7 @@ class HttpStatusCodeMiddleware extends core_1.ExpressoMiddleware {
14
14
  this.globalPrefix = globalPrefix;
15
15
  }
16
16
  use(req, res, next) {
17
- const statusCodeMapping = Reflect.getMetadata(constants_1.HTTP_CODE_METADATA.httpCode, Reflect);
17
+ const statusCodeMapping = Reflect.getMetadata(constants_js_1.HTTP_CODE_METADATA.httpCode, Reflect);
18
18
  let path = req.path;
19
19
  if (this.globalPrefix !== "/" && path.startsWith(this.globalPrefix)) {
20
20
  path = path.slice(this.globalPrefix.length);
@@ -23,18 +23,53 @@ class HttpStatusCodeMiddleware extends core_1.ExpressoMiddleware {
23
23
  const formattedMethod = req.method.toLowerCase();
24
24
  path = `${path || "/"}/-${formattedMethod}`;
25
25
  const statusCode = statusCodeMapping[path];
26
+ let explicitStatus = null;
26
27
  if (statusCode) {
27
28
  res.status(statusCode);
29
+ explicitStatus = statusCode;
28
30
  }
29
31
  else {
30
32
  const patternMatchStatusCode = this.findMatchingParameterPath(path, statusCodeMapping);
31
33
  if (patternMatchStatusCode) {
32
34
  res.status(patternMatchStatusCode);
35
+ explicitStatus = patternMatchStatusCode;
33
36
  }
34
37
  else {
35
38
  this.setDefaultStatusCode(req, res);
36
39
  }
37
40
  }
41
+ /**
42
+ * When @Http(...) declares an explicit status, honor it even when the
43
+ * client sent conditional headers (If-None-Match / If-Modified-Since).
44
+ *
45
+ * Without this, Express's `res.send()` evaluates `req.fresh` (which is
46
+ * `true` for any 2xx status whose ETag matches the request's
47
+ * If-None-Match) and silently rewrites our 201/202/206/etc. into 304
48
+ * Not Modified. That makes @Http() unreliable in any caching
49
+ * environment — including a developer hitting refresh in their
50
+ * browser. We override `req.fresh` to always return `false` for this
51
+ * one response so the explicit status wins.
52
+ *
53
+ * For the 200 default we leave Express's freshness behavior alone, so
54
+ * normal GET caching still works as expected.
55
+ */
56
+ if (explicitStatus !== null && explicitStatus !== 200) {
57
+ try {
58
+ Object.defineProperty(req, "fresh", {
59
+ configurable: true,
60
+ enumerable: true,
61
+ get: () => false,
62
+ });
63
+ }
64
+ catch {
65
+ // Some proxied / decorated request objects make this property
66
+ // non-configurable. In that case we fall back to stripping the
67
+ // conditional headers entirely, which has the same effect on
68
+ // Express's freshness check.
69
+ delete req.headers["if-none-match"];
70
+ delete req.headers["if-modified-since"];
71
+ }
72
+ }
38
73
  next();
39
74
  }
40
75
  /**
@@ -14,4 +14,70 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./decorators"), exports);
17
+ exports.hasHttpContext = exports.getHttpContext = exports.ValidationService = exports.hasValidationMetadata = exports.getValidationMetadata = exports.Validate = exports.validatedHeaders = exports.validatedParam = exports.validatedQuery = exports.validatedBody = exports.createRouteMappings = exports.createLazyModuleMiddleware = exports.setupLazyLoadingForExpress = exports.setupInterceptorsForExpress = exports.setupEventSystemForExpress = exports.setupAuthorizationForExpress = exports.TYPE = exports.PermissionPreloaderMiddleware = exports.ScopeExtractor = exports.createInterceptorMiddleware = exports.InterceptorMiddleware = exports.GuardMiddleware = exports.GuardContextFactory = exports.getMethodGuards = exports.getControllerGuards = exports.UseFilters = exports.Catch = exports.isComposedMiddleware = exports.sequence = exports.combine = exports.isConditionalMiddleware = exports.unless = exports.when = exports.pattern = exports.Patterns = exports.StreamResponse = exports.YamlOptions = exports.XmlOptions = exports.CsvOptions = exports.Produces = exports.Consumes = exports.Accept = void 0;
18
+ __exportStar(require("./decorators.js"), exports);
19
+ var content_negotiation_decorators_js_1 = require("./content-negotiation-decorators.js");
20
+ Object.defineProperty(exports, "Accept", { enumerable: true, get: function () { return content_negotiation_decorators_js_1.Accept; } });
21
+ Object.defineProperty(exports, "Consumes", { enumerable: true, get: function () { return content_negotiation_decorators_js_1.Consumes; } });
22
+ Object.defineProperty(exports, "Produces", { enumerable: true, get: function () { return content_negotiation_decorators_js_1.Produces; } });
23
+ Object.defineProperty(exports, "CsvOptions", { enumerable: true, get: function () { return content_negotiation_decorators_js_1.CsvOptions; } });
24
+ Object.defineProperty(exports, "XmlOptions", { enumerable: true, get: function () { return content_negotiation_decorators_js_1.XmlOptions; } });
25
+ Object.defineProperty(exports, "YamlOptions", { enumerable: true, get: function () { return content_negotiation_decorators_js_1.YamlOptions; } });
26
+ Object.defineProperty(exports, "StreamResponse", { enumerable: true, get: function () { return content_negotiation_decorators_js_1.StreamResponse; } });
27
+ var route_constraints_js_1 = require("./route-constraints.js");
28
+ Object.defineProperty(exports, "Patterns", { enumerable: true, get: function () { return route_constraints_js_1.Patterns; } });
29
+ Object.defineProperty(exports, "pattern", { enumerable: true, get: function () { return route_constraints_js_1.pattern; } });
30
+ var conditional_middleware_js_1 = require("./conditional-middleware.js");
31
+ Object.defineProperty(exports, "when", { enumerable: true, get: function () { return conditional_middleware_js_1.when; } });
32
+ Object.defineProperty(exports, "unless", { enumerable: true, get: function () { return conditional_middleware_js_1.unless; } });
33
+ Object.defineProperty(exports, "isConditionalMiddleware", { enumerable: true, get: function () { return conditional_middleware_js_1.isConditionalMiddleware; } });
34
+ var middleware_composition_js_1 = require("./middleware-composition.js");
35
+ Object.defineProperty(exports, "combine", { enumerable: true, get: function () { return middleware_composition_js_1.combine; } });
36
+ Object.defineProperty(exports, "sequence", { enumerable: true, get: function () { return middleware_composition_js_1.sequence; } });
37
+ Object.defineProperty(exports, "isComposedMiddleware", { enumerable: true, get: function () { return middleware_composition_js_1.isComposedMiddleware; } });
38
+ var exception_filter_decorators_js_1 = require("./exception-filter-decorators.js");
39
+ Object.defineProperty(exports, "Catch", { enumerable: true, get: function () { return exception_filter_decorators_js_1.Catch; } });
40
+ Object.defineProperty(exports, "UseFilters", { enumerable: true, get: function () { return exception_filter_decorators_js_1.UseFilters; } });
41
+ var guard_utils_js_1 = require("./guard-utils.js");
42
+ Object.defineProperty(exports, "getControllerGuards", { enumerable: true, get: function () { return guard_utils_js_1.getControllerGuards; } });
43
+ Object.defineProperty(exports, "getMethodGuards", { enumerable: true, get: function () { return guard_utils_js_1.getMethodGuards; } });
44
+ var guard_context_factory_js_1 = require("./guard-context-factory.js");
45
+ Object.defineProperty(exports, "GuardContextFactory", { enumerable: true, get: function () { return guard_context_factory_js_1.GuardContextFactory; } });
46
+ var guard_middleware_js_1 = require("./guard-middleware.js");
47
+ Object.defineProperty(exports, "GuardMiddleware", { enumerable: true, get: function () { return guard_middleware_js_1.GuardMiddleware; } });
48
+ var interceptor_middleware_js_1 = require("./interceptor-middleware.js");
49
+ Object.defineProperty(exports, "InterceptorMiddleware", { enumerable: true, get: function () { return interceptor_middleware_js_1.InterceptorMiddleware; } });
50
+ Object.defineProperty(exports, "createInterceptorMiddleware", { enumerable: true, get: function () { return interceptor_middleware_js_1.createInterceptorMiddleware; } });
51
+ var scope_extractor_js_1 = require("./scope-extractor.js");
52
+ Object.defineProperty(exports, "ScopeExtractor", { enumerable: true, get: function () { return scope_extractor_js_1.ScopeExtractor; } });
53
+ var permission_preloader_middleware_js_1 = require("./permission-preloader.middleware.js");
54
+ Object.defineProperty(exports, "PermissionPreloaderMiddleware", { enumerable: true, get: function () { return permission_preloader_middleware_js_1.PermissionPreloaderMiddleware; } });
55
+ var constants_js_1 = require("./constants.js");
56
+ Object.defineProperty(exports, "TYPE", { enumerable: true, get: function () { return constants_js_1.TYPE; } });
57
+ var setup_authorization_js_1 = require("./setup-authorization.js");
58
+ Object.defineProperty(exports, "setupAuthorizationForExpress", { enumerable: true, get: function () { return setup_authorization_js_1.setupAuthorizationForExpress; } });
59
+ var setup_event_system_js_1 = require("./setup-event-system.js");
60
+ Object.defineProperty(exports, "setupEventSystemForExpress", { enumerable: true, get: function () { return setup_event_system_js_1.setupEventSystemForExpress; } });
61
+ var setup_interceptors_js_1 = require("./setup-interceptors.js");
62
+ Object.defineProperty(exports, "setupInterceptorsForExpress", { enumerable: true, get: function () { return setup_interceptors_js_1.setupInterceptorsForExpress; } });
63
+ var setup_lazy_loading_js_1 = require("./setup-lazy-loading.js");
64
+ Object.defineProperty(exports, "setupLazyLoadingForExpress", { enumerable: true, get: function () { return setup_lazy_loading_js_1.setupLazyLoadingForExpress; } });
65
+ var lazy_module_middleware_js_1 = require("./lazy-module-middleware.js");
66
+ Object.defineProperty(exports, "createLazyModuleMiddleware", { enumerable: true, get: function () { return lazy_module_middleware_js_1.createLazyModuleMiddleware; } });
67
+ Object.defineProperty(exports, "createRouteMappings", { enumerable: true, get: function () { return lazy_module_middleware_js_1.createRouteMappings; } });
68
+ // Validation decorators
69
+ var validation_decorators_js_1 = require("./validation-decorators.js");
70
+ Object.defineProperty(exports, "validatedBody", { enumerable: true, get: function () { return validation_decorators_js_1.validatedBody; } });
71
+ Object.defineProperty(exports, "validatedQuery", { enumerable: true, get: function () { return validation_decorators_js_1.validatedQuery; } });
72
+ Object.defineProperty(exports, "validatedParam", { enumerable: true, get: function () { return validation_decorators_js_1.validatedParam; } });
73
+ Object.defineProperty(exports, "validatedHeaders", { enumerable: true, get: function () { return validation_decorators_js_1.validatedHeaders; } });
74
+ Object.defineProperty(exports, "Validate", { enumerable: true, get: function () { return validation_decorators_js_1.Validate; } });
75
+ Object.defineProperty(exports, "getValidationMetadata", { enumerable: true, get: function () { return validation_decorators_js_1.getValidationMetadata; } });
76
+ Object.defineProperty(exports, "hasValidationMetadata", { enumerable: true, get: function () { return validation_decorators_js_1.hasValidationMetadata; } });
77
+ // Validation service
78
+ var validation_service_js_1 = require("./validation-service.js");
79
+ Object.defineProperty(exports, "ValidationService", { enumerable: true, get: function () { return validation_service_js_1.ValidationService; } });
80
+ // Per-request HttpContext (replaces reflect-metadata for hot path)
81
+ var http_context_store_js_1 = require("./http-context-store.js");
82
+ Object.defineProperty(exports, "getHttpContext", { enumerable: true, get: function () { return http_context_store_js_1.getHttpContext; } });
83
+ Object.defineProperty(exports, "hasHttpContext", { enumerable: true, get: function () { return http_context_store_js_1.hasHttpContext; } });
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.InterceptorMiddleware = void 0;
16
+ exports.createInterceptorMiddleware = createInterceptorMiddleware;
17
+ const core_1 = require("@expressots/core");
18
+ const core_2 = require("@expressots/core");
19
+ require("reflect-metadata");
20
+ /**
21
+ * Express middleware that executes interceptors around route handler
22
+ *
23
+ * @layer internal
24
+ * @audience framework-developers
25
+ *
26
+ * @summary Quick Start
27
+ * InterceptorMiddleware integrates the interceptor system with Express.
28
+ * It wraps the route handler with interceptors defined via @UseInterceptors().
29
+ *
30
+ * @internal
31
+ */
32
+ let InterceptorMiddleware = class InterceptorMiddleware {
33
+ constructor(executor, container) {
34
+ this.executor = executor;
35
+ this.container = container;
36
+ }
37
+ /**
38
+ * Create middleware for a specific controller and method
39
+ * @param controllerClass - Controller class
40
+ * @param methodName - Method name
41
+ * @param handler - Original route handler
42
+ */
43
+ createMiddleware(controllerClass, methodName, handler) {
44
+ return async (req, res, next) => {
45
+ // Get request ID for flow tracking
46
+ const requestContext = core_1.ContextManager.getCurrentContext();
47
+ const requestId = requestContext?.requestId;
48
+ const flowTracker = requestId ? (0, core_1.findFlowTracker)(requestId) : undefined;
49
+ // Extract interceptors from metadata
50
+ const interceptors = this.extractInterceptors(controllerClass, methodName);
51
+ if (interceptors.length === 0) {
52
+ // No interceptors, proceed directly
53
+ return handler(req, res, next)
54
+ .then(() => { })
55
+ .catch(next);
56
+ }
57
+ // Get interceptor names for tracking
58
+ const interceptorNames = interceptors.map((i) => {
59
+ if (typeof i === "function") {
60
+ return i.name || "UnknownInterceptor";
61
+ }
62
+ return i.constructor.name;
63
+ });
64
+ const interceptorStepName = `Interceptors: ${interceptorNames.join(", ")}`;
65
+ // Start tracking interceptor execution (using "middleware" type as interceptors are part of request pipeline)
66
+ if (flowTracker?.isEnabled()) {
67
+ flowTracker.startStep("middleware", interceptorStepName, {
68
+ interceptorCount: interceptors.length,
69
+ interceptorNames,
70
+ });
71
+ }
72
+ try {
73
+ // Create execution context
74
+ const context = (0, core_1.createExecutionContext)(req, res, this.container, controllerClass, String(methodName));
75
+ // Execute interceptors with handler
76
+ const result = await this.executor.execute(interceptors, context, async () => {
77
+ // This is the actual handler execution
78
+ const handlerResult = await handler(req, res, next);
79
+ return handlerResult;
80
+ });
81
+ // End interceptor step with success
82
+ if (flowTracker?.isEnabled()) {
83
+ flowTracker.endStep("success");
84
+ }
85
+ // If handler hasn't sent response and we have a result, set it
86
+ if (!res.headersSent && result !== undefined) {
87
+ // Store result for response handling
88
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
89
+ req.__expressotsInterceptorResult = result;
90
+ }
91
+ }
92
+ catch (error) {
93
+ // End interceptor step with failure
94
+ if (flowTracker?.isEnabled()) {
95
+ flowTracker.failStep(error instanceof Error ? error : undefined);
96
+ }
97
+ next(error);
98
+ }
99
+ };
100
+ }
101
+ /**
102
+ * Extract interceptors from controller and method metadata
103
+ * @private
104
+ */
105
+ extractInterceptors(controllerClass, methodName) {
106
+ // Get controller-level interceptors
107
+ const controllerInterceptors = Reflect.getMetadata(core_2.INTERCEPTOR_METADATA_KEY.controllerInterceptors, controllerClass) || [];
108
+ // Get method-level interceptors
109
+ const methodInterceptors = Reflect.getMetadata(core_2.INTERCEPTOR_METADATA_KEY.methodInterceptors, controllerClass, methodName) || [];
110
+ // Combine: controller + method level
111
+ return [...controllerInterceptors, ...methodInterceptors];
112
+ }
113
+ };
114
+ exports.InterceptorMiddleware = InterceptorMiddleware;
115
+ exports.InterceptorMiddleware = InterceptorMiddleware = __decorate([
116
+ (0, core_1.injectable)(),
117
+ __param(0, (0, core_1.inject)(core_1.InterceptorExecutor)),
118
+ __param(1, (0, core_1.inject)(core_1.Container)),
119
+ __metadata("design:paramtypes", [core_1.InterceptorExecutor,
120
+ core_1.Container])
121
+ ], InterceptorMiddleware);
122
+ /**
123
+ * Factory function to create interceptor middleware
124
+ * @param container - DI container
125
+ * @param controllerClass - Controller class
126
+ * @param methodName - Method name
127
+ * @param handler - Original handler
128
+ */
129
+ function createInterceptorMiddleware(container, controllerClass, methodName, handler) {
130
+ const middleware = container.get(InterceptorMiddleware);
131
+ return middleware.createMiddleware(controllerClass, methodName, handler);
132
+ }