@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,23 @@
1
+ import express from "express";
2
+ /**
3
+ * ExpressHandler Type
4
+ *
5
+ * The ExpressHandler type is a union type that represents various types of Express middleware functions.
6
+ * It can be one of the following types:
7
+ * - express.ErrorRequestHandler: Handles errors in the middleware pipeline.
8
+ * - express.RequestParamHandler: Handles parameters in the middleware pipeline.
9
+ * - express.RequestHandler: General request handler.
10
+ * - undefined: Represents the absence of a handler.
11
+ */
12
+ export type ExpressHandler = express.ErrorRequestHandler | express.RequestParamHandler | express.RequestHandler | undefined;
13
+ /**
14
+ * MiddlewareConfig Interface
15
+ *
16
+ * The MiddlewareConfig interface specifies the structure for middleware configuration objects.
17
+ * - path: Optional. The route path for which the middleware is configured.
18
+ * - middlewares: An array of ExpressHandler types that make up the middleware pipeline for the route specified by 'path'.
19
+ */
20
+ export type MiddlewareConfig = {
21
+ path?: string;
22
+ middlewares: Array<ExpressHandler>;
23
+ };
@@ -0,0 +1,8 @@
1
+ import type { NextFunction, Request, Response } from "express";
2
+ import { interfaces as inversifyInterfaces } from "@expressots/core";
3
+ import type { HttpContext } from "./interfaces.js";
4
+ export declare abstract class BaseMiddleware implements BaseMiddleware {
5
+ httpContext: HttpContext;
6
+ protected bind<T>(serviceIdentifier: inversifyInterfaces.ServiceIdentifier<T>): inversifyInterfaces.BindingToSyntax<T>;
7
+ abstract handler(req: Request, res: Response, next: NextFunction): void;
8
+ }
@@ -0,0 +1,97 @@
1
+ import type { Request } from "express";
2
+ import type { Middleware, MiddlewareClass } from "./interfaces.js";
3
+ /**
4
+ * Type definition for middleware condition functions.
5
+ * Can be synchronous (returns boolean) or asynchronous (returns Promise<boolean>).
6
+ */
7
+ export type MiddlewareCondition = (req: Request) => boolean | Promise<boolean>;
8
+ /**
9
+ * Configuration object for conditional middleware execution.
10
+ * When the condition evaluates to true, the middleware is executed.
11
+ * When false, the middleware is skipped and next() is called.
12
+ */
13
+ export interface ConditionalMiddlewareConfig {
14
+ /**
15
+ * The condition function that determines whether the middleware should execute.
16
+ * Receives the Express Request object and returns a boolean or Promise<boolean>.
17
+ */
18
+ condition: MiddlewareCondition;
19
+ /**
20
+ * The middleware to execute when the condition is true.
21
+ * Can be any valid ExpressoTS middleware type (function, class instance, or container-bound).
22
+ */
23
+ middleware: Middleware;
24
+ /**
25
+ * Whether to skip middleware execution when condition is false.
26
+ * Default: true (skip if condition is false, execute if true)
27
+ * If false, the behavior is inverted (execute if condition is false).
28
+ */
29
+ skipOnFalse?: boolean;
30
+ }
31
+ /**
32
+ * Symbol to identify conditional middleware configuration objects.
33
+ * Used internally for type checking.
34
+ */
35
+ export declare const CONDITIONAL_MIDDLEWARE_SYMBOL: unique symbol;
36
+ /**
37
+ * Type guard to check if an object is a ConditionalMiddlewareConfig.
38
+ */
39
+ export declare function isConditionalMiddleware(item: unknown): item is ConditionalMiddlewareConfig;
40
+ /**
41
+ * Creates a conditional middleware configuration that executes the middleware
42
+ * when the condition evaluates to true.
43
+ *
44
+ * @param condition - Function that receives the Request and returns boolean or Promise<boolean>
45
+ * @param middleware - The middleware to execute when condition is true
46
+ * @returns ConditionalMiddlewareConfig object
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * // Phase 2: Class reference support - no 'new' keyword needed
51
+ * @Get("/admin",
52
+ * when(req => req.hostname.startsWith("admin."), AdminMiddleware),
53
+ * AuthMiddleware
54
+ * )
55
+ * async adminHandler() {}
56
+ * ```
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * // Async condition with class reference (Phase 2)
61
+ * @Get("/api",
62
+ * when(async req => {
63
+ * const user = await getUser(req);
64
+ * return user.isAdmin;
65
+ * }, AdminMiddleware)
66
+ * )
67
+ * async apiHandler() {}
68
+ * ```
69
+ */
70
+ export declare function when(condition: MiddlewareCondition, middleware: Middleware | MiddlewareClass | any): ConditionalMiddlewareConfig;
71
+ /**
72
+ * Creates a conditional middleware configuration that executes the middleware
73
+ * when the condition evaluates to false (inverse of `when`).
74
+ *
75
+ * @param condition - Function that receives the Request and returns boolean or Promise<boolean>
76
+ * @param middleware - The middleware to execute when condition is false
77
+ * @returns ConditionalMiddlewareConfig object
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * // Phase 2: Class reference support - no 'new' keyword needed
82
+ * @Get("/public",
83
+ * unless(req => req.headers.authorization, AuthMiddleware)
84
+ * )
85
+ * async publicHandler() {}
86
+ * ```
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * // Skip authentication for public routes (Phase 2: class reference)
91
+ * @Get("/health",
92
+ * unless(req => req.path.startsWith("/api"), AuthMiddleware)
93
+ * )
94
+ * async healthCheck() {}
95
+ * ```
96
+ */
97
+ export declare function unless(condition: MiddlewareCondition, middleware: Middleware | MiddlewareClass | any): ConditionalMiddlewareConfig;
@@ -0,0 +1,57 @@
1
+ export declare const TYPE: {
2
+ AuthProvider: symbol;
3
+ Controller: symbol;
4
+ HttpContext: symbol;
5
+ };
6
+ export declare const METADATA_KEY: {
7
+ controller: string;
8
+ controllerMethod: string;
9
+ controllerParameter: string;
10
+ httpContext: string;
11
+ version: string;
12
+ accept: string;
13
+ consumes: string;
14
+ produces: string;
15
+ csvOptions: string;
16
+ xmlOptions: string;
17
+ yamlOptions: string;
18
+ streamResponse: string;
19
+ validationSchema: string;
20
+ validationOptions: string;
21
+ exceptionFilter: string;
22
+ controllerExceptionFilters: string;
23
+ methodExceptionFilters: string;
24
+ };
25
+ export declare const HTTP_CODE_METADATA: {
26
+ httpCode: string;
27
+ statusCode: string;
28
+ path: string;
29
+ };
30
+ export declare const RENDER_METADATA_KEY: unique symbol;
31
+ export declare enum PARAMETER_TYPE {
32
+ REQUEST = 0,
33
+ RESPONSE = 1,
34
+ PARAMS = 2,
35
+ QUERY = 3,
36
+ BODY = 4,
37
+ HEADERS = 5,
38
+ COOKIES = 6,
39
+ NEXT = 7,
40
+ PRINCIPAL = 8
41
+ }
42
+ export declare enum HTTP_VERBS_ENUM {
43
+ all = "ALL",
44
+ connect = "CONNECT",
45
+ delete = "DELETE",
46
+ get = "GET",
47
+ head = "HEAD",
48
+ options = "OPTIONS",
49
+ patch = "PATCH",
50
+ post = "POST",
51
+ propfind = "PROPFIND",
52
+ put = "PUT",
53
+ trace = "TRACE"
54
+ }
55
+ export declare const DUPLICATED_CONTROLLER_NAME: (name: string) => string;
56
+ export declare const NO_CONTROLLERS_FOUND = "No controller found! Please ensure that you have register at least one Controller.";
57
+ export declare const DEFAULT_ROUTING_ROOT_PATH = "/";
@@ -0,0 +1,6 @@
1
+ import type { OutgoingHttpHeaders } from "node:http";
2
+ export declare abstract class HttpContent {
3
+ private _headers;
4
+ get headers(): OutgoingHttpHeaders;
5
+ abstract readAsync(): Promise<string | Record<string, unknown> | Record<string, unknown>[]>;
6
+ }
@@ -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
+ }