@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,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Validation Decorators
|
|
4
|
+
* @module @expressots/adapter-express
|
|
5
|
+
*
|
|
6
|
+
* Enhanced parameter decorators with validation support.
|
|
7
|
+
* These decorators extend the standard @body, @query, @param, @headers
|
|
8
|
+
* to accept optional schema for automatic validation.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.validatedHeaders = exports.validatedParam = exports.validatedQuery = exports.validatedBody = void 0;
|
|
12
|
+
exports.getValidationMetadata = getValidationMetadata;
|
|
13
|
+
exports.hasValidationMetadata = hasValidationMetadata;
|
|
14
|
+
exports.Validate = Validate;
|
|
15
|
+
require("reflect-metadata");
|
|
16
|
+
const constants_js_1 = require("./constants.js");
|
|
17
|
+
/**
|
|
18
|
+
* Create a validated parameter decorator
|
|
19
|
+
* @param source - Parameter source type
|
|
20
|
+
* @param parameterType - The PARAMETER_TYPE enum value
|
|
21
|
+
*/
|
|
22
|
+
function createValidatedParamDecorator(source, parameterType) {
|
|
23
|
+
return function (nameOrSchema) {
|
|
24
|
+
return function (target, propertyKey, parameterIndex) {
|
|
25
|
+
let paramName;
|
|
26
|
+
let schema;
|
|
27
|
+
let options;
|
|
28
|
+
// Parse arguments based on type
|
|
29
|
+
if (nameOrSchema === undefined) {
|
|
30
|
+
// No arguments - just inject the whole object
|
|
31
|
+
}
|
|
32
|
+
else if (typeof nameOrSchema === "string") {
|
|
33
|
+
// String argument - it's a parameter name (for query, params, headers)
|
|
34
|
+
paramName = nameOrSchema;
|
|
35
|
+
}
|
|
36
|
+
else if (typeof nameOrSchema === "function") {
|
|
37
|
+
// Function (class constructor) - it's a schema
|
|
38
|
+
schema = nameOrSchema;
|
|
39
|
+
}
|
|
40
|
+
else if (typeof nameOrSchema === "object") {
|
|
41
|
+
// Object - could be schema (Zod, etc.) or options
|
|
42
|
+
if ("group" in nameOrSchema || "partial" in nameOrSchema || "adapter" in nameOrSchema) {
|
|
43
|
+
// It's options
|
|
44
|
+
options = nameOrSchema;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// It's a schema (like Zod schema)
|
|
48
|
+
schema = nameOrSchema;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Store basic parameter metadata using existing pattern
|
|
52
|
+
const controller = target.constructor;
|
|
53
|
+
let metadataList = {};
|
|
54
|
+
if (!Reflect.hasOwnMetadata(constants_js_1.METADATA_KEY.controllerParameter, controller)) {
|
|
55
|
+
Reflect.defineMetadata(constants_js_1.METADATA_KEY.controllerParameter, metadataList, controller);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
metadataList = Reflect.getOwnMetadata(constants_js_1.METADATA_KEY.controllerParameter, controller);
|
|
59
|
+
}
|
|
60
|
+
const methodName = propertyKey;
|
|
61
|
+
if (!metadataList[methodName]) {
|
|
62
|
+
metadataList[methodName] = [];
|
|
63
|
+
}
|
|
64
|
+
metadataList[methodName].unshift({
|
|
65
|
+
index: parameterIndex,
|
|
66
|
+
injectRoot: paramName === undefined,
|
|
67
|
+
parameterName: paramName,
|
|
68
|
+
type: parameterType,
|
|
69
|
+
});
|
|
70
|
+
Reflect.defineMetadata(constants_js_1.METADATA_KEY.controllerParameter, metadataList, controller);
|
|
71
|
+
// Store validation schema metadata if provided
|
|
72
|
+
if (schema) {
|
|
73
|
+
const validationMetadata = {
|
|
74
|
+
index: parameterIndex,
|
|
75
|
+
source,
|
|
76
|
+
schema,
|
|
77
|
+
options,
|
|
78
|
+
};
|
|
79
|
+
// Get existing validation metadata for this method
|
|
80
|
+
let validationList = Reflect.getOwnMetadata(constants_js_1.METADATA_KEY.validationSchema, controller, propertyKey) || [];
|
|
81
|
+
// Add new validation metadata
|
|
82
|
+
validationList = [...validationList, validationMetadata];
|
|
83
|
+
Reflect.defineMetadata(constants_js_1.METADATA_KEY.validationSchema, validationList, controller, propertyKey);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Enhanced body decorator with validation support
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* // Without validation (backward compatible)
|
|
94
|
+
* @Post("/users")
|
|
95
|
+
* createUser(@body() user: CreateUserDTO) {}
|
|
96
|
+
*
|
|
97
|
+
* // With class-validator schema
|
|
98
|
+
* @Post("/users")
|
|
99
|
+
* createUser(@body(CreateUserDTO) user: CreateUserDTO) {}
|
|
100
|
+
*
|
|
101
|
+
* // With Zod schema
|
|
102
|
+
* const UserSchema = z.object({ email: z.string().email() });
|
|
103
|
+
* @Post("/users")
|
|
104
|
+
* createUser(@body(UserSchema) user: z.infer<typeof UserSchema>) {}
|
|
105
|
+
*
|
|
106
|
+
* // With validation options
|
|
107
|
+
* @Post("/users")
|
|
108
|
+
* createUser(@body({ group: "create", partial: false }) user: CreateUserDTO) {}
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
exports.validatedBody = createValidatedParamDecorator("body", constants_js_1.PARAMETER_TYPE.BODY);
|
|
112
|
+
/**
|
|
113
|
+
* Enhanced query decorator with validation support
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```typescript
|
|
117
|
+
* // Extract single query param (backward compatible)
|
|
118
|
+
* @Get("/search")
|
|
119
|
+
* search(@query("page") page: number) {}
|
|
120
|
+
*
|
|
121
|
+
* // Extract all query params with validation
|
|
122
|
+
* @Get("/search")
|
|
123
|
+
* search(@query(SearchQueryDTO) query: SearchQueryDTO) {}
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
exports.validatedQuery = createValidatedParamDecorator("query", constants_js_1.PARAMETER_TYPE.QUERY);
|
|
127
|
+
/**
|
|
128
|
+
* Enhanced param decorator with validation support
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```typescript
|
|
132
|
+
* // Extract single route param (backward compatible)
|
|
133
|
+
* @Get("/:id")
|
|
134
|
+
* getUser(@param("id") id: string) {}
|
|
135
|
+
*
|
|
136
|
+
* // Extract all route params with validation
|
|
137
|
+
* @Get("/:userId/posts/:postId")
|
|
138
|
+
* getPost(@param(RouteParamsDTO) params: RouteParamsDTO) {}
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
exports.validatedParam = createValidatedParamDecorator("params", constants_js_1.PARAMETER_TYPE.PARAMS);
|
|
142
|
+
/**
|
|
143
|
+
* Enhanced headers decorator with validation support
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```typescript
|
|
147
|
+
* // Extract single header (backward compatible)
|
|
148
|
+
* @Get("/")
|
|
149
|
+
* handle(@headers("authorization") auth: string) {}
|
|
150
|
+
*
|
|
151
|
+
* // Extract all headers with validation
|
|
152
|
+
* @Get("/")
|
|
153
|
+
* handle(@headers(RequiredHeadersDTO) headers: RequiredHeadersDTO) {}
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
exports.validatedHeaders = createValidatedParamDecorator("headers", constants_js_1.PARAMETER_TYPE.HEADERS);
|
|
157
|
+
/**
|
|
158
|
+
* Get validation schema metadata for a method
|
|
159
|
+
* @param target - Controller constructor
|
|
160
|
+
* @param methodName - Method name
|
|
161
|
+
* @returns Array of validation metadata
|
|
162
|
+
*/
|
|
163
|
+
function getValidationMetadata(target, methodName) {
|
|
164
|
+
return Reflect.getOwnMetadata(constants_js_1.METADATA_KEY.validationSchema, target, methodName) || [];
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Check if a method has validation metadata
|
|
168
|
+
* @param target - Controller constructor
|
|
169
|
+
* @param methodName - Method name
|
|
170
|
+
* @returns true if validation is configured
|
|
171
|
+
*/
|
|
172
|
+
function hasValidationMetadata(target, methodName) {
|
|
173
|
+
const metadata = getValidationMetadata(target, methodName);
|
|
174
|
+
return metadata.length > 0;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* @Validate decorator - marks a parameter for auto-validation
|
|
178
|
+
* Can be used with any parameter decorator
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* @Post("/users")
|
|
183
|
+
* createUser(
|
|
184
|
+
* @Validate(CreateUserDTO)
|
|
185
|
+
* @body() user: CreateUserDTO
|
|
186
|
+
* ) {}
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
function Validate(schema, options) {
|
|
190
|
+
return function (target, propertyKey, parameterIndex) {
|
|
191
|
+
const controller = target.constructor;
|
|
192
|
+
const validationMetadata = {
|
|
193
|
+
index: parameterIndex,
|
|
194
|
+
source: "body", // Default, can be overridden by combining with @body/@query/etc
|
|
195
|
+
schema,
|
|
196
|
+
options,
|
|
197
|
+
};
|
|
198
|
+
// Get existing validation metadata for this method
|
|
199
|
+
let validationList = Reflect.getOwnMetadata(constants_js_1.METADATA_KEY.validationSchema, controller, propertyKey) ||
|
|
200
|
+
[];
|
|
201
|
+
// Add new validation metadata
|
|
202
|
+
validationList = [...validationList, validationMetadata];
|
|
203
|
+
Reflect.defineMetadata(constants_js_1.METADATA_KEY.validationSchema, validationList, controller, propertyKey);
|
|
204
|
+
};
|
|
205
|
+
}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Validation Service
|
|
4
|
+
* @module @expressots/adapter-express
|
|
5
|
+
*
|
|
6
|
+
* Service for validating request parameters using the Smart Validation System.
|
|
7
|
+
* Integrates with the route handler to automatically validate parameters.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.ValidationService = void 0;
|
|
11
|
+
const core_1 = require("@expressots/core");
|
|
12
|
+
const validation_decorators_js_1 = require("./validation-decorators.js");
|
|
13
|
+
/**
|
|
14
|
+
* Validation Service
|
|
15
|
+
*
|
|
16
|
+
* Handles validation of request parameters (body, query, params, headers)
|
|
17
|
+
* using the configured validation adapters and smart field detection.
|
|
18
|
+
*/
|
|
19
|
+
class ValidationService {
|
|
20
|
+
constructor() {
|
|
21
|
+
this.enabled = false;
|
|
22
|
+
this.config = {};
|
|
23
|
+
this.registry = new core_1.ValidationRegistry();
|
|
24
|
+
this.smartDetector = new core_1.SmartFieldDetector();
|
|
25
|
+
this.errorFormatter = new core_1.HelpfulErrorFormatter();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Enable the validation service with the given configuration
|
|
29
|
+
* @param config - Validation configuration
|
|
30
|
+
*/
|
|
31
|
+
enable(config = {}) {
|
|
32
|
+
this.enabled = true;
|
|
33
|
+
this.config = config;
|
|
34
|
+
this.registry.configure(config);
|
|
35
|
+
// Register built-in adapters automatically
|
|
36
|
+
this.registerBuiltInAdapters();
|
|
37
|
+
// Set smart detection
|
|
38
|
+
if (config.smartDetection !== undefined) {
|
|
39
|
+
this.smartDetector.setEnabled(config.smartDetection);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Register built-in validation adapters
|
|
44
|
+
* Additional adapters (Zod, Yup, Joi) can be registered via config.adapters
|
|
45
|
+
* @private
|
|
46
|
+
*/
|
|
47
|
+
registerBuiltInAdapters() {
|
|
48
|
+
// Register class-validator adapter (built-in)
|
|
49
|
+
try {
|
|
50
|
+
const classValidatorAdapter = new core_1.ClassValidatorAdapter();
|
|
51
|
+
this.registry.register(classValidatorAdapter);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// class-validator may not be installed
|
|
55
|
+
}
|
|
56
|
+
// Register user-provided adapters from config
|
|
57
|
+
if (this.config.adapters) {
|
|
58
|
+
for (const AdapterClass of this.config.adapters) {
|
|
59
|
+
try {
|
|
60
|
+
const adapter = new AdapterClass();
|
|
61
|
+
this.registry.register(adapter);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Adapter instantiation failed
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Disable the validation service
|
|
71
|
+
*/
|
|
72
|
+
disable() {
|
|
73
|
+
this.enabled = false;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if validation is enabled
|
|
77
|
+
*/
|
|
78
|
+
isEnabled() {
|
|
79
|
+
return this.enabled;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get the validation registry for adapter management
|
|
83
|
+
*/
|
|
84
|
+
getRegistry() {
|
|
85
|
+
return this.registry;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get the smart field detector
|
|
89
|
+
*/
|
|
90
|
+
getSmartDetector() {
|
|
91
|
+
return this.smartDetector;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get the error formatter
|
|
95
|
+
*/
|
|
96
|
+
getErrorFormatter() {
|
|
97
|
+
return this.errorFormatter;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Validate request parameters based on controller method metadata
|
|
101
|
+
* @param req - Express request
|
|
102
|
+
* @param res - Express response
|
|
103
|
+
* @param controllerConstructor - Controller class constructor
|
|
104
|
+
* @param methodName - Method name
|
|
105
|
+
* @param args - Current parameter values
|
|
106
|
+
* @returns Validated and transformed arguments, or null if validation failed (response sent)
|
|
107
|
+
*/
|
|
108
|
+
async validateParameters(req, res, controllerConstructor, methodName, args) {
|
|
109
|
+
if (!this.enabled) {
|
|
110
|
+
return args;
|
|
111
|
+
}
|
|
112
|
+
// Get validation metadata for the method
|
|
113
|
+
let validationMetadata = (0, validation_decorators_js_1.getValidationMetadata)(controllerConstructor, methodName);
|
|
114
|
+
// TypeScript-First Auto-Detection: If no explicit validation schema,
|
|
115
|
+
// try to infer from TypeScript type metadata
|
|
116
|
+
if (validationMetadata.length === 0 && this.config.autoDetection !== false) {
|
|
117
|
+
validationMetadata = await this.inferValidationFromTypes(controllerConstructor, methodName, args);
|
|
118
|
+
}
|
|
119
|
+
if (validationMetadata.length === 0) {
|
|
120
|
+
// No explicit validation - try smart detection if enabled
|
|
121
|
+
if (this.smartDetector.isEnabled()) {
|
|
122
|
+
const smartErrors = await this.validateWithSmartDetection(req);
|
|
123
|
+
if (smartErrors.length > 0) {
|
|
124
|
+
this.sendValidationError(res, smartErrors);
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return args;
|
|
129
|
+
}
|
|
130
|
+
// Validate each parameter with schema
|
|
131
|
+
const validatedArgs = [...args];
|
|
132
|
+
const allErrors = [];
|
|
133
|
+
for (const metadata of validationMetadata) {
|
|
134
|
+
const paramValue = this.getParameterValue(req, metadata);
|
|
135
|
+
const result = await this.validateValue(paramValue, metadata);
|
|
136
|
+
if (!result.success) {
|
|
137
|
+
allErrors.push(...(result.errors || []));
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// Update argument with validated/transformed data
|
|
141
|
+
validatedArgs[metadata.index] = result.data;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (allErrors.length > 0) {
|
|
145
|
+
this.sendValidationError(res, allErrors);
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
return validatedArgs;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Infer validation metadata from TypeScript type information
|
|
152
|
+
* Uses reflect-metadata to get parameter types and automatically
|
|
153
|
+
* detect class-validator DTOs or Zod schemas
|
|
154
|
+
*/
|
|
155
|
+
async inferValidationFromTypes(controllerConstructor, methodName, args) {
|
|
156
|
+
const inferredMetadata = [];
|
|
157
|
+
for (let i = 0; i < args.length; i++) {
|
|
158
|
+
const typeInfo = (0, core_1.getParameterType)(controllerConstructor.prototype, methodName, i);
|
|
159
|
+
if (!typeInfo || !typeInfo.type)
|
|
160
|
+
continue;
|
|
161
|
+
const schemaType = (0, core_1.detectSchemaType)(typeInfo.type);
|
|
162
|
+
// Only infer validation for class-validator DTOs or Zod schemas
|
|
163
|
+
if (schemaType === "class-validator" || schemaType === "zod") {
|
|
164
|
+
inferredMetadata.push({
|
|
165
|
+
index: i,
|
|
166
|
+
source: "body", // Default to body for inferred types
|
|
167
|
+
schema: typeInfo.type,
|
|
168
|
+
inferred: true, // Mark as auto-inferred
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
else if (schemaType === "class" && (0, core_1.hasClassValidatorDecorators)(typeInfo.type)) {
|
|
172
|
+
// Double-check for class-validator decorators
|
|
173
|
+
inferredMetadata.push({
|
|
174
|
+
index: i,
|
|
175
|
+
source: "body",
|
|
176
|
+
schema: typeInfo.type,
|
|
177
|
+
inferred: true,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return inferredMetadata;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Validate a single value against a schema
|
|
185
|
+
*/
|
|
186
|
+
async validateValue(value, metadata) {
|
|
187
|
+
if (!metadata.schema) {
|
|
188
|
+
return { success: true, data: value };
|
|
189
|
+
}
|
|
190
|
+
const result = await this.registry.validate(value, metadata.schema, {
|
|
191
|
+
...this.config.defaultOptions,
|
|
192
|
+
...metadata.options,
|
|
193
|
+
});
|
|
194
|
+
// If validation passed and smart detection is enabled, also run smart detection
|
|
195
|
+
if (result.success &&
|
|
196
|
+
this.smartDetector.isEnabled() &&
|
|
197
|
+
typeof result.data === "object" &&
|
|
198
|
+
result.data !== null) {
|
|
199
|
+
const smartErrors = this.smartDetector.validateObject(result.data);
|
|
200
|
+
if (smartErrors.length > 0) {
|
|
201
|
+
return {
|
|
202
|
+
success: false,
|
|
203
|
+
errors: smartErrors,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return result;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get the parameter value from the request
|
|
211
|
+
*/
|
|
212
|
+
getParameterValue(req, metadata) {
|
|
213
|
+
switch (metadata.source) {
|
|
214
|
+
case "body":
|
|
215
|
+
return req.body;
|
|
216
|
+
case "query":
|
|
217
|
+
return req.query;
|
|
218
|
+
case "params":
|
|
219
|
+
return req.params;
|
|
220
|
+
case "headers":
|
|
221
|
+
return req.headers;
|
|
222
|
+
default:
|
|
223
|
+
return undefined;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Validate request data using smart field detection
|
|
228
|
+
*/
|
|
229
|
+
async validateWithSmartDetection(req) {
|
|
230
|
+
const errors = [];
|
|
231
|
+
// Validate body if present
|
|
232
|
+
if (req.body && typeof req.body === "object") {
|
|
233
|
+
const bodyErrors = this.smartDetector.validateObject(req.body);
|
|
234
|
+
errors.push(...bodyErrors);
|
|
235
|
+
}
|
|
236
|
+
// Validate query if present
|
|
237
|
+
if (req.query && typeof req.query === "object") {
|
|
238
|
+
const queryErrors = this.smartDetector.validateObject(req.query);
|
|
239
|
+
errors.push(...queryErrors);
|
|
240
|
+
}
|
|
241
|
+
return errors;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Send validation error response
|
|
245
|
+
*/
|
|
246
|
+
sendValidationError(res, errors) {
|
|
247
|
+
const format = this.config.errorFormat || "helpful";
|
|
248
|
+
const formattedErrors = this.errorFormatter.format(errors, format);
|
|
249
|
+
res.status(400).json(formattedErrors);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
exports.ValidationService = ValidationService;
|
|
@@ -15,10 +15,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.RenderEngine = exports.AppExpress = void 0;
|
|
18
|
-
__exportStar(require("./express-utils"), exports);
|
|
19
|
-
var
|
|
20
|
-
Object.defineProperty(exports, "AppExpress", { enumerable: true, get: function () { return
|
|
21
|
-
__exportStar(require("./micro-api"), exports);
|
|
18
|
+
__exportStar(require("./express-utils/index.js"), exports);
|
|
19
|
+
var application_express_js_1 = require("./application-express.js");
|
|
20
|
+
Object.defineProperty(exports, "AppExpress", { enumerable: true, get: function () { return application_express_js_1.AppExpress; } });
|
|
21
|
+
__exportStar(require("./micro-api/index.js"), exports);
|
|
22
22
|
var shared_1 = require("@expressots/shared");
|
|
23
23
|
Object.defineProperty(exports, "RenderEngine", { enumerable: true, get: function () { return shared_1.RenderEngine; } });
|
|
24
|
-
__exportStar(require("./render"), exports);
|
|
24
|
+
__exportStar(require("./render/index.js"), exports);
|
|
25
|
+
__exportStar(require("./middleware/index.js"), exports);
|
|
26
|
+
__exportStar(require("./studio/index.js"), exports);
|
|
@@ -80,13 +80,43 @@ class Route {
|
|
|
80
80
|
patch(path, handler, ...middleware) {
|
|
81
81
|
this.define("patch", path, handler, ...middleware);
|
|
82
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Wrap a handler to automatically send return values as response
|
|
85
|
+
* @param handler - The original handler
|
|
86
|
+
* @returns Wrapped Express request handler
|
|
87
|
+
* @private
|
|
88
|
+
*/
|
|
89
|
+
wrapHandler(handler) {
|
|
90
|
+
return async (req, res, next) => {
|
|
91
|
+
try {
|
|
92
|
+
const result = await handler(req, res, next);
|
|
93
|
+
// If the response has already been sent, don't send again
|
|
94
|
+
if (res.headersSent) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// If handler returned a value, send it as response
|
|
98
|
+
if (result !== undefined) {
|
|
99
|
+
if (typeof result === "string") {
|
|
100
|
+
res.send(result);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
res.json(result);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
next(error);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
83
112
|
/**
|
|
84
113
|
* Apply the routes to the Express application
|
|
85
114
|
*/
|
|
86
115
|
applyRoutes() {
|
|
87
116
|
this.routes.forEach(({ method, path, handler, middleware }) => {
|
|
117
|
+
const wrappedHandler = this.wrapHandler(handler);
|
|
88
118
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
89
|
-
this.app[method](path, ...middleware,
|
|
119
|
+
this.app[method](path, ...middleware, wrappedHandler);
|
|
90
120
|
});
|
|
91
121
|
}
|
|
92
122
|
/**
|
|
@@ -5,11 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.createMicroAPI = createMicroAPI;
|
|
7
7
|
const core_1 = require("@expressots/core");
|
|
8
|
-
const shared_1 = require("@expressots/shared");
|
|
9
8
|
const express_1 = __importDefault(require("express"));
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const application_express_micro_route_1 = require("./application-express-micro-route");
|
|
9
|
+
const application_express_micro_container_js_1 = require("./application-express-micro-container.js");
|
|
10
|
+
const application_express_micro_route_js_1 = require("./application-express-micro-route.js");
|
|
13
11
|
class AppExpressMicro {
|
|
14
12
|
constructor() {
|
|
15
13
|
this.logger = new core_1.Logger();
|
|
@@ -20,7 +18,6 @@ class AppExpressMicro {
|
|
|
20
18
|
* @private
|
|
21
19
|
*/
|
|
22
20
|
handleExit() {
|
|
23
|
-
this.logger.info("Server shutting down.", "MicroAPI");
|
|
24
21
|
process.exit(0);
|
|
25
22
|
}
|
|
26
23
|
/**
|
|
@@ -55,34 +52,6 @@ class AppExpressMicro {
|
|
|
55
52
|
setGlobalRoutePrefix(prefix) {
|
|
56
53
|
this.globalPrefix = prefix;
|
|
57
54
|
}
|
|
58
|
-
/**
|
|
59
|
-
* Initialize the environment for the application
|
|
60
|
-
* @param environment - The environment to initialize
|
|
61
|
-
* @param options - Options for the environment initialization
|
|
62
|
-
* @public API
|
|
63
|
-
*/
|
|
64
|
-
initEnvironment(environment, options) {
|
|
65
|
-
this.environment = environment;
|
|
66
|
-
if (options === undefined) {
|
|
67
|
-
(0, shared_1.config)({ path: ".env" });
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
if (!options.env[environment]) {
|
|
71
|
-
this.logger.error(`Environment configuration for [${environment}] does not exist.`, "adapter-express");
|
|
72
|
-
process.exit(1);
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
const envFileName = options.env[environment];
|
|
76
|
-
if (!fs_1.default.existsSync(envFileName)) {
|
|
77
|
-
this.logger.error(`Environment file [${envFileName}] does not exist.`, "adapter-express");
|
|
78
|
-
process.exit(1);
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
(0, shared_1.config)({ path: envFileName });
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
55
|
/**
|
|
87
56
|
* Get the Middleware instance
|
|
88
57
|
* @returns IMiddleware
|
|
@@ -123,8 +92,8 @@ class AppExpressMicro {
|
|
|
123
92
|
*/
|
|
124
93
|
create(config) {
|
|
125
94
|
this.app = (0, express_1.default)();
|
|
126
|
-
this.routeManager = new
|
|
127
|
-
this.container = new
|
|
95
|
+
this.routeManager = new application_express_micro_route_js_1.Route(this.app);
|
|
96
|
+
this.container = new application_express_micro_container_js_1.IOC(config?.containerOptions);
|
|
128
97
|
this.middlewareManager = new core_1.Middleware();
|
|
129
98
|
this.environment = "development";
|
|
130
99
|
return this;
|
|
@@ -161,15 +130,16 @@ class AppExpressMicro {
|
|
|
161
130
|
else {
|
|
162
131
|
this.port = normalizedPort;
|
|
163
132
|
}
|
|
164
|
-
const
|
|
165
|
-
|
|
133
|
+
const name = appInfo?.appName || "ExpressoTS Micro";
|
|
134
|
+
const version = appInfo?.appVersion || "1.0.0";
|
|
135
|
+
logger.info(`${name} version ${version} is running on port ${this.port} - Environment: ${this.environment}`, "micro");
|
|
166
136
|
["SIGTERM", "SIGHUP", "SIGBREAK", "SIGQUIT", "SIGINT"].forEach((signal) => {
|
|
167
137
|
process.on(signal, this.handleExit.bind(this));
|
|
168
138
|
});
|
|
169
139
|
resolve();
|
|
170
140
|
});
|
|
171
141
|
this.httpServer.on("error", (error) => {
|
|
172
|
-
logger.error(`Error starting server: ${error.message}`, "
|
|
142
|
+
logger.error(`Error starting server: ${error.message}`, "micro");
|
|
173
143
|
reject(error);
|
|
174
144
|
});
|
|
175
145
|
});
|