flow-debugger 1.9.8 → 1.9.9

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.
Files changed (71) hide show
  1. package/ENHANCED_OBSERVABILITY.md +835 -0
  2. package/IMPLEMENTATION_SUMMARY.md +466 -0
  3. package/README.md +147 -8
  4. package/dist/cjs/core/Alerting.js +310 -0
  5. package/dist/cjs/core/Alerting.js.map +1 -0
  6. package/dist/cjs/core/AnomalyDetection.js +223 -0
  7. package/dist/cjs/core/AnomalyDetection.js.map +1 -0
  8. package/dist/cjs/core/DependencyGraph.js +251 -0
  9. package/dist/cjs/core/DependencyGraph.js.map +1 -0
  10. package/dist/cjs/core/DistributedTracing.js +245 -0
  11. package/dist/cjs/core/DistributedTracing.js.map +1 -0
  12. package/dist/cjs/core/ErrorClustering.js +257 -0
  13. package/dist/cjs/core/ErrorClustering.js.map +1 -0
  14. package/dist/cjs/core/LogCorrelation.js +242 -0
  15. package/dist/cjs/core/LogCorrelation.js.map +1 -0
  16. package/dist/cjs/core/Metrics.js +301 -0
  17. package/dist/cjs/core/Metrics.js.map +1 -0
  18. package/dist/cjs/core/TrendAnalysis.js +254 -0
  19. package/dist/cjs/core/TrendAnalysis.js.map +1 -0
  20. package/dist/cjs/core/types.js +14 -0
  21. package/dist/cjs/core/types.js.map +1 -1
  22. package/dist/cjs/index.js +27 -1
  23. package/dist/cjs/index.js.map +1 -1
  24. package/dist/cjs/middleware/express.js +105 -4
  25. package/dist/cjs/middleware/express.js.map +1 -1
  26. package/dist/esm/core/Alerting.js +305 -0
  27. package/dist/esm/core/Alerting.js.map +1 -0
  28. package/dist/esm/core/AnomalyDetection.js +218 -0
  29. package/dist/esm/core/AnomalyDetection.js.map +1 -0
  30. package/dist/esm/core/DependencyGraph.js +246 -0
  31. package/dist/esm/core/DependencyGraph.js.map +1 -0
  32. package/dist/esm/core/DistributedTracing.js +240 -0
  33. package/dist/esm/core/DistributedTracing.js.map +1 -0
  34. package/dist/esm/core/ErrorClustering.js +252 -0
  35. package/dist/esm/core/ErrorClustering.js.map +1 -0
  36. package/dist/esm/core/LogCorrelation.js +236 -0
  37. package/dist/esm/core/LogCorrelation.js.map +1 -0
  38. package/dist/esm/core/Metrics.js +297 -0
  39. package/dist/esm/core/Metrics.js.map +1 -0
  40. package/dist/esm/core/TrendAnalysis.js +250 -0
  41. package/dist/esm/core/TrendAnalysis.js.map +1 -0
  42. package/dist/esm/core/types.js +14 -0
  43. package/dist/esm/core/types.js.map +1 -1
  44. package/dist/esm/index.js +10 -0
  45. package/dist/esm/index.js.map +1 -1
  46. package/dist/esm/middleware/express.js +105 -4
  47. package/dist/esm/middleware/express.js.map +1 -1
  48. package/dist/types/core/Alerting.d.ts +82 -0
  49. package/dist/types/core/Alerting.d.ts.map +1 -0
  50. package/dist/types/core/AnomalyDetection.d.ts +93 -0
  51. package/dist/types/core/AnomalyDetection.d.ts.map +1 -0
  52. package/dist/types/core/DependencyGraph.d.ts +65 -0
  53. package/dist/types/core/DependencyGraph.d.ts.map +1 -0
  54. package/dist/types/core/DistributedTracing.d.ts +92 -0
  55. package/dist/types/core/DistributedTracing.d.ts.map +1 -0
  56. package/dist/types/core/ErrorClustering.d.ts +70 -0
  57. package/dist/types/core/ErrorClustering.d.ts.map +1 -0
  58. package/dist/types/core/LogCorrelation.d.ts +73 -0
  59. package/dist/types/core/LogCorrelation.d.ts.map +1 -0
  60. package/dist/types/core/Metrics.d.ts +73 -0
  61. package/dist/types/core/Metrics.d.ts.map +1 -0
  62. package/dist/types/core/TrendAnalysis.d.ts +63 -0
  63. package/dist/types/core/TrendAnalysis.d.ts.map +1 -0
  64. package/dist/types/core/types.d.ts +200 -0
  65. package/dist/types/core/types.d.ts.map +1 -1
  66. package/dist/types/index.d.ts +9 -1
  67. package/dist/types/index.d.ts.map +1 -1
  68. package/dist/types/middleware/express.d.ts +12 -0
  69. package/dist/types/middleware/express.d.ts.map +1 -1
  70. package/package.json +1 -1
  71. package/test-results.json +1 -0
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ // ─────────────────────────────────────────────────────────────
3
+ // flow-debugger — Dependency Graph System
4
+ // Maps service dependencies and their health
5
+ // ─────────────────────────────────────────────────────────────
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DependencyGraphManager = void 0;
8
+ exports.visualizeDependencyGraph = visualizeDependencyGraph;
9
+ /**
10
+ * Dependency Graph Manager - Tracks service dependencies and relationships
11
+ */
12
+ class DependencyGraphManager {
13
+ constructor() {
14
+ this.nodes = new Map();
15
+ this.edges = new Map();
16
+ this.lastUpdated = new Date();
17
+ }
18
+ /**
19
+ * Process a trace and update dependency graph
20
+ */
21
+ processTrace(trace) {
22
+ // Create/update endpoint node
23
+ const endpointId = `${trace.method}:${trace.endpoint}`;
24
+ this.updateNode(endpointId, trace.endpoint, 'internal', {
25
+ avgLatency: trace.totalDuration,
26
+ errorRate: trace.classification === 'ERROR' || trace.classification === 'CRITICAL' ? 1 : 0,
27
+ requestCount: 1,
28
+ });
29
+ // Process each step
30
+ trace.steps.forEach(step => {
31
+ if (step.service !== 'internal') {
32
+ const serviceId = step.service;
33
+ this.updateNode(serviceId, this.getServiceName(step.service), step.service, {
34
+ avgLatency: step.duration,
35
+ errorRate: step.status === 'error' || step.status === 'timeout' ? 1 : 0,
36
+ requestCount: 1,
37
+ });
38
+ // Create/update edge from endpoint to service
39
+ this.updateEdge(endpointId, serviceId, {
40
+ callCount: 1,
41
+ avgLatency: step.duration,
42
+ errorCount: step.status === 'error' || step.status === 'timeout' ? 1 : 0,
43
+ });
44
+ }
45
+ });
46
+ this.lastUpdated = new Date();
47
+ }
48
+ /**
49
+ * Get the complete dependency graph
50
+ */
51
+ getGraph() {
52
+ return {
53
+ nodes: Array.from(this.nodes.values()),
54
+ edges: this.getAllEdges(),
55
+ updatedAt: this.lastUpdated,
56
+ };
57
+ }
58
+ /**
59
+ * Get node by ID
60
+ */
61
+ getNode(id) {
62
+ return this.nodes.get(id);
63
+ }
64
+ /**
65
+ * Get all nodes
66
+ */
67
+ getNodes() {
68
+ return Array.from(this.nodes.values());
69
+ }
70
+ /**
71
+ * Get edges for a node
72
+ */
73
+ getEdges(nodeId) {
74
+ const nodeEdges = this.edges.get(nodeId);
75
+ if (!nodeEdges)
76
+ return [];
77
+ return Array.from(nodeEdges.values());
78
+ }
79
+ /**
80
+ * Get all edges
81
+ */
82
+ getAllEdges() {
83
+ const allEdges = [];
84
+ this.edges.forEach((targetMap, sourceId) => {
85
+ targetMap.forEach(edge => {
86
+ allEdges.push({ ...edge, from: sourceId });
87
+ });
88
+ });
89
+ return allEdges;
90
+ }
91
+ /**
92
+ * Get critical path (highest latency chain)
93
+ */
94
+ getCriticalPath() {
95
+ const edges = this.getAllEdges();
96
+ if (edges.length === 0)
97
+ return null;
98
+ // Find root nodes (no incoming edges)
99
+ const targets = new Set(edges.map(e => e.to));
100
+ const roots = Array.from(this.nodes.keys()).filter(id => !targets.has(id));
101
+ if (roots.length === 0)
102
+ return null;
103
+ // DFS to find longest path
104
+ let maxPath = [];
105
+ let maxLatency = 0;
106
+ const dfs = (nodeId, path, latency) => {
107
+ path.push(nodeId);
108
+ latency += this.nodes.get(nodeId)?.avgLatency || 0;
109
+ const outgoing = this.getEdges(nodeId);
110
+ if (outgoing.length === 0) {
111
+ if (latency > maxLatency) {
112
+ maxLatency = latency;
113
+ maxPath = [...path];
114
+ }
115
+ }
116
+ else {
117
+ outgoing.forEach(edge => {
118
+ dfs(edge.to, path, latency + edge.avgLatency);
119
+ });
120
+ }
121
+ path.pop();
122
+ };
123
+ roots.forEach(root => dfs(root, [], 0));
124
+ return maxPath.length > 0 ? { path: maxPath, totalLatency: maxLatency } : null;
125
+ }
126
+ /**
127
+ * Get unhealthy dependencies
128
+ */
129
+ getUnhealthyDependencies() {
130
+ return Array.from(this.nodes.values()).filter(n => n.status !== 'healthy');
131
+ }
132
+ /**
133
+ * Get top slow dependencies
134
+ */
135
+ getTopSlowDependencies(limit = 10) {
136
+ return Array.from(this.nodes.values())
137
+ .sort((a, b) => b.avgLatency - a.avgLatency)
138
+ .slice(0, limit);
139
+ }
140
+ /**
141
+ * Get top error-prone dependencies
142
+ */
143
+ getTopErrorProneDependencies(limit = 10) {
144
+ return Array.from(this.nodes.values())
145
+ .filter(n => n.requestCount > 0)
146
+ .sort((a, b) => b.errorRate - a.errorRate)
147
+ .slice(0, limit);
148
+ }
149
+ /**
150
+ * Clear graph
151
+ */
152
+ clear() {
153
+ this.nodes.clear();
154
+ this.edges.clear();
155
+ }
156
+ updateNode(id, name, type, delta) {
157
+ const existing = this.nodes.get(id);
158
+ if (!existing) {
159
+ this.nodes.set(id, {
160
+ id,
161
+ name,
162
+ type,
163
+ status: 'healthy',
164
+ avgLatency: delta.avgLatency,
165
+ errorRate: delta.errorRate / delta.requestCount,
166
+ requestCount: delta.requestCount,
167
+ });
168
+ }
169
+ else {
170
+ // Exponential moving average
171
+ const alpha = 0.3;
172
+ existing.avgLatency = existing.avgLatency * (1 - alpha) + delta.avgLatency * alpha;
173
+ existing.requestCount += delta.requestCount;
174
+ const totalErrors = existing.errorRate * (existing.requestCount - delta.requestCount) + delta.errorRate;
175
+ existing.errorRate = totalErrors / existing.requestCount;
176
+ // Update status based on error rate
177
+ existing.status = this.calculateStatus(existing.errorRate);
178
+ }
179
+ }
180
+ updateEdge(from, to, delta) {
181
+ if (!this.edges.has(from)) {
182
+ this.edges.set(from, new Map());
183
+ }
184
+ const targetMap = this.edges.get(from);
185
+ const existing = targetMap.get(to);
186
+ if (!existing) {
187
+ targetMap.set(to, {
188
+ from,
189
+ to,
190
+ callCount: delta.callCount,
191
+ avgLatency: delta.avgLatency,
192
+ errorCount: delta.errorCount,
193
+ });
194
+ }
195
+ else {
196
+ // Exponential moving average
197
+ const alpha = 0.3;
198
+ existing.callCount += delta.callCount;
199
+ existing.avgLatency = existing.avgLatency * (1 - alpha) + delta.avgLatency * alpha;
200
+ existing.errorCount += delta.errorCount;
201
+ }
202
+ }
203
+ calculateStatus(errorRate) {
204
+ if (errorRate >= 0.5)
205
+ return 'down';
206
+ if (errorRate >= 0.1)
207
+ return 'degraded';
208
+ return 'healthy';
209
+ }
210
+ getServiceName(service) {
211
+ const names = {
212
+ mongo: 'MongoDB',
213
+ mysql: 'MySQL',
214
+ postgres: 'PostgreSQL',
215
+ redis: 'Redis',
216
+ axios: 'HTTP Client',
217
+ fetch: 'Fetch API',
218
+ stripe: 'Stripe',
219
+ razorpay: 'Razorpay',
220
+ sendgrid: 'SendGrid',
221
+ twilio: 'Twilio',
222
+ external: 'External API',
223
+ internal: 'Internal',
224
+ unknown: 'Unknown',
225
+ };
226
+ return names[service] || service;
227
+ }
228
+ }
229
+ exports.DependencyGraphManager = DependencyGraphManager;
230
+ /**
231
+ * Visualize dependency graph as ASCII (for console)
232
+ */
233
+ function visualizeDependencyGraph(graph) {
234
+ const lines = [];
235
+ lines.push('┌─ Dependency Graph ────────────────────────────┐');
236
+ graph.nodes.forEach(node => {
237
+ const statusIcon = node.status === 'healthy' ? '✔' : node.status === 'degraded' ? '⚠' : '✖';
238
+ lines.push(`│ ${statusIcon} ${node.name.padEnd(20)} ${node.avgLatency.toFixed(0)}ms ${(node.errorRate * 100).toFixed(1)}% errors`);
239
+ // Show outgoing edges
240
+ const edges = graph.edges.filter(e => e.from === node.id);
241
+ edges.forEach(edge => {
242
+ const targetNode = graph.nodes.find(n => n.id === edge.to);
243
+ if (targetNode) {
244
+ lines.push(`│ └─→ ${targetNode.name} (${edge.callCount} calls)`);
245
+ }
246
+ });
247
+ });
248
+ lines.push('└─────────────────────────────────────────────────┘');
249
+ return lines.join('\n');
250
+ }
251
+ //# sourceMappingURL=DependencyGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyGraph.js","sourceRoot":"","sources":["../../../src/core/DependencyGraph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ // ─────────────────────────────────────────────────────────────
3
+ // flow-debugger — Distributed Tracing (W3C Trace Context)
4
+ // Enables multi-service tracing with standard propagation
5
+ // ─────────────────────────────────────────────────────────────
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SpanManager = exports.DistributedTracer = void 0;
8
+ /**
9
+ * W3C Trace Context implementation
10
+ * Format: traceparent: 00-{traceId}-{spanId}-{traceFlags}
11
+ * https://www.w3.org/TR/trace-context/
12
+ */
13
+ class DistributedTracer {
14
+ /**
15
+ * Generate a 128-bit trace ID (32 hex chars)
16
+ */
17
+ static generateTraceId() {
18
+ const high = this.randomHex(16);
19
+ const low = this.randomHex(16);
20
+ return high + low;
21
+ }
22
+ /**
23
+ * Generate a 64-bit span ID (16 hex chars)
24
+ */
25
+ static generateSpanId() {
26
+ return this.randomHex(16);
27
+ }
28
+ static randomHex(length) {
29
+ const bytes = new Uint8Array(length / 2);
30
+ crypto.getRandomValues(bytes);
31
+ return Array.from(bytes)
32
+ .map(b => b.toString(16).padStart(2, '0'))
33
+ .join('');
34
+ }
35
+ /**
36
+ * Create traceparent header from context
37
+ */
38
+ static createTraceparent(context) {
39
+ const traceFlags = context.sampled ? this.TRACE_FLAG_SAMPLED : this.TRACE_FLAG_NOT_SAMPLED;
40
+ return `${this.TRACEPARENT_VERSION}-${context.traceId}-${context.spanId}-${traceFlags}`;
41
+ }
42
+ /**
43
+ * Parse traceparent header into context
44
+ */
45
+ static parseTraceparent(traceparent) {
46
+ try {
47
+ const parts = traceparent.split('-');
48
+ if (parts.length !== 4)
49
+ return null;
50
+ const [version, traceId, spanId, traceFlags] = parts;
51
+ if (version !== '00')
52
+ return null;
53
+ return {
54
+ traceId,
55
+ spanId,
56
+ parentSpanId: undefined,
57
+ sampled: traceFlags === '01',
58
+ };
59
+ }
60
+ catch {
61
+ return null;
62
+ }
63
+ }
64
+ /**
65
+ * Create tracestate header for vendor-specific data
66
+ */
67
+ static createTracestate(vendorData) {
68
+ return Object.entries(vendorData)
69
+ .map(([key, value]) => `${key}=${value}`)
70
+ .join(',');
71
+ }
72
+ /**
73
+ * Parse tracestate header
74
+ */
75
+ static parseTracestate(tracestate) {
76
+ try {
77
+ return tracestate.split(',').reduce((acc, pair) => {
78
+ const [key, value] = pair.split('=');
79
+ if (key && value) {
80
+ acc[key.trim()] = value.trim();
81
+ }
82
+ return acc;
83
+ }, {});
84
+ }
85
+ catch {
86
+ return {};
87
+ }
88
+ }
89
+ /**
90
+ * Extract context from incoming headers
91
+ */
92
+ static extractContext(headers) {
93
+ const traceparent = headers['traceparent'] || headers['Traceparent'] || headers['TRACEPARENT'];
94
+ if (!traceparent || typeof traceparent !== 'string')
95
+ return null;
96
+ const context = this.parseTraceparent(traceparent);
97
+ if (!context)
98
+ return null;
99
+ // Extract tracestate if present
100
+ const tracestate = headers['tracestate'] || headers['Tracestate'] || headers['TRACESTATE'];
101
+ if (tracestate && typeof tracestate === 'string') {
102
+ context.tracestate = this.parseTracestate(tracestate);
103
+ }
104
+ return context;
105
+ }
106
+ /**
107
+ * Inject context into outgoing headers
108
+ */
109
+ static injectContext(context, headers) {
110
+ headers['traceparent'] = this.createTraceparent(context);
111
+ if (context.tracestate && Object.keys(context.tracestate).length > 0) {
112
+ headers['tracestate'] = this.createTracestate(context.tracestate);
113
+ }
114
+ }
115
+ /**
116
+ * Create a new span context for child operations
117
+ */
118
+ static createChildContext(parent) {
119
+ return {
120
+ traceId: parent.traceId,
121
+ spanId: this.generateSpanId(),
122
+ parentSpanId: parent.spanId,
123
+ sampled: parent.sampled,
124
+ tracestate: parent.tracestate ? { ...parent.tracestate } : undefined,
125
+ };
126
+ }
127
+ /**
128
+ * Create a root context for new traces
129
+ */
130
+ static createRootContext(sampled = true) {
131
+ return {
132
+ traceId: this.generateTraceId(),
133
+ spanId: this.generateSpanId(),
134
+ parentSpanId: undefined,
135
+ sampled,
136
+ };
137
+ }
138
+ }
139
+ exports.DistributedTracer = DistributedTracer;
140
+ DistributedTracer.TRACEPARENT_VERSION = '00';
141
+ DistributedTracer.TRACE_FLAG_SAMPLED = '01';
142
+ DistributedTracer.TRACE_FLAG_NOT_SAMPLED = '00';
143
+ /**
144
+ * Span manager for nested span tracking
145
+ */
146
+ class SpanManager {
147
+ constructor() {
148
+ this.spans = new Map();
149
+ }
150
+ /**
151
+ * Start a new span
152
+ */
153
+ startSpan(name, context, parentSpanId) {
154
+ const span = {
155
+ id: context.spanId,
156
+ traceId: context.traceId,
157
+ parentSpanId: parentSpanId || context.parentSpanId,
158
+ name,
159
+ startTime: performance.now(),
160
+ endTime: undefined,
161
+ duration: undefined,
162
+ status: 'pending',
163
+ attributes: {},
164
+ events: [],
165
+ context,
166
+ };
167
+ this.spans.set(span.id, span);
168
+ if (!this.rootSpanId && !parentSpanId) {
169
+ this.rootSpanId = span.id;
170
+ }
171
+ return span;
172
+ }
173
+ /**
174
+ * End a span
175
+ */
176
+ endSpan(spanId, status = 'success') {
177
+ const span = this.spans.get(spanId);
178
+ if (!span)
179
+ return null;
180
+ span.endTime = performance.now();
181
+ span.duration = span.endTime - span.startTime;
182
+ span.status = status;
183
+ return span;
184
+ }
185
+ /**
186
+ * Add attribute to a span
187
+ */
188
+ setAttribute(spanId, key, value) {
189
+ const span = this.spans.get(spanId);
190
+ if (span) {
191
+ span.attributes[key] = value;
192
+ }
193
+ }
194
+ /**
195
+ * Add event to a span
196
+ */
197
+ addEvent(spanId, name, attributes) {
198
+ const span = this.spans.get(spanId);
199
+ if (span) {
200
+ span.events.push({
201
+ name,
202
+ timestamp: performance.now(),
203
+ attributes,
204
+ });
205
+ }
206
+ }
207
+ /**
208
+ * Get span by ID
209
+ */
210
+ getSpan(spanId) {
211
+ return this.spans.get(spanId);
212
+ }
213
+ /**
214
+ * Get all spans in this trace
215
+ */
216
+ getAllSpans() {
217
+ return Array.from(this.spans.values());
218
+ }
219
+ /**
220
+ * Get span hierarchy (tree structure)
221
+ */
222
+ getSpanTree() {
223
+ const spans = this.getAllSpans();
224
+ const rootSpans = spans.filter(s => !s.parentSpanId);
225
+ const spanMap = new Map(spans.map(s => [s.id, { ...s, children: [] }]));
226
+ spans.forEach(span => {
227
+ if (span.parentSpanId) {
228
+ const parent = spanMap.get(span.parentSpanId);
229
+ if (parent) {
230
+ parent.children.push(spanMap.get(span.id));
231
+ }
232
+ }
233
+ });
234
+ return rootSpans.map(s => spanMap.get(s.id));
235
+ }
236
+ /**
237
+ * Clear all spans
238
+ */
239
+ clear() {
240
+ this.spans.clear();
241
+ this.rootSpanId = undefined;
242
+ }
243
+ }
244
+ exports.SpanManager = SpanManager;
245
+ //# sourceMappingURL=DistributedTracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DistributedTracing.js","sourceRoot":"","sources":["../../../src/core/DistributedTracing.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,0DAA0D;AAC1D,0DAA0D;AAC1D,gEAAgE;;;AAIhE;;;;GAIG;AACH,MAAa,iBAAiB;IAK1B;;OAEG;IACH,MAAM,CAAC,eAAe;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC/B,OAAO,IAAI,GAAG,GAAG,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAEO,MAAM,CAAC,SAAS,CAAC,MAAc;QACnC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;aACnB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACzC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAqB;QAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;QAC3F,OAAO,GAAG,IAAI,CAAC,mBAAmB,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;IAC5F,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,WAAmB;QACvC,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEpC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;YACrD,IAAI,OAAO,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAElC,OAAO;gBACH,OAAO;gBACP,MAAM;gBACN,YAAY,EAAE,SAAS;gBACvB,OAAO,EAAE,UAAU,KAAK,IAAI;aAC/B,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,UAAkC;QACtD,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;aAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;aACxC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,UAAkB;QACrC,IAAI,CAAC;YACD,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBAC9C,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;oBACf,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnC,CAAC;gBACD,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,EAA4B,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,OAA2C;QAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;QAC/F,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAEjE,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,gCAAgC;QAChC,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;QAC3F,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC/C,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAqB,EAAE,OAA+B;QACvE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtE,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,MAAoB;QAC1C,OAAO;YACH,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE;YAC7B,YAAY,EAAE,MAAM,CAAC,MAAM;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;SACvE,CAAC;IACN,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAO,GAAG,IAAI;QACnC,OAAO;YACH,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE;YAC/B,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE;YAC7B,YAAY,EAAE,SAAS;YACvB,OAAO;SACV,CAAC;IACN,CAAC;;AAzIL,8CA0IC;AAzIkB,qCAAmB,GAAG,IAAI,CAAC;AAC3B,oCAAkB,GAAG,IAAI,CAAC;AAC1B,wCAAsB,GAAG,IAAI,CAAC;AAyIjD;;GAEG;AACH,MAAa,WAAW;IAAxB;QACY,UAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;IAgHjD,CAAC;IA7GG;;OAEG;IACH,SAAS,CACL,IAAY,EACZ,OAAqB,EACrB,YAAqB;QAErB,MAAM,IAAI,GAAS;YACf,EAAE,EAAE,OAAO,CAAC,MAAM;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,YAAY,EAAE,YAAY,IAAI,OAAO,CAAC,YAAY;YAClD,IAAI;YACJ,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE;YAC5B,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,SAAS;YACnB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,EAAE;YACV,OAAO;SACV,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC;QAC9B,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,MAAc,EAAE,SAA0C,SAAS;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAc,EAAE,GAAW,EAAE,KAAc;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACjC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAc,EAAE,IAAY,EAAE,UAAoC;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACb,IAAI;gBACJ,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE;gBAC5B,UAAU;aACb,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,MAAc;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,WAAW;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,WAAW;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QAElF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACjB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC9C,IAAI,MAAM,EAAE,CAAC;oBACT,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,CAAC;gBAChD,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAChC,CAAC;CACJ;AAjHD,kCAiHC"}