@asenajs/asena-otel 1.0.0 → 1.0.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 +24 -6
- package/dist/lib/middleware/OtelTracingMiddleware.js +1 -2
- package/dist/lib/middleware/OtelTracingMiddleware.js.map +1 -1
- package/dist/lib/postprocessor/OtelTracingPostProcessor.js +17 -2
- package/dist/lib/postprocessor/OtelTracingPostProcessor.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -48,14 +48,29 @@ import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
|
|
|
48
48
|
export class AppOtel extends OtelTracingPostProcessor {}
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
### Step 2:
|
|
51
|
+
### Step 2: Create a Local Middleware Class
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
Create a class in your `src` folder that extends `OtelTracingMiddleware` and apply the `@Middleware()` decorator. This registers the middleware in Asena's IoC container.
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
// src/middlewares/AppOtelMiddleware.ts
|
|
57
|
+
import { Middleware } from '@asenajs/asena/decorators';
|
|
58
|
+
import { OtelTracingMiddleware } from '@asenajs/asena-otel';
|
|
59
|
+
|
|
60
|
+
@Middleware()
|
|
61
|
+
export class AppOtelMiddleware extends OtelTracingMiddleware {}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
> **Important:** Asena's IoC container only scans the `src` folder defined in your `asena.config.ts`. Since `OtelTracingMiddleware` lives in `node_modules`, the container cannot discover it automatically. You **must** create a local class extending it with `@Middleware()` so that Asena can register and use it.
|
|
65
|
+
|
|
66
|
+
### Step 3: Register the Middleware in your Config
|
|
67
|
+
|
|
68
|
+
Add `AppOtelMiddleware` to your config's `globalMiddlewares()`. This is required so that all HTTP requests are traced automatically.
|
|
54
69
|
|
|
55
70
|
```typescript
|
|
56
71
|
import { Config } from '@asenajs/asena/decorators';
|
|
57
72
|
import { ConfigService, type Context, HttpException } from '@asenajs/ergenecore';
|
|
58
|
-
import {
|
|
73
|
+
import { AppOtelMiddleware } from '../middlewares/AppOtelMiddleware';
|
|
59
74
|
import { AppCorsMiddleware } from '../middlewares/AppCorsMiddleware';
|
|
60
75
|
|
|
61
76
|
@Config()
|
|
@@ -63,7 +78,7 @@ export class AppConfig extends ConfigService {
|
|
|
63
78
|
|
|
64
79
|
public globalMiddlewares() {
|
|
65
80
|
return [
|
|
66
|
-
|
|
81
|
+
AppOtelMiddleware, // traces all HTTP requests automatically
|
|
67
82
|
AppCorsMiddleware,
|
|
68
83
|
];
|
|
69
84
|
}
|
|
@@ -78,7 +93,7 @@ export class AppConfig extends ConfigService {
|
|
|
78
93
|
}
|
|
79
94
|
```
|
|
80
95
|
|
|
81
|
-
That's it. Asena's IoC container automatically discovers `AppOtel
|
|
96
|
+
That's it. Asena's IoC container automatically discovers `AppOtel` and `OtelService`. All HTTP requests are traced, service methods are auto-traced, and metrics are collected — without changing any business logic.
|
|
82
97
|
|
|
83
98
|
## Components
|
|
84
99
|
|
|
@@ -147,10 +162,13 @@ private meter: Meter;
|
|
|
147
162
|
|
|
148
163
|
**Creates for each request:**
|
|
149
164
|
- A `SERVER` span named `"{METHOD} {PATH}"` (e.g., `GET /api/users`)
|
|
150
|
-
-
|
|
165
|
+
- **Span attributes** (high-cardinality safe): `http.request.method`, `url.path`, `http.route` (after route matching), `http.response.status_code`
|
|
166
|
+
- **Metric attributes** (low-cardinality only): `http.request.method`, `http.route` (or `'unmatched'` for unmatched routes), `http.response.status_code`
|
|
151
167
|
- Metrics: `http.server.request.count` (Counter), `http.server.request.duration` (Histogram)
|
|
152
168
|
- Extracts W3C `traceparent` header from incoming requests for distributed tracing
|
|
153
169
|
|
|
170
|
+
> **Note on cardinality:** `url.path` is intentionally excluded from metric attributes — raw paths from scanner/bot traffic would otherwise create unbounded metric series. A `View` with `createAllowListAttributesProcessor` is also configured on `http.server.*` instruments as defense-in-depth.
|
|
171
|
+
|
|
154
172
|
### OtelTracingPostProcessor
|
|
155
173
|
|
|
156
174
|
`@PostProcessor` that wraps Service and Controller methods with tracing spans via JavaScript Proxy.
|
|
@@ -64,10 +64,9 @@ let OtelTracingMiddleware = class OtelTracingMiddleware extends AsenaMiddlewareS
|
|
|
64
64
|
span.updateName(`${method} ${routePattern}`);
|
|
65
65
|
span.setAttribute(ATTR_HTTP_ROUTE, routePattern);
|
|
66
66
|
}
|
|
67
|
-
const metricRoute = routePattern || url;
|
|
68
67
|
const attributes = {
|
|
69
68
|
[ATTR_HTTP_REQUEST_METHOD]: method,
|
|
70
|
-
[
|
|
69
|
+
[ATTR_HTTP_ROUTE]: routePattern ?? 'unmatched',
|
|
71
70
|
};
|
|
72
71
|
const statusCode = ctx.res?.status;
|
|
73
72
|
if (statusCode !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OtelTracingMiddleware.js","sourceRoot":"","sources":["../../../lib/middleware/OtelTracingMiddleware.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAc,MAAM,oBAAoB,CAAC;AAChE,OAAO,EACL,OAAO,IAAI,WAAW,EAGtB,WAAW,EACX,QAAQ,EACR,cAAc,GAEf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,eAAe,EACf,aAAa,GACd,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAGpC,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,sBAAsB;IAEvD,MAAM,CAAU;IAEhB,KAAK,CAAS;IAEd,cAAc,CAAW;IAEzB,eAAe,CAAa;IAG7B,MAAM;QACX,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAE5C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,2BAA2B,EAAE;YAC1E,WAAW,EAAE,+BAA+B;SAC7C,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,8BAA8B,EAAE;YAChF,WAAW,EAAE,uCAAuC;YACpD,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAA2B,EAAE,IAAyB;QACxE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,IAAI,SAAS,CAAC;QAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;QAE/D,qEAAqE;QACrE,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,EAAE,CAAC;YAEb,OAAO;QACT,CAAC;QAED,wDAAwD;QACxD,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAE7E,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC7G,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;YACpD,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YAEtC,IAAI,CAAC;gBACH,MAAM,IAAI,EAAE,CAAC;gBAEb,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClF,IAAI,CAAC,eAAe,CAAC,KAAc,CAAC,CAAC;gBAErC,MAAM,KAAK,CAAC;YACd,CAAC;oBAAS,CAAC;gBACT,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBAE/C,iFAAiF;gBACjF,MAAM,GAAG,GAAI,GAAW,CAAC,YAAkC,CAAC;gBAC5D,MAAM,OAAO,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACpF,MAAM,YAAY,GAAG,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;gBAEvE,IAAI,YAAY,EAAE,CAAC;oBACjB,IAAI,CAAC,UAAU,CAAC,GAAG,MAAM,IAAI,YAAY,EAAE,CAAC,CAAC;oBAC7C,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;gBACnD,CAAC;gBAED,MAAM,
|
|
1
|
+
{"version":3,"file":"OtelTracingMiddleware.js","sourceRoot":"","sources":["../../../lib/middleware/OtelTracingMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ import { W3CTraceContextPropagator } from '@opentelemetry/core';
|
|
|
13
13
|
import { resourceFromAttributes } from '@opentelemetry/resources';
|
|
14
14
|
import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
|
|
15
15
|
import { BasicTracerProvider, BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
16
|
-
import { MeterProvider } from '@opentelemetry/sdk-metrics';
|
|
16
|
+
import { createAllowListAttributesProcessor, MeterProvider } from '@opentelemetry/sdk-metrics';
|
|
17
17
|
import { getMetadata } from 'reflect-metadata/no-conflict';
|
|
18
18
|
import { PostConstruct } from '@asenajs/asena/decorators/ioc';
|
|
19
19
|
import { getOwnTypedMetadata } from '@asenajs/asena/utils';
|
|
@@ -137,7 +137,22 @@ export class OtelTracingPostProcessor {
|
|
|
137
137
|
trace.setGlobalTracerProvider(this.tracerProvider);
|
|
138
138
|
}
|
|
139
139
|
setupMetrics(resource, reader) {
|
|
140
|
-
this.meterProvider = new MeterProvider({
|
|
140
|
+
this.meterProvider = new MeterProvider({
|
|
141
|
+
resource,
|
|
142
|
+
readers: [reader],
|
|
143
|
+
views: [
|
|
144
|
+
{
|
|
145
|
+
instrumentName: 'http.server.*',
|
|
146
|
+
attributesProcessors: [
|
|
147
|
+
createAllowListAttributesProcessor([
|
|
148
|
+
'http.request.method',
|
|
149
|
+
'http.response.status_code',
|
|
150
|
+
'http.route',
|
|
151
|
+
]),
|
|
152
|
+
],
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
});
|
|
141
156
|
metrics.setGlobalMeterProvider(this.meterProvider);
|
|
142
157
|
}
|
|
143
158
|
registerShutdownHook() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OtelTracingPostProcessor.js","sourceRoot":"","sources":["../../../lib/postprocessor/OtelTracingPostProcessor.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAe,MAAM,oBAAoB,CAAC;AACjH,OAAO,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAiB,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAmC,MAAM,+BAA+B,CAAC;AACzH,OAAO,EAAE,aAAa,EAAqB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"OtelTracingPostProcessor.js","sourceRoot":"","sources":["../../../lib/postprocessor/OtelTracingPostProcessor.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAe,MAAM,oBAAoB,CAAC;AACjH,OAAO,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAiB,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAmC,MAAM,+BAA+B,CAAC;AACzH,OAAO,EAAE,kCAAkC,EAAE,aAAa,EAAqB,MAAM,4BAA4B,CAAC;AAClH,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE,MAAM,sBAAsB,GAAG,SAAS,CAAC;AACzC,MAAM,yBAAyB,GAAG,YAAY,CAAC;AAC/C,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAE3C,MAAM,OAAO,wBAAwB;IAEzB,cAAc,GAA+B,IAAI,CAAC;IAElD,aAAa,GAAyB,IAAI,CAAC;IAE7C,MAAM,CAAU;IAEhB,eAAe,GAAoB,EAAE,CAAC;IAGvC,MAAM;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAElC,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,QAAQ,GAAG,sBAAsB,CAAC;YACtC,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,WAAW;YACxC,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,cAAc,IAAI,OAAO;SAC1D,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAEpE,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QAC/C,iBAAiB,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAE5C,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAEM,WAAW,CAAI,QAAW,EAAE,KAAU;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEnD,IAAI,CAAC,aAAa;YAAE,OAAO,QAAQ,CAAC;QAEpC,IAAI,aAAa,KAAK,sBAAsB,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAElF,IAAI,aAAa,KAAK,yBAAyB,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO,QAAQ,CAAC;QAExF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,OAAO,IAAI,KAAK,CAAC,QAAkB,EAAE;YACnC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;gBACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAElD,IAAI,OAAO,KAAK,KAAK,UAAU;oBAAE,OAAO,KAAK,CAAC;gBAE9C,IAAI,IAAI,KAAK,aAAa,IAAI,OAAO,IAAI,KAAK,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBAErE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAE/C,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAEhD,OAAO,UAAqB,GAAG,IAAW;oBACxC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACrE,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;oBAE1D,IAAI,MAAW,CAAC;oBAEhB,IAAI,CAAC;wBACH,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;oBACtE,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;wBAClF,IAAI,CAAC,eAAe,CAAC,KAAc,CAAC,CAAC;wBACrC,IAAI,CAAC,GAAG,EAAE,CAAC;wBAEX,MAAM,KAAK,CAAC;oBACd,CAAC;oBAED,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;wBAC9B,OAAO,MAAM;6BACV,IAAI,CAAC,CAAC,QAAa,EAAE,EAAE;4BACtB,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;4BAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;4BAEX,OAAO,QAAQ,CAAC;wBAClB,CAAC,CAAC;6BACD,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE;4BACtB,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;4BACvE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;4BAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;4BAEX,MAAM,KAAK,CAAC;wBACd,CAAC,CAAC,CAAC;oBACP,CAAC;oBAED,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;oBAEX,OAAO,MAAM,CAAC;gBAChB,CAAC,CAAC;YACJ,CAAC;SACF,CAAM,CAAC;IACV,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;QACzC,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,QAAQ;QACnB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,OAAO,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC;IAEO,UAAU;QAChB,OAAO,mBAAmB,CAAmB,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3F,CAAC;IAEO,mBAAmB;QACzB,MAAM,cAAc,GAAG,IAAI,+BAA+B,EAAE,CAAC;QAE7D,cAAc,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC;QAChD,WAAW,CAAC,mBAAmB,CAAC,IAAI,yBAAyB,EAAE,CAAC,CAAC;IACnE,CAAC;IAEO,YAAY,CAAC,QAAkB,EAAE,QAAsB,EAAE,OAAiB;QAChF,IAAI,CAAC,cAAc,GAAG,IAAI,mBAAmB,CAAC;YAC5C,QAAQ;YACR,cAAc,EAAE,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAClD,OAAO;SACR,CAAC,CAAC;QAEH,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACrD,CAAC;IAEO,YAAY,CAAC,QAAkB,EAAE,MAAoB;QAC3D,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC;YACrC,QAAQ;YACR,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,KAAK,EAAE;gBACL;oBACE,cAAc,EAAE,eAAe;oBAC/B,oBAAoB,EAAE;wBACpB,kCAAkC,CAAC;4BACjC,qBAAqB;4BACrB,2BAA2B;4BAC3B,YAAY;yBACb,CAAC;qBACH;iBACF;aACF;SACF,CAAC,CAAC;QACH,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrD,CAAC;IAEO,oBAAoB;QAC1B,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;YAC1B,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IAEO,gBAAgB,CAAC,KAAU;QACjC,IAAI,WAAW,CAAC,sBAAsB,EAAE,KAAK,CAAC;YAAE,OAAO,sBAAsB,CAAC;QAE9E,IAAI,WAAW,CAAC,yBAAyB,EAAE,KAAK,CAAC;YAAE,OAAO,yBAAyB,CAAC;QAEpF,OAAO,IAAI,CAAC;IACd,CAAC;CAEF;AA9KQ;IADN,aAAa,EAAE;;;;sDAuBf"}
|