@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,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupEventSystemForExpress = setupEventSystemForExpress;
|
|
4
|
+
const core_1 = require("@expressots/core");
|
|
5
|
+
/**
|
|
6
|
+
* Set up the ExpressoTS Event System with zero boilerplate.
|
|
7
|
+
*
|
|
8
|
+
* This function:
|
|
9
|
+
* 1. Registers all event system services (EventRegistry, EventEmitter, EventRecorder, EventFlowTracker)
|
|
10
|
+
* 2. Auto-discovers and registers all @OnEvent decorated handlers
|
|
11
|
+
* 3. Configures recording and flow tracking based on environment
|
|
12
|
+
* 4. Sets up replay emitter for development debugging
|
|
13
|
+
*
|
|
14
|
+
* @param container - The DI container
|
|
15
|
+
* @param options - Configuration options for the event system
|
|
16
|
+
* @returns Setup result with references to all event system services
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* export class App extends AppExpress {
|
|
21
|
+
* async configureServices(): Promise<void> {
|
|
22
|
+
* // Simple setup with defaults (recommended)
|
|
23
|
+
* const { handlersDiscovered } = setupEventSystemForExpress(
|
|
24
|
+
* this.config.Container
|
|
25
|
+
* );
|
|
26
|
+
* console.log(`Discovered ${handlersDiscovered} event handlers`);
|
|
27
|
+
*
|
|
28
|
+
* // Or with custom options
|
|
29
|
+
* setupEventSystemForExpress(this.config.Container, {
|
|
30
|
+
* enableRecording: true,
|
|
31
|
+
* maxRecordedEvents: 500,
|
|
32
|
+
* defaultTimeout: 10000,
|
|
33
|
+
* onError: (error, event, handler) => {
|
|
34
|
+
* console.error(`Handler ${handler} failed:`, error);
|
|
35
|
+
* }
|
|
36
|
+
* });
|
|
37
|
+
* }
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @public API
|
|
42
|
+
*/
|
|
43
|
+
function setupEventSystemForExpress(container, options = {}) {
|
|
44
|
+
const isDev = process.env.NODE_ENV === "development" || process.env.NODE_ENV === undefined;
|
|
45
|
+
// Default options
|
|
46
|
+
const config = {
|
|
47
|
+
enableRecording: isDev,
|
|
48
|
+
enableFlowTracking: isDev,
|
|
49
|
+
maxRecordedEvents: 1000,
|
|
50
|
+
defaultTimeout: 30000,
|
|
51
|
+
autoDiscover: true,
|
|
52
|
+
...options,
|
|
53
|
+
};
|
|
54
|
+
// Register EventRegistry (singleton)
|
|
55
|
+
if (!container.isBound(core_1.EventRegistry)) {
|
|
56
|
+
container.bind(core_1.EventRegistry).toSelf().inSingletonScope();
|
|
57
|
+
}
|
|
58
|
+
// Register EventEmitter (singleton)
|
|
59
|
+
if (!container.isBound(core_1.EventEmitter)) {
|
|
60
|
+
container.bind(core_1.EventEmitter).toSelf().inSingletonScope();
|
|
61
|
+
}
|
|
62
|
+
// Register EventRecorder (singleton)
|
|
63
|
+
if (!container.isBound(core_1.EventRecorder)) {
|
|
64
|
+
container.bind(core_1.EventRecorder).toSelf().inSingletonScope();
|
|
65
|
+
}
|
|
66
|
+
// Register EventFlowTracker (singleton)
|
|
67
|
+
if (!container.isBound(core_1.EventFlowTracker)) {
|
|
68
|
+
container.bind(core_1.EventFlowTracker).toSelf().inSingletonScope();
|
|
69
|
+
}
|
|
70
|
+
// Get instances
|
|
71
|
+
const registry = container.get(core_1.EventRegistry);
|
|
72
|
+
const emitter = container.get(core_1.EventEmitter);
|
|
73
|
+
const recorder = container.get(core_1.EventRecorder);
|
|
74
|
+
const flowTracker = container.get(core_1.EventFlowTracker);
|
|
75
|
+
// Auto-discover event handlers
|
|
76
|
+
let handlersDiscovered = 0;
|
|
77
|
+
if (config.autoDiscover) {
|
|
78
|
+
handlersDiscovered = registry.discoverHandlers(container);
|
|
79
|
+
}
|
|
80
|
+
// Configure emitter
|
|
81
|
+
const emitterConfig = {
|
|
82
|
+
enableRecording: config.enableRecording,
|
|
83
|
+
enableFlowTracking: config.enableFlowTracking,
|
|
84
|
+
maxRecordedEvents: config.maxRecordedEvents,
|
|
85
|
+
defaultTimeout: config.defaultTimeout,
|
|
86
|
+
};
|
|
87
|
+
if (config.onEmit) {
|
|
88
|
+
emitterConfig.onEmit = config.onEmit;
|
|
89
|
+
}
|
|
90
|
+
if (config.onHandlerComplete) {
|
|
91
|
+
emitterConfig.onHandlerComplete = config.onHandlerComplete;
|
|
92
|
+
}
|
|
93
|
+
if (config.onError) {
|
|
94
|
+
emitterConfig.onError = config.onError;
|
|
95
|
+
}
|
|
96
|
+
emitter.configure(emitterConfig);
|
|
97
|
+
// Configure recorder
|
|
98
|
+
recorder.configure({
|
|
99
|
+
maxEvents: config.maxRecordedEvents || 1000,
|
|
100
|
+
autoStart: config.enableRecording,
|
|
101
|
+
});
|
|
102
|
+
// Set up replay emitter (so recorded events can be replayed)
|
|
103
|
+
recorder.setReplayEmitter(async (event) => {
|
|
104
|
+
await emitter.emit(event);
|
|
105
|
+
});
|
|
106
|
+
return {
|
|
107
|
+
registry,
|
|
108
|
+
emitter,
|
|
109
|
+
recorder,
|
|
110
|
+
flowTracker,
|
|
111
|
+
handlersDiscovered,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupInterceptorsForExpress = setupInterceptorsForExpress;
|
|
4
|
+
const core_1 = require("@expressots/core");
|
|
5
|
+
/**
|
|
6
|
+
* Set up the ExpressoTS Interceptor System with zero boilerplate.
|
|
7
|
+
*
|
|
8
|
+
* This function:
|
|
9
|
+
* 1. Registers all interceptor infrastructure (InterceptorRegistry, InterceptorExecutor)
|
|
10
|
+
* 2. Optionally enables built-in interceptors (Performance, Logging, Timeout)
|
|
11
|
+
* 3. Registers custom interceptor classes
|
|
12
|
+
* 4. Initializes the interceptor registry
|
|
13
|
+
*
|
|
14
|
+
* @param container - The DI container
|
|
15
|
+
* @param options - Configuration options for the interceptor system
|
|
16
|
+
* @returns Setup result with references to interceptor services
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* export class App extends AppExpress {
|
|
21
|
+
* async configureServices(): Promise<void> {
|
|
22
|
+
* // Simple setup with performance interceptor
|
|
23
|
+
* setupInterceptorsForExpress(this.config.Container, {
|
|
24
|
+
* builtIn: { performance: true }
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* // Full setup with custom interceptors
|
|
28
|
+
* setupInterceptorsForExpress(this.config.Container, {
|
|
29
|
+
* builtIn: {
|
|
30
|
+
* performance: true,
|
|
31
|
+
* logging: true,
|
|
32
|
+
* timeout: { defaultTimeout: 5000 }
|
|
33
|
+
* },
|
|
34
|
+
* customInterceptors: [CacheInterceptor, AuditInterceptor]
|
|
35
|
+
* });
|
|
36
|
+
* }
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @public API
|
|
41
|
+
*/
|
|
42
|
+
function setupInterceptorsForExpress(container, options = {}) {
|
|
43
|
+
// Default options
|
|
44
|
+
const config = {
|
|
45
|
+
autoDiscover: true,
|
|
46
|
+
...options,
|
|
47
|
+
};
|
|
48
|
+
let interceptorsRegistered = 0;
|
|
49
|
+
// Register InterceptorRegistry (singleton)
|
|
50
|
+
if (!container.isBound(core_1.InterceptorRegistry)) {
|
|
51
|
+
container.bind(core_1.InterceptorRegistry).toSelf().inSingletonScope();
|
|
52
|
+
}
|
|
53
|
+
// Register InterceptorExecutor (singleton)
|
|
54
|
+
if (!container.isBound(core_1.InterceptorExecutor)) {
|
|
55
|
+
container.bind(core_1.InterceptorExecutor).toSelf().inSingletonScope();
|
|
56
|
+
}
|
|
57
|
+
// Register PerformanceInterceptorService (needed by PerformanceInterceptor)
|
|
58
|
+
if (!container.isBound(core_1.PerformanceInterceptorService)) {
|
|
59
|
+
container.bind(core_1.PerformanceInterceptorService).toSelf().inSingletonScope();
|
|
60
|
+
}
|
|
61
|
+
// Register built-in interceptors if enabled
|
|
62
|
+
if (config.builtIn?.performance) {
|
|
63
|
+
if (!container.isBound(core_1.PerformanceInterceptor)) {
|
|
64
|
+
container.bind(core_1.PerformanceInterceptor).toSelf().inSingletonScope();
|
|
65
|
+
interceptorsRegistered++;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (config.builtIn?.logging) {
|
|
69
|
+
if (!container.isBound(core_1.LoggingInterceptor)) {
|
|
70
|
+
container.bind(core_1.LoggingInterceptor).toSelf().inSingletonScope();
|
|
71
|
+
interceptorsRegistered++;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (config.builtIn?.timeout) {
|
|
75
|
+
if (!container.isBound(core_1.TimeoutInterceptor)) {
|
|
76
|
+
container.bind(core_1.TimeoutInterceptor).toSelf().inSingletonScope();
|
|
77
|
+
interceptorsRegistered++;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Register custom interceptors
|
|
81
|
+
if (config.customInterceptors && config.customInterceptors.length > 0) {
|
|
82
|
+
for (const interceptorClass of config.customInterceptors) {
|
|
83
|
+
if (!container.isBound(interceptorClass)) {
|
|
84
|
+
container.bind(interceptorClass).toSelf().inSingletonScope();
|
|
85
|
+
interceptorsRegistered++;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Get instances
|
|
90
|
+
const registry = container.get(core_1.InterceptorRegistry);
|
|
91
|
+
const executor = container.get(core_1.InterceptorExecutor);
|
|
92
|
+
// Initialize registry (auto-discovers interceptors from container bindings)
|
|
93
|
+
if (config.autoDiscover) {
|
|
94
|
+
registry.initialize();
|
|
95
|
+
// Update count from registry
|
|
96
|
+
interceptorsRegistered = registry.getAll().length;
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
registry,
|
|
100
|
+
executor,
|
|
101
|
+
interceptorsRegistered,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Setup Lazy Loading for Express
|
|
4
|
+
*
|
|
5
|
+
* One-liner helper function to configure the lazy loading system.
|
|
6
|
+
*
|
|
7
|
+
* @module adapter-express
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.setupLazyLoadingForExpress = setupLazyLoadingForExpress;
|
|
11
|
+
const core_1 = require("@expressots/core");
|
|
12
|
+
const lazy_module_middleware_js_1 = require("./lazy-module-middleware.js");
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Setup Function
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Set up the lazy loading system with one function call.
|
|
18
|
+
*
|
|
19
|
+
* @layer public
|
|
20
|
+
* @audience application-developers
|
|
21
|
+
* @concept lazy-loading
|
|
22
|
+
*
|
|
23
|
+
* UNIQUE: Zero-configuration lazy loading!
|
|
24
|
+
* - Auto-detects routes from @controller() decorators
|
|
25
|
+
* - Creates middleware for automatic module loading
|
|
26
|
+
* - Optional metrics and background warmup
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* // 1. Define lazy modules (routes auto-detected from @controller)
|
|
31
|
+
* // lazy-modules.ts
|
|
32
|
+
* export const AdminModule = CreateLazyModule([AdminController]);
|
|
33
|
+
* // Routes auto-detected: ["/admin"] from @controller("/admin")
|
|
34
|
+
*
|
|
35
|
+
* export const ReportsModule = CreateLazyModule([ReportsController]);
|
|
36
|
+
* // Routes auto-detected: ["/reports"] from @controller("/reports")
|
|
37
|
+
*
|
|
38
|
+
* // 2. Setup in app.ts (just pass the modules!)
|
|
39
|
+
* export class App extends AppExpress {
|
|
40
|
+
* async configureServices(): Promise<void> {
|
|
41
|
+
* const { middleware } = setupLazyLoadingForExpress(
|
|
42
|
+
* this.config.Container,
|
|
43
|
+
* {
|
|
44
|
+
* lazyModules: [AdminModule, ReportsModule],
|
|
45
|
+
* globalPrefix: "/api" // Optional
|
|
46
|
+
* }
|
|
47
|
+
* );
|
|
48
|
+
*
|
|
49
|
+
* // Add middleware - that's it!
|
|
50
|
+
* if (middleware) {
|
|
51
|
+
* this.Middleware.addMiddleware(middleware);
|
|
52
|
+
* }
|
|
53
|
+
* }
|
|
54
|
+
* }
|
|
55
|
+
*
|
|
56
|
+
* // Now:
|
|
57
|
+
* // - GET /api/admin/* → AdminModule auto-loads
|
|
58
|
+
* // - GET /api/reports/* → ReportsModule auto-loads
|
|
59
|
+
* // - No manual route mapping needed!
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @param container - The DI container
|
|
63
|
+
* @param options - Configuration options
|
|
64
|
+
* @returns Setup result with loader, manager, and middleware
|
|
65
|
+
*
|
|
66
|
+
* @public API
|
|
67
|
+
*/
|
|
68
|
+
function setupLazyLoadingForExpress(container, options = {}) {
|
|
69
|
+
const isDev = process.env.NODE_ENV === "development";
|
|
70
|
+
// Get or create provider manager
|
|
71
|
+
let provider;
|
|
72
|
+
try {
|
|
73
|
+
provider = container.get(core_1.ProviderManager);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// ProviderManager not available, create bindings manually
|
|
77
|
+
provider = null;
|
|
78
|
+
}
|
|
79
|
+
// ============================================
|
|
80
|
+
// Register Services
|
|
81
|
+
// ============================================
|
|
82
|
+
// Register LazyModuleLoader if not already bound
|
|
83
|
+
if (!container.isBound(core_1.LazyModuleLoader)) {
|
|
84
|
+
if (provider) {
|
|
85
|
+
provider.register(core_1.LazyModuleLoader, core_1.Scope.Singleton);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
container.bind(core_1.LazyModuleLoader).toSelf().inSingletonScope();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Register LazyModuleManager if not already bound
|
|
92
|
+
if (!container.isBound(core_1.LazyModuleManager)) {
|
|
93
|
+
if (provider) {
|
|
94
|
+
provider.register(core_1.LazyModuleManager, core_1.Scope.Singleton);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
container.bind(core_1.LazyModuleManager).toSelf().inSingletonScope();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Register LazyLoadMetrics if enabled
|
|
101
|
+
const enableMetrics = options.enableMetrics ?? isDev;
|
|
102
|
+
if (enableMetrics && !container.isBound(core_1.LazyLoadMetrics)) {
|
|
103
|
+
if (provider) {
|
|
104
|
+
provider.register(core_1.LazyLoadMetrics, core_1.Scope.Singleton);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
container.bind(core_1.LazyLoadMetrics).toSelf().inSingletonScope();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Register LazyModuleWarmup if enabled
|
|
111
|
+
const enableWarmup = options.enableWarmup ?? true;
|
|
112
|
+
if (enableWarmup && !container.isBound(core_1.LazyModuleWarmup)) {
|
|
113
|
+
if (provider) {
|
|
114
|
+
provider.register(core_1.LazyModuleWarmup, core_1.Scope.Singleton);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
container.bind(core_1.LazyModuleWarmup).toSelf().inSingletonScope();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// ============================================
|
|
121
|
+
// Get Service Instances
|
|
122
|
+
// ============================================
|
|
123
|
+
const loader = container.get(core_1.LazyModuleLoader);
|
|
124
|
+
loader.setContainer(container);
|
|
125
|
+
const manager = container.get(core_1.LazyModuleManager);
|
|
126
|
+
const metrics = enableMetrics ? container.get(core_1.LazyLoadMetrics) : undefined;
|
|
127
|
+
const warmup = enableWarmup ? container.get(core_1.LazyModuleWarmup) : undefined;
|
|
128
|
+
// ============================================
|
|
129
|
+
// Register Lazy Modules
|
|
130
|
+
// ============================================
|
|
131
|
+
const lazyModules = options.lazyModules || [];
|
|
132
|
+
let lazyCount = 0;
|
|
133
|
+
let eagerCount = 0;
|
|
134
|
+
for (const lazyModule of lazyModules) {
|
|
135
|
+
// Check if module should always be loaded eagerly
|
|
136
|
+
const alwaysLoad = options.alwaysLoad || [];
|
|
137
|
+
const neverLoad = options.neverLoad || [];
|
|
138
|
+
if (alwaysLoad.includes(lazyModule.name)) {
|
|
139
|
+
// Load immediately
|
|
140
|
+
lazyModule.load().catch((err) => {
|
|
141
|
+
console.warn(`[Lazy Loading] Failed to eager-load ${lazyModule.name}:`, err);
|
|
142
|
+
});
|
|
143
|
+
eagerCount++;
|
|
144
|
+
}
|
|
145
|
+
else if (!neverLoad.includes(lazyModule.name)) {
|
|
146
|
+
// Register for lazy loading
|
|
147
|
+
loader.register(lazyModule);
|
|
148
|
+
lazyCount++;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// ============================================
|
|
152
|
+
// Log Summary
|
|
153
|
+
// ============================================
|
|
154
|
+
const logLevel = options.logLevel ?? "info";
|
|
155
|
+
if (logLevel !== "none") {
|
|
156
|
+
let logger;
|
|
157
|
+
try {
|
|
158
|
+
logger = container.get(core_1.Logger);
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Logger not available
|
|
162
|
+
}
|
|
163
|
+
const message = `[Lazy Loading] Registered ${lazyCount} lazy modules, ${eagerCount} eager modules`;
|
|
164
|
+
if (logger) {
|
|
165
|
+
logger.info(message);
|
|
166
|
+
}
|
|
167
|
+
else if (logLevel === "debug" || logLevel === "info") {
|
|
168
|
+
console.log(message);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// ============================================
|
|
172
|
+
// Start Warmup if Enabled
|
|
173
|
+
// ============================================
|
|
174
|
+
if (warmup && options.warmupConfig) {
|
|
175
|
+
// Schedule warmup to start after a delay
|
|
176
|
+
const warmupDelay = options.warmupConfig.delay ?? 5000;
|
|
177
|
+
setTimeout(() => {
|
|
178
|
+
warmup.start(options.warmupConfig).catch((err) => {
|
|
179
|
+
console.warn("[Lazy Loading] Warmup failed:", err);
|
|
180
|
+
});
|
|
181
|
+
}, warmupDelay);
|
|
182
|
+
}
|
|
183
|
+
// ============================================
|
|
184
|
+
// Create Auto-Load Middleware
|
|
185
|
+
// ============================================
|
|
186
|
+
let middleware;
|
|
187
|
+
let routeMappings = [];
|
|
188
|
+
if (lazyCount > 0 && options.enableAutoLoad !== false) {
|
|
189
|
+
// Create route mappings from lazy modules
|
|
190
|
+
routeMappings = (0, lazy_module_middleware_js_1.createRouteMappings)(lazyModules.filter((m) => !options.alwaysLoad?.includes(m.name)), options.routePrefixes);
|
|
191
|
+
// Create the middleware
|
|
192
|
+
middleware = (0, lazy_module_middleware_js_1.createLazyModuleMiddleware)({
|
|
193
|
+
routes: routeMappings,
|
|
194
|
+
loader,
|
|
195
|
+
globalPrefix: options.globalPrefix || "",
|
|
196
|
+
onLoadStart: (moduleName, path) => {
|
|
197
|
+
if (options.logLevel !== "none") {
|
|
198
|
+
console.log(`[Lazy Loading] Loading '${moduleName}' (triggered by ${path})...`);
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
onLoadComplete: (moduleName, loadTimeMs) => {
|
|
202
|
+
metrics?.recordLoadTime(moduleName, loadTimeMs);
|
|
203
|
+
},
|
|
204
|
+
onLoadError: (moduleName, error) => {
|
|
205
|
+
console.error(`[Lazy Loading] Failed to load '${moduleName}':`, error.message);
|
|
206
|
+
},
|
|
207
|
+
});
|
|
208
|
+
if (options.logLevel !== "none") {
|
|
209
|
+
const routes = routeMappings
|
|
210
|
+
.map((r) => `${options.globalPrefix || ""}${r.prefix}`)
|
|
211
|
+
.join(", ");
|
|
212
|
+
console.log(`[Lazy Loading] Auto-load middleware active for routes: ${routes}`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// ============================================
|
|
216
|
+
// Return Result
|
|
217
|
+
// ============================================
|
|
218
|
+
return {
|
|
219
|
+
loader,
|
|
220
|
+
manager,
|
|
221
|
+
metrics,
|
|
222
|
+
warmup,
|
|
223
|
+
middleware,
|
|
224
|
+
routeMappings,
|
|
225
|
+
lazyModulesCount: lazyCount,
|
|
226
|
+
eagerModulesCount: eagerCount,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
@@ -7,32 +7,33 @@ exports.getControllerMethodMetadata = getControllerMethodMetadata;
|
|
|
7
7
|
exports.getControllerParameterMetadata = getControllerParameterMetadata;
|
|
8
8
|
exports.cleanUpMetadata = cleanUpMetadata;
|
|
9
9
|
exports.instanceOfIHttpActionResult = instanceOfIHttpActionResult;
|
|
10
|
+
exports.getContentNegotiationMetadata = getContentNegotiationMetadata;
|
|
10
11
|
const core_1 = require("@expressots/core");
|
|
11
|
-
const
|
|
12
|
+
const constants_js_1 = require("./constants.js");
|
|
12
13
|
function getControllersFromContainer(container, forceControllers) {
|
|
13
|
-
if (container.isBound(
|
|
14
|
-
return container.getAll(
|
|
14
|
+
if (container.isBound(constants_js_1.TYPE.Controller)) {
|
|
15
|
+
return container.getAll(constants_js_1.TYPE.Controller);
|
|
15
16
|
}
|
|
16
17
|
if (forceControllers) {
|
|
17
18
|
const logger = new core_1.Logger();
|
|
18
|
-
logger.error(
|
|
19
|
-
throw new Error(
|
|
19
|
+
logger.error(constants_js_1.NO_CONTROLLERS_FOUND, "adapter-express");
|
|
20
|
+
throw new Error(constants_js_1.NO_CONTROLLERS_FOUND);
|
|
20
21
|
}
|
|
21
22
|
else {
|
|
22
23
|
return [];
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
26
|
function getControllersFromMetadata() {
|
|
26
|
-
const arrayOfControllerMetadata = Reflect.getMetadata(
|
|
27
|
+
const arrayOfControllerMetadata = Reflect.getMetadata(constants_js_1.METADATA_KEY.controller, Reflect) || [];
|
|
27
28
|
return arrayOfControllerMetadata.map((metadata) => metadata.target);
|
|
28
29
|
}
|
|
29
30
|
function getControllerMetadata(constructor) {
|
|
30
|
-
const controllerMetadata = Reflect.getOwnMetadata(
|
|
31
|
+
const controllerMetadata = Reflect.getOwnMetadata(constants_js_1.METADATA_KEY.controller, constructor);
|
|
31
32
|
return controllerMetadata;
|
|
32
33
|
}
|
|
33
34
|
function getControllerMethodMetadata(constructor) {
|
|
34
|
-
const methodMetadata = Reflect.getOwnMetadata(
|
|
35
|
-
const genericMetadata = Reflect.getMetadata(
|
|
35
|
+
const methodMetadata = Reflect.getOwnMetadata(constants_js_1.METADATA_KEY.controllerMethod, constructor);
|
|
36
|
+
const genericMetadata = Reflect.getMetadata(constants_js_1.METADATA_KEY.controllerMethod, Reflect.getPrototypeOf(constructor));
|
|
36
37
|
if (genericMetadata !== undefined && methodMetadata !== undefined) {
|
|
37
38
|
return methodMetadata.concat(genericMetadata);
|
|
38
39
|
}
|
|
@@ -42,8 +43,8 @@ function getControllerMethodMetadata(constructor) {
|
|
|
42
43
|
return methodMetadata;
|
|
43
44
|
}
|
|
44
45
|
function getControllerParameterMetadata(constructor) {
|
|
45
|
-
const parameterMetadata = Reflect.getOwnMetadata(
|
|
46
|
-
const genericMetadata = Reflect.getMetadata(
|
|
46
|
+
const parameterMetadata = Reflect.getOwnMetadata(constants_js_1.METADATA_KEY.controllerParameter, constructor);
|
|
47
|
+
const genericMetadata = Reflect.getMetadata(constants_js_1.METADATA_KEY.controllerParameter, Reflect.getPrototypeOf(constructor));
|
|
47
48
|
if (genericMetadata !== undefined && parameterMetadata !== undefined) {
|
|
48
49
|
return { ...parameterMetadata, ...genericMetadata };
|
|
49
50
|
}
|
|
@@ -53,8 +54,25 @@ function getControllerParameterMetadata(constructor) {
|
|
|
53
54
|
return parameterMetadata;
|
|
54
55
|
}
|
|
55
56
|
function cleanUpMetadata() {
|
|
56
|
-
Reflect.defineMetadata(
|
|
57
|
+
Reflect.defineMetadata(constants_js_1.METADATA_KEY.controller, [], Reflect);
|
|
57
58
|
}
|
|
58
59
|
function instanceOfIHttpActionResult(value) {
|
|
59
60
|
return value != null && typeof value.executeAsync === "function";
|
|
60
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Gets content negotiation metadata from a controller method.
|
|
64
|
+
* @param target - Controller instance
|
|
65
|
+
* @param propertyKey - Method name
|
|
66
|
+
* @returns Content negotiation metadata
|
|
67
|
+
*/
|
|
68
|
+
function getContentNegotiationMetadata(target, propertyKey) {
|
|
69
|
+
return {
|
|
70
|
+
accept: Reflect.getMetadata(constants_js_1.METADATA_KEY.accept, target, propertyKey),
|
|
71
|
+
consumes: Reflect.getMetadata(constants_js_1.METADATA_KEY.consumes, target, propertyKey),
|
|
72
|
+
produces: Reflect.getMetadata(constants_js_1.METADATA_KEY.produces, target, propertyKey),
|
|
73
|
+
csvOptions: Reflect.getMetadata(constants_js_1.METADATA_KEY.csvOptions, target, propertyKey),
|
|
74
|
+
xmlOptions: Reflect.getMetadata(constants_js_1.METADATA_KEY.xmlOptions, target, propertyKey),
|
|
75
|
+
yamlOptions: Reflect.getMetadata(constants_js_1.METADATA_KEY.yamlOptions, target, propertyKey),
|
|
76
|
+
streamResponse: Reflect.getMetadata(constants_js_1.METADATA_KEY.streamResponse, target, propertyKey),
|
|
77
|
+
};
|
|
78
|
+
}
|