@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.
- package/LICENSE.md +21 -21
- package/README.md +61 -118
- package/lib/CHANGELOG.md +36 -5
- package/lib/README.md +61 -118
- package/lib/cjs/adapter-express/application-express.base.js +3 -1
- package/lib/cjs/adapter-express/application-express.js +1405 -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 +225 -59
- 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 +827 -64
- 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/path-pattern-compat.js +129 -0
- package/lib/cjs/adapter-express/express-utils/permission-preloader.middleware.js +48 -0
- package/lib/cjs/adapter-express/express-utils/route-constraints.js +104 -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 +8 -38
- 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 +272 -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 +10 -0
- package/lib/cjs/adapter-express/studio/studio-integration.js +267 -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 +316 -33
- 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/path-pattern-compat.d.ts +66 -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 +98 -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 +83 -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 +170 -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 +1656 -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 +604 -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 +1047 -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/path-pattern-compat.js +125 -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 +100 -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 +157 -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 +266 -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 +236 -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 +453 -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/path-pattern-compat.d.ts +66 -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 +98 -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 +83 -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 +170 -0
- package/lib/esm/types/index.d.ts +1 -0
- package/lib/package.json +170 -146
- package/package.json +170 -146
- package/lib/cjs/di/di.interfaces.js +0 -10
- 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
|
|
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(
|
|
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
|
-
|
|
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
|
+
}
|