@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.
- package/README.md +39 -96
- package/lib/CHANGELOG.md +43 -0
- package/lib/README.md +39 -96
- package/lib/cjs/adapter-express/application-express.base.js +3 -1
- package/lib/cjs/adapter-express/application-express.js +1049 -85
- package/lib/cjs/adapter-express/express-utils/conditional-middleware.js +102 -0
- package/lib/cjs/adapter-express/express-utils/constants.js +17 -0
- package/lib/cjs/adapter-express/express-utils/content-negotiation-decorators.js +129 -0
- package/lib/cjs/adapter-express/express-utils/decorators.js +186 -49
- package/lib/cjs/adapter-express/express-utils/exception-filter-decorators.js +11 -0
- package/lib/cjs/adapter-express/express-utils/guard-context-factory.js +84 -0
- package/lib/cjs/adapter-express/express-utils/guard-middleware.js +115 -0
- package/lib/cjs/adapter-express/express-utils/guard-utils.js +18 -0
- package/lib/cjs/adapter-express/express-utils/http-context-store.js +15 -0
- package/lib/cjs/adapter-express/express-utils/http-status-middleware.js +37 -2
- package/lib/cjs/adapter-express/express-utils/index.js +67 -1
- package/lib/cjs/adapter-express/express-utils/interceptor-middleware.js +132 -0
- package/lib/cjs/adapter-express/express-utils/inversify-express-server.js +810 -63
- package/lib/cjs/adapter-express/express-utils/lazy-module-middleware.js +241 -0
- package/lib/cjs/adapter-express/express-utils/middleware-composition.js +95 -0
- package/lib/cjs/adapter-express/express-utils/permission-preloader.middleware.js +48 -0
- package/lib/cjs/adapter-express/express-utils/route-constraints.js +95 -0
- package/lib/cjs/adapter-express/express-utils/scope-extractor.interface.js +2 -0
- package/lib/cjs/adapter-express/express-utils/scope-extractor.js +66 -0
- package/lib/cjs/adapter-express/express-utils/setup-authorization.js +71 -0
- package/lib/cjs/adapter-express/express-utils/setup-event-system.js +113 -0
- package/lib/cjs/adapter-express/express-utils/setup-interceptors.js +103 -0
- package/lib/cjs/adapter-express/express-utils/setup-lazy-loading.js +228 -0
- package/lib/cjs/adapter-express/express-utils/utils.js +30 -12
- package/lib/cjs/adapter-express/express-utils/validation-decorators.js +205 -0
- package/lib/cjs/adapter-express/express-utils/validation-service.js +252 -0
- package/lib/cjs/adapter-express/index.js +7 -5
- package/lib/cjs/adapter-express/micro-api/application-express-micro-route.js +31 -1
- package/lib/cjs/adapter-express/micro-api/application-express-micro.js +11 -37
- package/lib/cjs/adapter-express/micro-api/gateway/circuit-breaker.js +174 -0
- package/lib/cjs/adapter-express/micro-api/gateway/index.js +11 -0
- package/lib/cjs/adapter-express/micro-api/gateway/service-proxy.js +214 -0
- package/lib/cjs/adapter-express/micro-api/index.js +27 -3
- package/lib/cjs/adapter-express/micro-api/micro.js +217 -0
- package/lib/cjs/adapter-express/micro-api/queue/index.js +8 -0
- package/lib/cjs/adapter-express/micro-api/queue/queue.interface.js +2 -0
- package/lib/cjs/adapter-express/micro-api/queue/rabbitmq-consumer.js +255 -0
- package/lib/cjs/adapter-express/micro-api/serverless/aws-lambda.adapter.js +183 -0
- package/lib/cjs/adapter-express/micro-api/serverless/cloudflare.adapter.js +158 -0
- package/lib/cjs/adapter-express/micro-api/serverless/index.js +12 -0
- package/lib/cjs/adapter-express/micro-api/serverless/vercel.adapter.js +102 -0
- package/lib/cjs/adapter-express/micro-api/service-mesh/index.js +10 -0
- package/lib/cjs/adapter-express/micro-api/service-mesh/service-client.js +194 -0
- package/lib/cjs/adapter-express/micro-api/service-mesh/service-discovery.js +261 -0
- package/lib/cjs/adapter-express/middleware/index.js +21 -0
- package/lib/cjs/adapter-express/middleware/request-logging.middleware.js +244 -0
- package/lib/cjs/adapter-express/render/engine.js +15 -15
- package/lib/cjs/adapter-express/render/index.js +5 -0
- package/lib/cjs/adapter-express/studio/index.js +9 -0
- package/lib/cjs/adapter-express/studio/studio-integration.js +214 -0
- package/lib/cjs/index.js +1 -1
- package/lib/cjs/types/adapter-express/application-express.base.d.ts +20 -7
- package/lib/cjs/types/adapter-express/application-express.d.ts +273 -32
- package/lib/cjs/types/adapter-express/express-utils/base-middleware.d.ts +2 -2
- package/lib/cjs/types/adapter-express/express-utils/conditional-middleware.d.ts +97 -0
- package/lib/cjs/types/adapter-express/express-utils/constants.d.ts +13 -0
- package/lib/cjs/types/adapter-express/express-utils/content-negotiation-decorators.d.ts +94 -0
- package/lib/cjs/types/adapter-express/express-utils/decorators.d.ts +54 -6
- package/lib/cjs/types/adapter-express/express-utils/exception-filter-decorators.d.ts +6 -0
- package/lib/cjs/types/adapter-express/express-utils/guard-context-factory.d.ts +17 -0
- package/lib/cjs/types/adapter-express/express-utils/guard-middleware.d.ts +22 -0
- package/lib/cjs/types/adapter-express/express-utils/guard-utils.d.ts +11 -0
- package/lib/cjs/types/adapter-express/express-utils/http-context-store.d.ts +20 -0
- package/lib/cjs/types/adapter-express/express-utils/httpResponseMessage.d.ts +1 -1
- package/lib/cjs/types/adapter-express/express-utils/index.d.ts +30 -2
- package/lib/cjs/types/adapter-express/express-utils/interceptor-middleware.d.ts +40 -0
- package/lib/cjs/types/adapter-express/express-utils/interfaces.d.ts +42 -5
- package/lib/cjs/types/adapter-express/express-utils/inversify-express-server.d.ts +114 -2
- package/lib/cjs/types/adapter-express/express-utils/lazy-module-middleware.d.ts +122 -0
- package/lib/cjs/types/adapter-express/express-utils/middleware-composition.d.ts +85 -0
- package/lib/cjs/types/adapter-express/express-utils/permission-preloader.middleware.d.ts +10 -0
- package/lib/cjs/types/adapter-express/express-utils/route-constraints.d.ts +89 -0
- package/lib/cjs/types/adapter-express/express-utils/scope-extractor.d.ts +21 -0
- package/lib/cjs/types/adapter-express/express-utils/scope-extractor.interface.d.ts +12 -0
- package/lib/cjs/types/adapter-express/express-utils/setup-authorization.d.ts +34 -0
- package/lib/cjs/types/adapter-express/express-utils/setup-event-system.d.ts +118 -0
- package/lib/cjs/types/adapter-express/express-utils/setup-interceptors.d.ts +115 -0
- package/lib/cjs/types/adapter-express/express-utils/setup-lazy-loading.d.ts +123 -0
- package/lib/cjs/types/adapter-express/express-utils/utils.d.ts +17 -2
- package/lib/cjs/types/adapter-express/express-utils/validation-decorators.d.ts +145 -0
- package/lib/cjs/types/adapter-express/express-utils/validation-service.d.ts +88 -0
- package/lib/cjs/types/adapter-express/index.d.ts +6 -4
- package/lib/cjs/types/adapter-express/micro-api/application-express-micro-route.d.ts +25 -14
- package/lib/cjs/types/adapter-express/micro-api/application-express-micro.d.ts +3 -10
- package/lib/cjs/types/adapter-express/micro-api/gateway/circuit-breaker.d.ts +111 -0
- package/lib/cjs/types/adapter-express/micro-api/gateway/index.d.ts +5 -0
- package/lib/cjs/types/adapter-express/micro-api/gateway/service-proxy.d.ts +83 -0
- package/lib/cjs/types/adapter-express/micro-api/index.d.ts +7 -1
- package/lib/cjs/types/adapter-express/micro-api/micro.d.ts +66 -0
- package/lib/cjs/types/adapter-express/micro-api/queue/index.d.ts +5 -0
- package/lib/cjs/types/adapter-express/micro-api/queue/queue.interface.d.ts +60 -0
- package/lib/cjs/types/adapter-express/micro-api/queue/rabbitmq-consumer.d.ts +86 -0
- package/lib/cjs/types/adapter-express/micro-api/serverless/aws-lambda.adapter.d.ts +77 -0
- package/lib/cjs/types/adapter-express/micro-api/serverless/cloudflare.adapter.d.ts +64 -0
- package/lib/cjs/types/adapter-express/micro-api/serverless/index.d.ts +6 -0
- package/lib/cjs/types/adapter-express/micro-api/serverless/vercel.adapter.d.ts +56 -0
- package/lib/cjs/types/adapter-express/micro-api/service-mesh/index.d.ts +5 -0
- package/lib/cjs/types/adapter-express/micro-api/service-mesh/service-client.d.ts +122 -0
- package/lib/cjs/types/adapter-express/micro-api/service-mesh/service-discovery.d.ts +150 -0
- package/lib/cjs/types/adapter-express/middleware/index.d.ts +5 -0
- package/lib/cjs/types/adapter-express/middleware/request-logging.middleware.d.ts +65 -0
- package/lib/cjs/types/adapter-express/render/index.d.ts +1 -0
- package/lib/cjs/types/adapter-express/studio/index.d.ts +1 -0
- package/lib/cjs/types/adapter-express/studio/studio-integration.d.ts +92 -0
- package/lib/cjs/types/index.d.ts +1 -1
- package/lib/esm/adapter-express/application-express.base.js +24 -0
- package/lib/esm/adapter-express/application-express.js +1300 -0
- package/lib/esm/adapter-express/application-express.types.js +1 -0
- package/lib/esm/adapter-express/express-utils/base-middleware.js +19 -0
- package/lib/esm/adapter-express/express-utils/conditional-middleware.js +96 -0
- package/lib/esm/adapter-express/express-utils/constants.js +63 -0
- package/lib/esm/adapter-express/express-utils/content/httpContent.js +6 -0
- package/lib/esm/adapter-express/express-utils/content-negotiation-decorators.js +120 -0
- package/lib/esm/adapter-express/express-utils/decorators.js +575 -0
- package/lib/esm/adapter-express/express-utils/exception-filter-decorators.js +6 -0
- package/lib/esm/adapter-express/express-utils/guard-context-factory.js +83 -0
- package/lib/esm/adapter-express/express-utils/guard-middleware.js +115 -0
- package/lib/esm/adapter-express/express-utils/guard-utils.js +14 -0
- package/lib/esm/adapter-express/express-utils/http-context-store.js +10 -0
- package/lib/esm/adapter-express/express-utils/http-status-middleware.js +116 -0
- package/lib/esm/adapter-express/express-utils/httpResponseMessage.js +29 -0
- package/lib/esm/adapter-express/express-utils/index.js +24 -0
- package/lib/esm/adapter-express/express-utils/interceptor-middleware.js +130 -0
- package/lib/esm/adapter-express/express-utils/interfaces.js +1 -0
- package/lib/esm/adapter-express/express-utils/inversify-express-server.js +1031 -0
- package/lib/esm/adapter-express/express-utils/lazy-module-middleware.js +236 -0
- package/lib/esm/adapter-express/express-utils/middleware-composition.js +89 -0
- package/lib/esm/adapter-express/express-utils/permission-preloader.middleware.js +45 -0
- package/lib/esm/adapter-express/express-utils/resolver-multer.js +30 -0
- package/lib/esm/adapter-express/express-utils/route-constraints.js +91 -0
- package/lib/esm/adapter-express/express-utils/scope-extractor.interface.js +1 -0
- package/lib/esm/adapter-express/express-utils/scope-extractor.js +63 -0
- package/lib/esm/adapter-express/express-utils/setup-authorization.js +68 -0
- package/lib/esm/adapter-express/express-utils/setup-event-system.js +110 -0
- package/lib/esm/adapter-express/express-utils/setup-interceptors.js +100 -0
- package/lib/esm/adapter-express/express-utils/setup-lazy-loading.js +225 -0
- package/lib/esm/adapter-express/express-utils/utils.js +68 -0
- package/lib/esm/adapter-express/express-utils/validation-decorators.js +199 -0
- package/lib/esm/adapter-express/express-utils/validation-service.js +251 -0
- package/lib/esm/adapter-express/index.js +7 -0
- package/lib/esm/adapter-express/micro-api/application-express-micro-container.js +48 -0
- package/lib/esm/adapter-express/micro-api/application-express-micro-route.js +128 -0
- package/lib/esm/adapter-express/micro-api/application-express-micro.js +161 -0
- package/lib/esm/adapter-express/micro-api/gateway/circuit-breaker.js +174 -0
- package/lib/esm/adapter-express/micro-api/gateway/index.js +5 -0
- package/lib/esm/adapter-express/micro-api/gateway/service-proxy.js +210 -0
- package/lib/esm/adapter-express/micro-api/index.js +10 -0
- package/lib/esm/adapter-express/micro-api/micro.js +211 -0
- package/lib/esm/adapter-express/micro-api/queue/index.js +4 -0
- package/lib/esm/adapter-express/micro-api/queue/queue.interface.js +1 -0
- package/lib/esm/adapter-express/micro-api/queue/rabbitmq-consumer.js +229 -0
- package/lib/esm/adapter-express/micro-api/serverless/aws-lambda.adapter.js +180 -0
- package/lib/esm/adapter-express/micro-api/serverless/cloudflare.adapter.js +155 -0
- package/lib/esm/adapter-express/micro-api/serverless/index.js +6 -0
- package/lib/esm/adapter-express/micro-api/serverless/vercel.adapter.js +99 -0
- package/lib/esm/adapter-express/micro-api/service-mesh/index.js +5 -0
- package/lib/esm/adapter-express/micro-api/service-mesh/service-client.js +191 -0
- package/lib/esm/adapter-express/micro-api/service-mesh/service-discovery.js +259 -0
- package/lib/esm/adapter-express/middleware/index.js +5 -0
- package/lib/esm/adapter-express/middleware/request-logging.middleware.js +239 -0
- package/lib/esm/adapter-express/render/constants.js +37 -0
- package/lib/esm/adapter-express/render/engine.js +51 -0
- package/lib/esm/adapter-express/render/index.js +1 -0
- package/lib/esm/adapter-express/render/resolve-render.js +30 -0
- package/lib/esm/adapter-express/studio/index.js +1 -0
- package/lib/esm/adapter-express/studio/studio-integration.js +184 -0
- package/lib/esm/index.mjs +1 -0
- package/lib/esm/package.json +3 -0
- package/lib/esm/types/adapter-express/application-express.base.d.ts +77 -0
- package/lib/esm/types/adapter-express/application-express.d.ts +411 -0
- package/lib/esm/types/adapter-express/application-express.types.d.ts +23 -0
- package/lib/esm/types/adapter-express/express-utils/base-middleware.d.ts +8 -0
- package/lib/esm/types/adapter-express/express-utils/conditional-middleware.d.ts +97 -0
- package/lib/esm/types/adapter-express/express-utils/constants.d.ts +57 -0
- package/lib/esm/types/adapter-express/express-utils/content/httpContent.d.ts +6 -0
- package/lib/esm/types/adapter-express/express-utils/content-negotiation-decorators.d.ts +94 -0
- package/lib/esm/types/adapter-express/express-utils/decorators.d.ts +257 -0
- package/lib/esm/types/adapter-express/express-utils/exception-filter-decorators.d.ts +6 -0
- package/lib/esm/types/adapter-express/express-utils/guard-context-factory.d.ts +17 -0
- package/lib/esm/types/adapter-express/express-utils/guard-middleware.d.ts +22 -0
- package/lib/esm/types/adapter-express/express-utils/guard-utils.d.ts +11 -0
- package/lib/esm/types/adapter-express/express-utils/http-context-store.d.ts +20 -0
- package/lib/esm/types/adapter-express/express-utils/http-status-middleware.d.ts +26 -0
- package/lib/esm/types/adapter-express/express-utils/httpResponseMessage.d.ts +14 -0
- package/lib/esm/types/adapter-express/express-utils/index.d.ts +30 -0
- package/lib/esm/types/adapter-express/express-utils/interceptor-middleware.d.ts +40 -0
- package/lib/esm/types/adapter-express/express-utils/interfaces.d.ts +115 -0
- package/lib/esm/types/adapter-express/express-utils/inversify-express-server.d.ts +172 -0
- package/lib/esm/types/adapter-express/express-utils/lazy-module-middleware.d.ts +122 -0
- package/lib/esm/types/adapter-express/express-utils/middleware-composition.d.ts +85 -0
- package/lib/esm/types/adapter-express/express-utils/permission-preloader.middleware.d.ts +10 -0
- package/lib/esm/types/adapter-express/express-utils/resolver-multer.d.ts +7 -0
- package/lib/esm/types/adapter-express/express-utils/route-constraints.d.ts +89 -0
- package/lib/esm/types/adapter-express/express-utils/scope-extractor.d.ts +21 -0
- package/lib/esm/types/adapter-express/express-utils/scope-extractor.interface.d.ts +12 -0
- package/lib/esm/types/adapter-express/express-utils/setup-authorization.d.ts +34 -0
- package/lib/esm/types/adapter-express/express-utils/setup-event-system.d.ts +118 -0
- package/lib/esm/types/adapter-express/express-utils/setup-interceptors.d.ts +115 -0
- package/lib/esm/types/adapter-express/express-utils/setup-lazy-loading.d.ts +123 -0
- package/lib/esm/types/adapter-express/express-utils/utils.d.ts +24 -0
- package/lib/esm/types/adapter-express/express-utils/validation-decorators.d.ts +145 -0
- package/lib/esm/types/adapter-express/express-utils/validation-service.d.ts +88 -0
- package/lib/esm/types/adapter-express/index.d.ts +7 -0
- package/lib/esm/types/adapter-express/micro-api/application-express-micro-container.d.ts +47 -0
- package/lib/esm/types/adapter-express/micro-api/application-express-micro-route.d.ts +104 -0
- package/lib/esm/types/adapter-express/micro-api/application-express-micro.d.ts +72 -0
- package/lib/esm/types/adapter-express/micro-api/gateway/circuit-breaker.d.ts +111 -0
- package/lib/esm/types/adapter-express/micro-api/gateway/index.d.ts +5 -0
- package/lib/esm/types/adapter-express/micro-api/gateway/service-proxy.d.ts +83 -0
- package/lib/esm/types/adapter-express/micro-api/index.d.ts +7 -0
- package/lib/esm/types/adapter-express/micro-api/micro.d.ts +66 -0
- package/lib/esm/types/adapter-express/micro-api/queue/index.d.ts +5 -0
- package/lib/esm/types/adapter-express/micro-api/queue/queue.interface.d.ts +60 -0
- package/lib/esm/types/adapter-express/micro-api/queue/rabbitmq-consumer.d.ts +86 -0
- package/lib/esm/types/adapter-express/micro-api/serverless/aws-lambda.adapter.d.ts +77 -0
- package/lib/esm/types/adapter-express/micro-api/serverless/cloudflare.adapter.d.ts +64 -0
- package/lib/esm/types/adapter-express/micro-api/serverless/index.d.ts +6 -0
- package/lib/esm/types/adapter-express/micro-api/serverless/vercel.adapter.d.ts +56 -0
- package/lib/esm/types/adapter-express/micro-api/service-mesh/index.d.ts +5 -0
- package/lib/esm/types/adapter-express/micro-api/service-mesh/service-client.d.ts +122 -0
- package/lib/esm/types/adapter-express/micro-api/service-mesh/service-discovery.d.ts +150 -0
- package/lib/esm/types/adapter-express/middleware/index.d.ts +5 -0
- package/lib/esm/types/adapter-express/middleware/request-logging.middleware.d.ts +65 -0
- package/lib/esm/types/adapter-express/render/constants.d.ts +26 -0
- package/lib/esm/types/adapter-express/render/engine.d.ts +20 -0
- package/lib/esm/types/adapter-express/render/index.d.ts +5 -0
- package/lib/esm/types/adapter-express/render/resolve-render.d.ts +7 -0
- package/lib/esm/types/adapter-express/studio/index.d.ts +1 -0
- package/lib/esm/types/adapter-express/studio/studio-integration.d.ts +92 -0
- package/lib/esm/types/index.d.ts +1 -0
- package/lib/package.json +156 -146
- package/package.json +156 -146
- package/lib/cjs/di/di.interfaces.js +0 -10
- package/lib/cjs/types/di/di.interfaces.d.ts +0 -289
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -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,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
|
+
}
|