@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,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Vercel Adapter for ExpressoTS Micro API
|
|
4
|
+
*
|
|
5
|
+
* Converts Vercel serverless function requests to Express format.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.vercelAdapter = vercelAdapter;
|
|
9
|
+
/**
|
|
10
|
+
* Create a Vercel serverless handler from an Express app
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // api/index.ts
|
|
15
|
+
* import { createMicroAPI, vercelAdapter } from "@expressots/adapter-express";
|
|
16
|
+
*
|
|
17
|
+
* const microAPI = createMicroAPI();
|
|
18
|
+
* const app = microAPI.build();
|
|
19
|
+
*
|
|
20
|
+
* app.Middleware.parse();
|
|
21
|
+
* app.Route.get("/api", (req, res) => res.json({ message: "Hello Vercel!" }));
|
|
22
|
+
*
|
|
23
|
+
* export default vercelAdapter(app);
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* vercel.json:
|
|
27
|
+
* ```json
|
|
28
|
+
* {
|
|
29
|
+
* "rewrites": [{ "source": "/api/(.*)", "destination": "/api" }]
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
function vercelAdapter(app, config) {
|
|
34
|
+
const expressApp = "getExpressApp" in app && app.getExpressApp ? app.getExpressApp() : app;
|
|
35
|
+
const debug = config?.debug ?? false;
|
|
36
|
+
return async (req, res) => {
|
|
37
|
+
if (debug) {
|
|
38
|
+
console.log("[Vercel] Request:", {
|
|
39
|
+
method: req.method,
|
|
40
|
+
url: req.url,
|
|
41
|
+
query: req.query,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Vercel passes the request directly to Express
|
|
45
|
+
// We just need to handle the response properly
|
|
46
|
+
return new Promise((resolve) => {
|
|
47
|
+
const originalEnd = res.end.bind(res);
|
|
48
|
+
// Override end to resolve the promise when response is complete
|
|
49
|
+
// Using 'any' to avoid complex Express Response type conflicts
|
|
50
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
51
|
+
res.end = function (chunk, encoding, callback) {
|
|
52
|
+
if (debug) {
|
|
53
|
+
console.log("[Vercel] Response:", {
|
|
54
|
+
statusCode: res.statusCode,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
// Call original end with proper typing
|
|
58
|
+
if (typeof chunk === "function") {
|
|
59
|
+
originalEnd();
|
|
60
|
+
chunk();
|
|
61
|
+
}
|
|
62
|
+
else if (typeof encoding === "function") {
|
|
63
|
+
originalEnd(chunk);
|
|
64
|
+
encoding();
|
|
65
|
+
}
|
|
66
|
+
else if (callback) {
|
|
67
|
+
originalEnd(chunk, encoding, callback);
|
|
68
|
+
}
|
|
69
|
+
else if (encoding) {
|
|
70
|
+
originalEnd(chunk, encoding);
|
|
71
|
+
}
|
|
72
|
+
else if (chunk) {
|
|
73
|
+
originalEnd(chunk);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
originalEnd();
|
|
77
|
+
}
|
|
78
|
+
resolve();
|
|
79
|
+
return this;
|
|
80
|
+
};
|
|
81
|
+
// Handle request through Express
|
|
82
|
+
try {
|
|
83
|
+
expressApp(req, res, (err) => {
|
|
84
|
+
if (err) {
|
|
85
|
+
console.error("[Vercel] Express error:", err);
|
|
86
|
+
res.status(500).json({
|
|
87
|
+
error: err instanceof Error ? err.message : "Unknown error",
|
|
88
|
+
});
|
|
89
|
+
resolve();
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error("[Vercel] Handler error:", error);
|
|
95
|
+
res.status(500).json({
|
|
96
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
97
|
+
});
|
|
98
|
+
resolve();
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Service Mesh Utilities for ExpressoTS Micro Template
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ServiceDiscovery = exports.ServiceClient = void 0;
|
|
7
|
+
var service_client_js_1 = require("./service-client.js");
|
|
8
|
+
Object.defineProperty(exports, "ServiceClient", { enumerable: true, get: function () { return service_client_js_1.ServiceClient; } });
|
|
9
|
+
var service_discovery_js_1 = require("./service-discovery.js");
|
|
10
|
+
Object.defineProperty(exports, "ServiceDiscovery", { enumerable: true, get: function () { return service_discovery_js_1.ServiceDiscovery; } });
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ServiceClient = void 0;
|
|
4
|
+
const circuit_breaker_js_1 = require("../gateway/circuit-breaker.js");
|
|
5
|
+
/**
|
|
6
|
+
* ServiceClient - HTTP client for service-to-service communication.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Automatic retries with exponential backoff
|
|
10
|
+
* - Circuit breaker integration
|
|
11
|
+
* - Request timeout
|
|
12
|
+
* - JSON request/response handling
|
|
13
|
+
* - Trace context propagation
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const userService = new ServiceClient({
|
|
18
|
+
* name: "user-service",
|
|
19
|
+
* baseUrl: "http://user-service:3001",
|
|
20
|
+
* timeout: 5000,
|
|
21
|
+
* retries: 3,
|
|
22
|
+
* circuitBreaker: true,
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // GET request
|
|
26
|
+
* const user = await userService.call<User>("/users/123");
|
|
27
|
+
*
|
|
28
|
+
* // POST request
|
|
29
|
+
* const newUser = await userService.call<User>("/users", {
|
|
30
|
+
* method: "POST",
|
|
31
|
+
* body: { name: "John", email: "john@example.com" },
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* // With query parameters
|
|
35
|
+
* const users = await userService.call<User[]>("/users", {
|
|
36
|
+
* params: { page: "1", limit: "10" },
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
class ServiceClient {
|
|
41
|
+
constructor(config) {
|
|
42
|
+
this.stats = {
|
|
43
|
+
totalRequests: 0,
|
|
44
|
+
successfulRequests: 0,
|
|
45
|
+
failedRequests: 0,
|
|
46
|
+
};
|
|
47
|
+
this.config = {
|
|
48
|
+
name: config.name,
|
|
49
|
+
baseUrl: config.baseUrl.replace(/\/$/, ""), // Remove trailing slash
|
|
50
|
+
timeout: config.timeout ?? 5000,
|
|
51
|
+
retries: config.retries ?? 3,
|
|
52
|
+
headers: config.headers ?? {},
|
|
53
|
+
};
|
|
54
|
+
// Initialize circuit breaker
|
|
55
|
+
if (config.circuitBreaker !== false) {
|
|
56
|
+
const cbConfig = typeof config.circuitBreaker === "object" ? config.circuitBreaker : undefined;
|
|
57
|
+
this.config.circuitBreaker = new circuit_breaker_js_1.CircuitBreaker(cbConfig);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Make a request to the service
|
|
62
|
+
* @param path - Request path
|
|
63
|
+
* @param options - Request options
|
|
64
|
+
*/
|
|
65
|
+
async call(path, options = {}) {
|
|
66
|
+
this.stats.totalRequests++;
|
|
67
|
+
const execute = async () => {
|
|
68
|
+
return await this.executeWithRetry(path, options);
|
|
69
|
+
};
|
|
70
|
+
try {
|
|
71
|
+
let result;
|
|
72
|
+
if (this.config.circuitBreaker) {
|
|
73
|
+
result = await this.config.circuitBreaker.execute(execute);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
result = await execute();
|
|
77
|
+
}
|
|
78
|
+
this.stats.successfulRequests++;
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
this.stats.failedRequests++;
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* GET request helper
|
|
88
|
+
*/
|
|
89
|
+
async get(path, options) {
|
|
90
|
+
return this.call(path, { ...options, method: "GET" });
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* POST request helper
|
|
94
|
+
*/
|
|
95
|
+
async post(path, body, options) {
|
|
96
|
+
return this.call(path, { ...options, method: "POST", body });
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* PUT request helper
|
|
100
|
+
*/
|
|
101
|
+
async put(path, body, options) {
|
|
102
|
+
return this.call(path, { ...options, method: "PUT", body });
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* PATCH request helper
|
|
106
|
+
*/
|
|
107
|
+
async patch(path, body, options) {
|
|
108
|
+
return this.call(path, { ...options, method: "PATCH", body });
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* DELETE request helper
|
|
112
|
+
*/
|
|
113
|
+
async delete(path, options) {
|
|
114
|
+
return this.call(path, { ...options, method: "DELETE" });
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get service stats
|
|
118
|
+
*/
|
|
119
|
+
getStats() {
|
|
120
|
+
return {
|
|
121
|
+
name: this.config.name,
|
|
122
|
+
baseUrl: this.config.baseUrl,
|
|
123
|
+
...this.stats,
|
|
124
|
+
circuitBreaker: this.config.circuitBreaker?.getStats(),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Execute request with retry logic
|
|
129
|
+
*/
|
|
130
|
+
async executeWithRetry(path, options, attempt = 1) {
|
|
131
|
+
try {
|
|
132
|
+
return await this.executeRequest(path, options);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
if (attempt < this.config.retries) {
|
|
136
|
+
// Exponential backoff
|
|
137
|
+
await this.delay(Math.pow(2, attempt) * 100);
|
|
138
|
+
return await this.executeWithRetry(path, options, attempt + 1);
|
|
139
|
+
}
|
|
140
|
+
throw error;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Execute a single request
|
|
145
|
+
*/
|
|
146
|
+
async executeRequest(path, options) {
|
|
147
|
+
// Build URL
|
|
148
|
+
const url = new URL(path, this.config.baseUrl);
|
|
149
|
+
// Add query parameters
|
|
150
|
+
if (options.params) {
|
|
151
|
+
Object.entries(options.params).forEach(([key, value]) => {
|
|
152
|
+
url.searchParams.append(key, value);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
// Build headers
|
|
156
|
+
const headers = {
|
|
157
|
+
"Content-Type": "application/json",
|
|
158
|
+
Accept: "application/json",
|
|
159
|
+
...this.config.headers,
|
|
160
|
+
...options.headers,
|
|
161
|
+
};
|
|
162
|
+
// Setup timeout
|
|
163
|
+
const controller = new AbortController();
|
|
164
|
+
const timeoutId = setTimeout(() => controller.abort(), options.timeout ?? this.config.timeout);
|
|
165
|
+
try {
|
|
166
|
+
const response = await fetch(url.toString(), {
|
|
167
|
+
method: options.method || "GET",
|
|
168
|
+
headers,
|
|
169
|
+
body: options.body ? JSON.stringify(options.body) : undefined,
|
|
170
|
+
signal: controller.signal,
|
|
171
|
+
});
|
|
172
|
+
clearTimeout(timeoutId);
|
|
173
|
+
if (!response.ok) {
|
|
174
|
+
const errorBody = await response.text();
|
|
175
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}. ${errorBody}`);
|
|
176
|
+
}
|
|
177
|
+
return await response.json();
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
clearTimeout(timeoutId);
|
|
181
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
182
|
+
throw new Error(`Request timeout: ${this.config.name} ${path}`);
|
|
183
|
+
}
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Delay helper
|
|
189
|
+
*/
|
|
190
|
+
delay(ms) {
|
|
191
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
exports.ServiceClient = ServiceClient;
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ServiceDiscovery = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* ServiceDiscovery - Service discovery for microservices.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Static service registration
|
|
9
|
+
* - Consul integration
|
|
10
|
+
* - etcd integration
|
|
11
|
+
* - Automatic service refresh
|
|
12
|
+
* - Round-robin load balancing
|
|
13
|
+
* - Health-based filtering
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* // Static service discovery
|
|
18
|
+
* const discovery = new ServiceDiscovery({ type: "static" });
|
|
19
|
+
*
|
|
20
|
+
* discovery.registerService({
|
|
21
|
+
* id: "user-service-1",
|
|
22
|
+
* name: "user-service",
|
|
23
|
+
* host: "user-service",
|
|
24
|
+
* port: 3001,
|
|
25
|
+
* health: "healthy",
|
|
26
|
+
* lastCheck: new Date(),
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* // Get a healthy instance
|
|
30
|
+
* const instance = discovery.getService("user-service");
|
|
31
|
+
* const client = new ServiceClient({
|
|
32
|
+
* name: "user-service",
|
|
33
|
+
* baseUrl: `http://${instance.host}:${instance.port}`,
|
|
34
|
+
* });
|
|
35
|
+
*
|
|
36
|
+
* // Or with Consul
|
|
37
|
+
* const discovery = new ServiceDiscovery({
|
|
38
|
+
* type: "consul",
|
|
39
|
+
* endpoint: "http://consul:8500",
|
|
40
|
+
* });
|
|
41
|
+
* await discovery.initialize();
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
class ServiceDiscovery {
|
|
45
|
+
constructor(config) {
|
|
46
|
+
this.services = new Map();
|
|
47
|
+
this.roundRobinIndex = new Map();
|
|
48
|
+
this.config = {
|
|
49
|
+
type: config.type,
|
|
50
|
+
endpoint: config.endpoint ?? "",
|
|
51
|
+
refreshInterval: config.refreshInterval ?? 30000,
|
|
52
|
+
debug: config.debug ?? false,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Initialize the service discovery
|
|
57
|
+
* For consul/etcd, this starts the refresh loop
|
|
58
|
+
*/
|
|
59
|
+
async initialize() {
|
|
60
|
+
if (this.config.type === "static") {
|
|
61
|
+
// Static configuration - no auto-discovery
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Initial refresh
|
|
65
|
+
await this.refresh();
|
|
66
|
+
// Start refresh loop
|
|
67
|
+
if (this.config.refreshInterval > 0) {
|
|
68
|
+
this.refreshTimer = setInterval(() => this.refresh(), this.config.refreshInterval);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Register a service instance (for static mode)
|
|
73
|
+
* @param service - Service instance to register
|
|
74
|
+
*/
|
|
75
|
+
registerService(service) {
|
|
76
|
+
const instances = this.services.get(service.name) || [];
|
|
77
|
+
// Check if instance already exists
|
|
78
|
+
const existingIndex = instances.findIndex((i) => i.id === service.id);
|
|
79
|
+
if (existingIndex >= 0) {
|
|
80
|
+
instances[existingIndex] = service;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
instances.push(service);
|
|
84
|
+
}
|
|
85
|
+
this.services.set(service.name, instances);
|
|
86
|
+
if (this.config.debug) {
|
|
87
|
+
console.log(`[ServiceDiscovery] Registered ${service.name} (${service.id})`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Deregister a service instance
|
|
92
|
+
* @param serviceName - Service name
|
|
93
|
+
* @param instanceId - Instance ID to remove
|
|
94
|
+
*/
|
|
95
|
+
deregisterService(serviceName, instanceId) {
|
|
96
|
+
const instances = this.services.get(serviceName);
|
|
97
|
+
if (!instances)
|
|
98
|
+
return;
|
|
99
|
+
const filtered = instances.filter((i) => i.id !== instanceId);
|
|
100
|
+
this.services.set(serviceName, filtered);
|
|
101
|
+
if (this.config.debug) {
|
|
102
|
+
console.log(`[ServiceDiscovery] Deregistered ${serviceName} (${instanceId})`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get a healthy instance of a service (round-robin)
|
|
107
|
+
* @param name - Service name
|
|
108
|
+
* @returns A healthy service instance or null
|
|
109
|
+
*/
|
|
110
|
+
getService(name) {
|
|
111
|
+
const instances = this.services.get(name);
|
|
112
|
+
if (!instances || instances.length === 0) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
// Filter to healthy instances only
|
|
116
|
+
const healthy = instances.filter((i) => i.health === "healthy");
|
|
117
|
+
if (healthy.length === 0) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
// Round-robin selection
|
|
121
|
+
const currentIndex = this.roundRobinIndex.get(name) ?? 0;
|
|
122
|
+
const instance = healthy[currentIndex % healthy.length];
|
|
123
|
+
this.roundRobinIndex.set(name, currentIndex + 1);
|
|
124
|
+
return instance;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get all instances of a service
|
|
128
|
+
* @param name - Service name
|
|
129
|
+
* @param healthyOnly - Only return healthy instances (default: true)
|
|
130
|
+
*/
|
|
131
|
+
getServiceInstances(name, healthyOnly = true) {
|
|
132
|
+
const instances = this.services.get(name) || [];
|
|
133
|
+
if (healthyOnly) {
|
|
134
|
+
return instances.filter((i) => i.health === "healthy");
|
|
135
|
+
}
|
|
136
|
+
return instances;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get all registered services
|
|
140
|
+
*/
|
|
141
|
+
getAllServices() {
|
|
142
|
+
return new Map(this.services);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* List all registered service names
|
|
146
|
+
*/
|
|
147
|
+
listServices() {
|
|
148
|
+
return Array.from(this.services.keys());
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Update health status of a service instance
|
|
152
|
+
* @param serviceName - Service name
|
|
153
|
+
* @param instanceId - Instance ID
|
|
154
|
+
* @param health - New health status
|
|
155
|
+
*/
|
|
156
|
+
updateHealth(serviceName, instanceId, health) {
|
|
157
|
+
const instances = this.services.get(serviceName);
|
|
158
|
+
if (!instances)
|
|
159
|
+
return false;
|
|
160
|
+
const instance = instances.find((i) => i.id === instanceId);
|
|
161
|
+
if (!instance)
|
|
162
|
+
return false;
|
|
163
|
+
instance.health = health;
|
|
164
|
+
instance.lastCheck = new Date();
|
|
165
|
+
if (this.config.debug) {
|
|
166
|
+
console.log(`[ServiceDiscovery] Updated ${serviceName} (${instanceId}) health to ${health}`);
|
|
167
|
+
}
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get service statistics
|
|
172
|
+
*/
|
|
173
|
+
getStats() {
|
|
174
|
+
const stats = {};
|
|
175
|
+
for (const [name, instances] of this.services) {
|
|
176
|
+
stats[name] = {
|
|
177
|
+
total: instances.length,
|
|
178
|
+
healthy: instances.filter((i) => i.health === "healthy").length,
|
|
179
|
+
unhealthy: instances.filter((i) => i.health === "unhealthy").length,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
return stats;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Stop the service discovery
|
|
186
|
+
*/
|
|
187
|
+
stop() {
|
|
188
|
+
if (this.refreshTimer) {
|
|
189
|
+
clearInterval(this.refreshTimer);
|
|
190
|
+
this.refreshTimer = undefined;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Refresh service list from discovery backend
|
|
195
|
+
*/
|
|
196
|
+
async refresh() {
|
|
197
|
+
try {
|
|
198
|
+
if (this.config.type === "consul") {
|
|
199
|
+
await this.refreshFromConsul();
|
|
200
|
+
}
|
|
201
|
+
else if (this.config.type === "etcd") {
|
|
202
|
+
await this.refreshFromEtcd();
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
console.error("[ServiceDiscovery] Refresh failed:", error);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Refresh from Consul
|
|
211
|
+
*/
|
|
212
|
+
async refreshFromConsul() {
|
|
213
|
+
if (!this.config.endpoint) {
|
|
214
|
+
throw new Error("Consul endpoint not configured");
|
|
215
|
+
}
|
|
216
|
+
try {
|
|
217
|
+
// Get list of services
|
|
218
|
+
const servicesResponse = await fetch(`${this.config.endpoint}/v1/catalog/services`);
|
|
219
|
+
const services = await servicesResponse.json();
|
|
220
|
+
// Get instances for each service
|
|
221
|
+
for (const serviceName of Object.keys(services)) {
|
|
222
|
+
const instances = await this.getConsulInstances(serviceName);
|
|
223
|
+
this.services.set(serviceName, instances);
|
|
224
|
+
}
|
|
225
|
+
if (this.config.debug) {
|
|
226
|
+
console.log(`[ServiceDiscovery] Refreshed ${this.services.size} services from Consul`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
console.error("[ServiceDiscovery] Consul refresh failed:", error);
|
|
231
|
+
throw error;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Get instances from Consul for a specific service
|
|
236
|
+
*/
|
|
237
|
+
async getConsulInstances(serviceName) {
|
|
238
|
+
const response = await fetch(`${this.config.endpoint}/v1/health/service/${serviceName}?passing=true`);
|
|
239
|
+
const data = (await response.json());
|
|
240
|
+
return data.map((entry) => ({
|
|
241
|
+
id: entry.Service.ID,
|
|
242
|
+
name: entry.Service.Service,
|
|
243
|
+
host: entry.Service.Address || entry.Node.Address,
|
|
244
|
+
port: entry.Service.Port,
|
|
245
|
+
metadata: entry.Service.Meta,
|
|
246
|
+
health: "healthy",
|
|
247
|
+
lastCheck: new Date(),
|
|
248
|
+
}));
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Refresh from etcd
|
|
252
|
+
*/
|
|
253
|
+
async refreshFromEtcd() {
|
|
254
|
+
if (!this.config.endpoint) {
|
|
255
|
+
throw new Error("etcd endpoint not configured");
|
|
256
|
+
}
|
|
257
|
+
// etcd v3 API implementation
|
|
258
|
+
console.log("[ServiceDiscovery] etcd integration requires etcd3 client library");
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
exports.ServiceDiscovery = ServiceDiscovery;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file middleware/index.ts
|
|
4
|
+
* @description Exports for ExpressoTS middleware
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
18
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
__exportStar(require("./request-logging.middleware.js"), exports);
|