api-tests-coverage 1.0.13 → 1.0.15

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 (100) hide show
  1. package/dist/src/pipeline/confidence.d.ts +70 -0
  2. package/dist/src/pipeline/confidence.d.ts.map +1 -0
  3. package/dist/src/pipeline/confidence.js +198 -0
  4. package/dist/src/pipeline/graph.d.ts +58 -0
  5. package/dist/src/pipeline/graph.d.ts.map +1 -0
  6. package/dist/src/pipeline/graph.js +199 -0
  7. package/dist/src/pipeline/index.d.ts +24 -0
  8. package/dist/src/pipeline/index.d.ts.map +1 -0
  9. package/dist/src/pipeline/index.js +41 -0
  10. package/dist/src/pipeline/orchestrator.d.ts +42 -0
  11. package/dist/src/pipeline/orchestrator.d.ts.map +1 -0
  12. package/dist/src/pipeline/orchestrator.js +115 -0
  13. package/dist/src/pipeline/stageInterface.d.ts +45 -0
  14. package/dist/src/pipeline/stageInterface.d.ts.map +1 -0
  15. package/dist/src/pipeline/stageInterface.js +17 -0
  16. package/dist/src/pipeline/stages/ast/abstractLayerTraversal.d.ts +38 -0
  17. package/dist/src/pipeline/stages/ast/abstractLayerTraversal.d.ts.map +1 -0
  18. package/dist/src/pipeline/stages/ast/abstractLayerTraversal.js +203 -0
  19. package/dist/src/pipeline/stages/ast/astStage.d.ts +19 -0
  20. package/dist/src/pipeline/stages/ast/astStage.d.ts.map +1 -0
  21. package/dist/src/pipeline/stages/ast/astStage.js +238 -0
  22. package/dist/src/pipeline/stages/ast/crossFileResolver.d.ts +23 -0
  23. package/dist/src/pipeline/stages/ast/crossFileResolver.d.ts.map +1 -0
  24. package/dist/src/pipeline/stages/ast/crossFileResolver.js +183 -0
  25. package/dist/src/pipeline/stages/ast/graphBuilder.d.ts +15 -0
  26. package/dist/src/pipeline/stages/ast/graphBuilder.d.ts.map +1 -0
  27. package/dist/src/pipeline/stages/ast/graphBuilder.js +268 -0
  28. package/dist/src/pipeline/stages/ast/importResolver.d.ts +22 -0
  29. package/dist/src/pipeline/stages/ast/importResolver.d.ts.map +1 -0
  30. package/dist/src/pipeline/stages/ast/importResolver.js +186 -0
  31. package/dist/src/pipeline/stages/ast/types.d.ts +85 -0
  32. package/dist/src/pipeline/stages/ast/types.d.ts.map +1 -0
  33. package/dist/src/pipeline/stages/ast/types.js +5 -0
  34. package/dist/src/pipeline/stages/dast/conflictEmitter.d.ts +25 -0
  35. package/dist/src/pipeline/stages/dast/conflictEmitter.d.ts.map +1 -0
  36. package/dist/src/pipeline/stages/dast/conflictEmitter.js +90 -0
  37. package/dist/src/pipeline/stages/dast/dastStage.d.ts +17 -0
  38. package/dist/src/pipeline/stages/dast/dastStage.d.ts.map +1 -0
  39. package/dist/src/pipeline/stages/dast/dastStage.js +203 -0
  40. package/dist/src/pipeline/stages/dast/types.d.ts +49 -0
  41. package/dist/src/pipeline/stages/dast/types.d.ts.map +1 -0
  42. package/dist/src/pipeline/stages/dast/types.js +9 -0
  43. package/dist/src/pipeline/stages/iast/iastStage.d.ts +17 -0
  44. package/dist/src/pipeline/stages/iast/iastStage.d.ts.map +1 -0
  45. package/dist/src/pipeline/stages/iast/iastStage.js +191 -0
  46. package/dist/src/pipeline/stages/iast/types.d.ts +48 -0
  47. package/dist/src/pipeline/stages/iast/types.d.ts.map +1 -0
  48. package/dist/src/pipeline/stages/iast/types.js +8 -0
  49. package/dist/src/pipeline/stages/merge/conflictDetector.d.ts +17 -0
  50. package/dist/src/pipeline/stages/merge/conflictDetector.d.ts.map +1 -0
  51. package/dist/src/pipeline/stages/merge/conflictDetector.js +60 -0
  52. package/dist/src/pipeline/stages/merge/coverageMappingBuilder.d.ts +15 -0
  53. package/dist/src/pipeline/stages/merge/coverageMappingBuilder.d.ts.map +1 -0
  54. package/dist/src/pipeline/stages/merge/coverageMappingBuilder.js +141 -0
  55. package/dist/src/pipeline/stages/merge/mergeRules.d.ts +39 -0
  56. package/dist/src/pipeline/stages/merge/mergeRules.d.ts.map +1 -0
  57. package/dist/src/pipeline/stages/merge/mergeRules.js +90 -0
  58. package/dist/src/pipeline/stages/merge/mergeStage.d.ts +20 -0
  59. package/dist/src/pipeline/stages/merge/mergeStage.d.ts.map +1 -0
  60. package/dist/src/pipeline/stages/merge/mergeStage.js +145 -0
  61. package/dist/src/pipeline/stages/merge/summaryComputer.d.ts +11 -0
  62. package/dist/src/pipeline/stages/merge/summaryComputer.d.ts.map +1 -0
  63. package/dist/src/pipeline/stages/merge/summaryComputer.js +46 -0
  64. package/dist/src/pipeline/stages/sca/ciDetector.d.ts +15 -0
  65. package/dist/src/pipeline/stages/sca/ciDetector.d.ts.map +1 -0
  66. package/dist/src/pipeline/stages/sca/ciDetector.js +87 -0
  67. package/dist/src/pipeline/stages/sca/dependencyClassification.d.ts +31 -0
  68. package/dist/src/pipeline/stages/sca/dependencyClassification.d.ts.map +1 -0
  69. package/dist/src/pipeline/stages/sca/dependencyClassification.js +296 -0
  70. package/dist/src/pipeline/stages/sca/dependencyDetector.d.ts +25 -0
  71. package/dist/src/pipeline/stages/sca/dependencyDetector.d.ts.map +1 -0
  72. package/dist/src/pipeline/stages/sca/dependencyDetector.js +416 -0
  73. package/dist/src/pipeline/stages/sca/scaStage.d.ts +21 -0
  74. package/dist/src/pipeline/stages/sca/scaStage.d.ts.map +1 -0
  75. package/dist/src/pipeline/stages/sca/scaStage.js +208 -0
  76. package/dist/src/pipeline/stages/sca/types.d.ts +61 -0
  77. package/dist/src/pipeline/stages/sca/types.d.ts.map +1 -0
  78. package/dist/src/pipeline/stages/sca/types.js +9 -0
  79. package/dist/src/pipeline/stages/tia/mockBoundaryDetector.d.ts +19 -0
  80. package/dist/src/pipeline/stages/tia/mockBoundaryDetector.d.ts.map +1 -0
  81. package/dist/src/pipeline/stages/tia/mockBoundaryDetector.js +118 -0
  82. package/dist/src/pipeline/stages/tia/parameterizedTestExpander.d.ts +20 -0
  83. package/dist/src/pipeline/stages/tia/parameterizedTestExpander.d.ts.map +1 -0
  84. package/dist/src/pipeline/stages/tia/parameterizedTestExpander.js +238 -0
  85. package/dist/src/pipeline/stages/tia/testEndpointMapper.d.ts +22 -0
  86. package/dist/src/pipeline/stages/tia/testEndpointMapper.d.ts.map +1 -0
  87. package/dist/src/pipeline/stages/tia/testEndpointMapper.js +134 -0
  88. package/dist/src/pipeline/stages/tia/testLayerClassifier.d.ts +16 -0
  89. package/dist/src/pipeline/stages/tia/testLayerClassifier.d.ts.map +1 -0
  90. package/dist/src/pipeline/stages/tia/testLayerClassifier.js +191 -0
  91. package/dist/src/pipeline/stages/tia/tiaStage.d.ts +20 -0
  92. package/dist/src/pipeline/stages/tia/tiaStage.d.ts.map +1 -0
  93. package/dist/src/pipeline/stages/tia/tiaStage.js +215 -0
  94. package/dist/src/pipeline/stages/tia/types.d.ts +52 -0
  95. package/dist/src/pipeline/stages/tia/types.d.ts.map +1 -0
  96. package/dist/src/pipeline/stages/tia/types.js +5 -0
  97. package/dist/src/pipeline/types.d.ts +128 -0
  98. package/dist/src/pipeline/types.d.ts.map +1 -0
  99. package/dist/src/pipeline/types.js +9 -0
  100. package/package.json +1 -1
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Confidence scoring for the Coverage Knowledge Graph.
3
+ *
4
+ * Implements all confidence rules from spec §10:
5
+ *
6
+ * | Evidence | Confidence |
7
+ * |-----------------------------------------------|------------|
8
+ * | AST only (no TIA link) | low |
9
+ * | AST + TIA | medium |
10
+ * | AST + TIA + (IAST or DAST) | high |
11
+ * | AST + TIA + IAST + DAST + assertion confirmed | verified |
12
+ * | Any mock-boundary on path | Cap medium |
13
+ * | Any resolution: partial | Cap medium |
14
+ * | Any url-resolution: symbolic | Cap medium |
15
+ * | Static-only mode (no IAST/DAST) | Cap medium |
16
+ */
17
+ import type { PipelineConfidence, ConfidenceEvidence } from './types';
18
+ import type { CoverageKnowledgeGraph } from './graph';
19
+ /**
20
+ * Compute the base confidence level from the evidence present.
21
+ * Does NOT apply caps — use `applyConfidenceCaps` for that.
22
+ */
23
+ export declare function computeBaseConfidence(evidence: ConfidenceEvidence): PipelineConfidence;
24
+ /**
25
+ * Apply all confidence caps based on evidence.
26
+ * Caps are applied after the base level is computed.
27
+ *
28
+ * | Condition | Cap |
29
+ * |------------------------------|---------|
30
+ * | Mock boundary on path | medium |
31
+ * | Partial resolution | medium |
32
+ * | Symbolic URL | medium |
33
+ * | Static-only mode | medium |
34
+ */
35
+ export declare function applyConfidenceCaps(baseLevel: PipelineConfidence, evidence: ConfidenceEvidence): PipelineConfidence;
36
+ /**
37
+ * Full confidence computation: base level + caps.
38
+ * This is the primary entry point for confidence scoring.
39
+ */
40
+ export declare function computeConfidence(evidence: ConfidenceEvidence): PipelineConfidence;
41
+ /**
42
+ * Cap a confidence level to at most `maxLevel`.
43
+ * Returns the minimum of `current` and `maxLevel`.
44
+ */
45
+ export declare function capConfidence(current: PipelineConfidence, maxLevel: PipelineConfidence): PipelineConfidence;
46
+ /**
47
+ * Compare two confidence levels.
48
+ * Returns negative if a < b, zero if equal, positive if a > b.
49
+ */
50
+ export declare function compareConfidence(a: PipelineConfidence, b: PipelineConfidence): number;
51
+ /**
52
+ * Return the minimum (weakest) confidence level from an array.
53
+ * Implements RULE-06: confidence reflects the worst contributor.
54
+ */
55
+ export declare function minConfidence(levels: PipelineConfidence[]): PipelineConfidence;
56
+ /**
57
+ * Check whether any node on a path in the graph is of type `mock-boundary`.
58
+ * Used to determine if a coverage path is mock-limited.
59
+ */
60
+ export declare function hasMockBoundaryOnPath(graph: CoverageKnowledgeGraph, pathNodeIds: string[]): boolean;
61
+ /**
62
+ * Check whether any node on a path has `resolution: partial` in its metadata.
63
+ */
64
+ export declare function hasPartialResolution(graph: CoverageKnowledgeGraph, pathNodeIds: string[]): boolean;
65
+ /**
66
+ * Build a ConfidenceEvidence object from a coverage path in the graph.
67
+ * Inspects the nodes and their source stages to determine what evidence exists.
68
+ */
69
+ export declare function buildConfidenceEvidence(graph: CoverageKnowledgeGraph, pathNodeIds: string[], isStaticOnlyMode: boolean): ConfidenceEvidence;
70
+ //# sourceMappingURL=confidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidence.d.ts","sourceRoot":"","sources":["../../../src/pipeline/confidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAa,MAAM,SAAS,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAYtD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,kBAAkB,CAwBtF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,kBAAkB,EAC7B,QAAQ,EAAE,kBAAkB,GAC3B,kBAAkB,CAoBpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,kBAAkB,CAGlF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,kBAAkB,GAC3B,kBAAkB,CAIpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,kBAAkB,EACrB,CAAC,EAAE,kBAAkB,GACpB,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,CAS9E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,sBAAsB,EAC7B,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAMT;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,sBAAsB,EAC7B,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAMT;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,sBAAsB,EAC7B,WAAW,EAAE,MAAM,EAAE,EACrB,gBAAgB,EAAE,OAAO,GACxB,kBAAkB,CA6CpB"}
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ /**
3
+ * Confidence scoring for the Coverage Knowledge Graph.
4
+ *
5
+ * Implements all confidence rules from spec §10:
6
+ *
7
+ * | Evidence | Confidence |
8
+ * |-----------------------------------------------|------------|
9
+ * | AST only (no TIA link) | low |
10
+ * | AST + TIA | medium |
11
+ * | AST + TIA + (IAST or DAST) | high |
12
+ * | AST + TIA + IAST + DAST + assertion confirmed | verified |
13
+ * | Any mock-boundary on path | Cap medium |
14
+ * | Any resolution: partial | Cap medium |
15
+ * | Any url-resolution: symbolic | Cap medium |
16
+ * | Static-only mode (no IAST/DAST) | Cap medium |
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.computeBaseConfidence = computeBaseConfidence;
20
+ exports.applyConfidenceCaps = applyConfidenceCaps;
21
+ exports.computeConfidence = computeConfidence;
22
+ exports.capConfidence = capConfidence;
23
+ exports.compareConfidence = compareConfidence;
24
+ exports.minConfidence = minConfidence;
25
+ exports.hasMockBoundaryOnPath = hasMockBoundaryOnPath;
26
+ exports.hasPartialResolution = hasPartialResolution;
27
+ exports.buildConfidenceEvidence = buildConfidenceEvidence;
28
+ /**
29
+ * Ordered confidence levels from lowest to highest.
30
+ * Used for comparison and capping operations.
31
+ */
32
+ const CONFIDENCE_ORDER = ['low', 'medium', 'high', 'verified'];
33
+ function confidenceRank(level) {
34
+ return CONFIDENCE_ORDER.indexOf(level);
35
+ }
36
+ /**
37
+ * Compute the base confidence level from the evidence present.
38
+ * Does NOT apply caps — use `applyConfidenceCaps` for that.
39
+ */
40
+ function computeBaseConfidence(evidence) {
41
+ const hasAst = evidence.sourceStages.includes('ast');
42
+ const hasTia = evidence.sourceStages.includes('tia');
43
+ const hasIast = evidence.hasIastConfirmation;
44
+ const hasDast = evidence.hasDastConfirmation;
45
+ const hasAssertion = evidence.hasAssertionConfirmation;
46
+ // Highest: all stages + assertion confirmed
47
+ if (hasAst && hasTia && hasIast && hasDast && hasAssertion) {
48
+ return 'verified';
49
+ }
50
+ // High: static + at least one runtime stage
51
+ if (hasAst && hasTia && (hasIast || hasDast)) {
52
+ return 'high';
53
+ }
54
+ // Medium: AST + TIA agree
55
+ if (hasAst && hasTia) {
56
+ return 'medium';
57
+ }
58
+ // Low: AST only or no evidence
59
+ return 'low';
60
+ }
61
+ /**
62
+ * Apply all confidence caps based on evidence.
63
+ * Caps are applied after the base level is computed.
64
+ *
65
+ * | Condition | Cap |
66
+ * |------------------------------|---------|
67
+ * | Mock boundary on path | medium |
68
+ * | Partial resolution | medium |
69
+ * | Symbolic URL | medium |
70
+ * | Static-only mode | medium |
71
+ */
72
+ function applyConfidenceCaps(baseLevel, evidence) {
73
+ let capped = baseLevel;
74
+ if (evidence.hasMockBoundary) {
75
+ capped = capConfidence(capped, 'medium');
76
+ }
77
+ if (evidence.hasPartialResolution) {
78
+ capped = capConfidence(capped, 'medium');
79
+ }
80
+ if (evidence.hasSymbolicUrl) {
81
+ capped = capConfidence(capped, 'medium');
82
+ }
83
+ if (evidence.isStaticOnlyMode) {
84
+ capped = capConfidence(capped, 'medium');
85
+ }
86
+ return capped;
87
+ }
88
+ /**
89
+ * Full confidence computation: base level + caps.
90
+ * This is the primary entry point for confidence scoring.
91
+ */
92
+ function computeConfidence(evidence) {
93
+ const base = computeBaseConfidence(evidence);
94
+ return applyConfidenceCaps(base, evidence);
95
+ }
96
+ /**
97
+ * Cap a confidence level to at most `maxLevel`.
98
+ * Returns the minimum of `current` and `maxLevel`.
99
+ */
100
+ function capConfidence(current, maxLevel) {
101
+ const currentRank = confidenceRank(current);
102
+ const maxRank = confidenceRank(maxLevel);
103
+ return currentRank <= maxRank ? current : maxLevel;
104
+ }
105
+ /**
106
+ * Compare two confidence levels.
107
+ * Returns negative if a < b, zero if equal, positive if a > b.
108
+ */
109
+ function compareConfidence(a, b) {
110
+ return confidenceRank(a) - confidenceRank(b);
111
+ }
112
+ /**
113
+ * Return the minimum (weakest) confidence level from an array.
114
+ * Implements RULE-06: confidence reflects the worst contributor.
115
+ */
116
+ function minConfidence(levels) {
117
+ if (levels.length === 0)
118
+ return 'low';
119
+ let min = levels[0];
120
+ for (let i = 1; i < levels.length; i++) {
121
+ if (confidenceRank(levels[i]) < confidenceRank(min)) {
122
+ min = levels[i];
123
+ }
124
+ }
125
+ return min;
126
+ }
127
+ /**
128
+ * Check whether any node on a path in the graph is of type `mock-boundary`.
129
+ * Used to determine if a coverage path is mock-limited.
130
+ */
131
+ function hasMockBoundaryOnPath(graph, pathNodeIds) {
132
+ for (const nodeId of pathNodeIds) {
133
+ const node = graph.getNode(nodeId);
134
+ if ((node === null || node === void 0 ? void 0 : node.type) === 'mock-boundary')
135
+ return true;
136
+ }
137
+ return false;
138
+ }
139
+ /**
140
+ * Check whether any node on a path has `resolution: partial` in its metadata.
141
+ */
142
+ function hasPartialResolution(graph, pathNodeIds) {
143
+ var _a;
144
+ for (const nodeId of pathNodeIds) {
145
+ const node = graph.getNode(nodeId);
146
+ if (((_a = node === null || node === void 0 ? void 0 : node.metadata) === null || _a === void 0 ? void 0 : _a.resolution) === 'partial')
147
+ return true;
148
+ }
149
+ return false;
150
+ }
151
+ /**
152
+ * Build a ConfidenceEvidence object from a coverage path in the graph.
153
+ * Inspects the nodes and their source stages to determine what evidence exists.
154
+ */
155
+ function buildConfidenceEvidence(graph, pathNodeIds, isStaticOnlyMode) {
156
+ var _a, _b;
157
+ const sourceStages = new Set();
158
+ let hasIastConfirmation = false;
159
+ let hasDastConfirmation = false;
160
+ let hasAssertionConfirmation = false;
161
+ let hasMockBoundary = false;
162
+ let hasPartial = false;
163
+ let hasSymbolicUrl = false;
164
+ for (const nodeId of pathNodeIds) {
165
+ const node = graph.getNode(nodeId);
166
+ if (!node)
167
+ continue;
168
+ sourceStages.add(node.sourceStage);
169
+ if (node.type === 'runtime-event' && node.sourceStage === 'iast') {
170
+ hasIastConfirmation = true;
171
+ }
172
+ if (node.sourceStage === 'dast') {
173
+ hasDastConfirmation = true;
174
+ }
175
+ if (node.type === 'assertion') {
176
+ hasAssertionConfirmation = true;
177
+ }
178
+ if (node.type === 'mock-boundary') {
179
+ hasMockBoundary = true;
180
+ }
181
+ if (((_a = node.metadata) === null || _a === void 0 ? void 0 : _a.resolution) === 'partial') {
182
+ hasPartial = true;
183
+ }
184
+ if (((_b = node.metadata) === null || _b === void 0 ? void 0 : _b.urlResolution) === 'symbolic') {
185
+ hasSymbolicUrl = true;
186
+ }
187
+ }
188
+ return {
189
+ sourceStages: Array.from(sourceStages),
190
+ hasIastConfirmation,
191
+ hasDastConfirmation,
192
+ hasAssertionConfirmation,
193
+ hasMockBoundary,
194
+ hasPartialResolution: hasPartial,
195
+ hasSymbolicUrl,
196
+ isStaticOnlyMode,
197
+ };
198
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Coverage Knowledge Graph — the central data structure for the pipeline.
3
+ *
4
+ * Stores typed nodes and edges accumulated across all 6 pipeline stages.
5
+ * Provides lookup, traversal, merge, and serialization operations.
6
+ */
7
+ import type { GraphNode, GraphEdge, GraphNodeType, GraphEdgeType, ConflictNode, StageName } from './types';
8
+ export declare class CoverageKnowledgeGraph {
9
+ private nodes;
10
+ private edges;
11
+ addNode(node: GraphNode): void;
12
+ getNode(id: string): GraphNode | undefined;
13
+ hasNode(id: string): boolean;
14
+ removeNode(id: string): boolean;
15
+ getNodesByType(type: GraphNodeType): GraphNode[];
16
+ getNodesByStage(stage: StageName): GraphNode[];
17
+ getAllNodes(): GraphNode[];
18
+ get nodeCount(): number;
19
+ addEdge(edge: GraphEdge): void;
20
+ getEdge(id: string): GraphEdge | undefined;
21
+ hasEdge(id: string): boolean;
22
+ removeEdge(id: string): boolean;
23
+ /** Get all edges originating from a given node. */
24
+ getEdgesFrom(nodeId: string): GraphEdge[];
25
+ /** Get all edges pointing to a given node. */
26
+ getEdgesTo(nodeId: string): GraphEdge[];
27
+ /** Get all edges between two specific nodes (in either direction). */
28
+ getEdgesBetween(nodeIdA: string, nodeIdB: string): GraphEdge[];
29
+ /** Get all edges of a specific type. */
30
+ getEdgesByType(type: GraphEdgeType): GraphEdge[];
31
+ getAllEdges(): GraphEdge[];
32
+ get edgeCount(): number;
33
+ /**
34
+ * Get all nodes reachable from `startId` by following edges of the given types.
35
+ * BFS traversal, returns nodes in visit order. Cycle-safe.
36
+ */
37
+ getReachableNodes(startId: string, edgeTypes?: GraphEdgeType[]): GraphNode[];
38
+ /**
39
+ * Check whether a path from `startId` to `endId` passes through any node
40
+ * of the given type. Used by confidence scoring to detect mock boundaries.
41
+ */
42
+ hasNodeTypeOnPath(startId: string, endId: string, nodeType: GraphNodeType): boolean;
43
+ /**
44
+ * Merge another graph into this one. Returns conflicts for any nodes
45
+ * that exist in both graphs with different types (RULE: stage-disagreement).
46
+ */
47
+ merge(other: CoverageKnowledgeGraph): ConflictNode[];
48
+ toSerializable(): {
49
+ nodes: GraphNode[];
50
+ edges: GraphEdge[];
51
+ };
52
+ static fromSerializable(data: {
53
+ nodes: GraphNode[];
54
+ edges: GraphEdge[];
55
+ }): CoverageKnowledgeGraph;
56
+ clear(): void;
57
+ }
58
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/pipeline/graph.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,aAAa,EACb,YAAY,EACZ,SAAS,EACV,MAAM,SAAS,CAAC;AAEjB,qBAAa,sBAAsB;IACjC,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,KAAK,CAAqC;IAIlD,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAI9B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,EAAE;IAIhD,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE;IAI9C,WAAW,IAAI,SAAS,EAAE;IAI1B,IAAI,SAAS,IAAI,MAAM,CAEtB;IAID,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAI9B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B,mDAAmD;IACnD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;IAIzC,8CAA8C;IAC9C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;IAIvC,sEAAsE;IACtE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE;IAQ9D,wCAAwC;IACxC,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,EAAE;IAIhD,WAAW,IAAI,SAAS,EAAE;IAI1B,IAAI,SAAS,IAAI,MAAM,CAEtB;IAID;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE;IA4B5E;;;OAGG;IACH,iBAAiB,CACf,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,GACtB,OAAO;IAiCV;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,sBAAsB,GAAG,YAAY,EAAE;IAwCpD,cAAc,IAAI;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,EAAE,CAAA;KAAE;IAO5D,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,EAAE,CAAA;KAAE,GAAG,sBAAsB;IAajG,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ /**
3
+ * Coverage Knowledge Graph — the central data structure for the pipeline.
4
+ *
5
+ * Stores typed nodes and edges accumulated across all 6 pipeline stages.
6
+ * Provides lookup, traversal, merge, and serialization operations.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CoverageKnowledgeGraph = void 0;
10
+ class CoverageKnowledgeGraph {
11
+ constructor() {
12
+ this.nodes = new Map();
13
+ this.edges = new Map();
14
+ }
15
+ // ─── Node operations ────────────────────────────────────────────────
16
+ addNode(node) {
17
+ this.nodes.set(node.id, node);
18
+ }
19
+ getNode(id) {
20
+ return this.nodes.get(id);
21
+ }
22
+ hasNode(id) {
23
+ return this.nodes.has(id);
24
+ }
25
+ removeNode(id) {
26
+ return this.nodes.delete(id);
27
+ }
28
+ getNodesByType(type) {
29
+ return Array.from(this.nodes.values()).filter((n) => n.type === type);
30
+ }
31
+ getNodesByStage(stage) {
32
+ return Array.from(this.nodes.values()).filter((n) => n.sourceStage === stage);
33
+ }
34
+ getAllNodes() {
35
+ return Array.from(this.nodes.values());
36
+ }
37
+ get nodeCount() {
38
+ return this.nodes.size;
39
+ }
40
+ // ─── Edge operations ────────────────────────────────────────────────
41
+ addEdge(edge) {
42
+ this.edges.set(edge.id, edge);
43
+ }
44
+ getEdge(id) {
45
+ return this.edges.get(id);
46
+ }
47
+ hasEdge(id) {
48
+ return this.edges.has(id);
49
+ }
50
+ removeEdge(id) {
51
+ return this.edges.delete(id);
52
+ }
53
+ /** Get all edges originating from a given node. */
54
+ getEdgesFrom(nodeId) {
55
+ return Array.from(this.edges.values()).filter((e) => e.sourceNodeId === nodeId);
56
+ }
57
+ /** Get all edges pointing to a given node. */
58
+ getEdgesTo(nodeId) {
59
+ return Array.from(this.edges.values()).filter((e) => e.targetNodeId === nodeId);
60
+ }
61
+ /** Get all edges between two specific nodes (in either direction). */
62
+ getEdgesBetween(nodeIdA, nodeIdB) {
63
+ return Array.from(this.edges.values()).filter((e) => (e.sourceNodeId === nodeIdA && e.targetNodeId === nodeIdB) ||
64
+ (e.sourceNodeId === nodeIdB && e.targetNodeId === nodeIdA));
65
+ }
66
+ /** Get all edges of a specific type. */
67
+ getEdgesByType(type) {
68
+ return Array.from(this.edges.values()).filter((e) => e.type === type);
69
+ }
70
+ getAllEdges() {
71
+ return Array.from(this.edges.values());
72
+ }
73
+ get edgeCount() {
74
+ return this.edges.size;
75
+ }
76
+ // ─── Traversal helpers ──────────────────────────────────────────────
77
+ /**
78
+ * Get all nodes reachable from `startId` by following edges of the given types.
79
+ * BFS traversal, returns nodes in visit order. Cycle-safe.
80
+ */
81
+ getReachableNodes(startId, edgeTypes) {
82
+ const visited = new Set();
83
+ const queue = [startId];
84
+ const result = [];
85
+ while (queue.length > 0) {
86
+ const currentId = queue.shift();
87
+ if (visited.has(currentId))
88
+ continue;
89
+ visited.add(currentId);
90
+ const node = this.nodes.get(currentId);
91
+ if (node && currentId !== startId) {
92
+ result.push(node);
93
+ }
94
+ const outEdges = this.getEdgesFrom(currentId);
95
+ for (const edge of outEdges) {
96
+ if (!edgeTypes || edgeTypes.includes(edge.type)) {
97
+ if (!visited.has(edge.targetNodeId)) {
98
+ queue.push(edge.targetNodeId);
99
+ }
100
+ }
101
+ }
102
+ }
103
+ return result;
104
+ }
105
+ /**
106
+ * Check whether a path from `startId` to `endId` passes through any node
107
+ * of the given type. Used by confidence scoring to detect mock boundaries.
108
+ */
109
+ hasNodeTypeOnPath(startId, endId, nodeType) {
110
+ const visited = new Set();
111
+ const queue = [[startId]];
112
+ while (queue.length > 0) {
113
+ const path = queue.shift();
114
+ const currentId = path[path.length - 1];
115
+ if (visited.has(currentId))
116
+ continue;
117
+ visited.add(currentId);
118
+ if (currentId === endId) {
119
+ // Check interior nodes (not start or end)
120
+ for (let i = 1; i < path.length - 1; i++) {
121
+ const node = this.nodes.get(path[i]);
122
+ if ((node === null || node === void 0 ? void 0 : node.type) === nodeType)
123
+ return true;
124
+ }
125
+ return false;
126
+ }
127
+ const outEdges = this.getEdgesFrom(currentId);
128
+ for (const edge of outEdges) {
129
+ if (!visited.has(edge.targetNodeId)) {
130
+ queue.push([...path, edge.targetNodeId]);
131
+ }
132
+ }
133
+ }
134
+ return false;
135
+ }
136
+ // ─── Merge ──────────────────────────────────────────────────────────
137
+ /**
138
+ * Merge another graph into this one. Returns conflicts for any nodes
139
+ * that exist in both graphs with different types (RULE: stage-disagreement).
140
+ */
141
+ merge(other) {
142
+ const conflicts = [];
143
+ let conflictCounter = 0;
144
+ for (const node of other.getAllNodes()) {
145
+ const existing = this.nodes.get(node.id);
146
+ if (existing) {
147
+ if (existing.type !== node.type) {
148
+ conflicts.push({
149
+ conflictId: `conflict-merge-${conflictCounter++}`,
150
+ nodeId: node.id,
151
+ type: 'stage-disagreement',
152
+ stages: [existing.sourceStage, node.sourceStage],
153
+ stageOutputs: {
154
+ [existing.sourceStage]: { type: existing.type, label: existing.label },
155
+ [node.sourceStage]: { type: node.type, label: node.label },
156
+ },
157
+ detail: `Node '${node.id}' has type '${existing.type}' from stage '${existing.sourceStage}' but type '${node.type}' from stage '${node.sourceStage}'`,
158
+ suggestedAction: `Review both stage outputs for node '${node.id}' and determine the correct classification. Check if the node serves dual roles (e.g., a service that also defines endpoints).`,
159
+ severity: 'warning',
160
+ });
161
+ }
162
+ // Merge metadata from the newer stage
163
+ existing.metadata = { ...existing.metadata, ...node.metadata };
164
+ }
165
+ else {
166
+ this.nodes.set(node.id, { ...node });
167
+ }
168
+ }
169
+ for (const edge of other.getAllEdges()) {
170
+ if (!this.edges.has(edge.id)) {
171
+ this.edges.set(edge.id, { ...edge });
172
+ }
173
+ }
174
+ return conflicts;
175
+ }
176
+ // ─── Serialization ──────────────────────────────────────────────────
177
+ toSerializable() {
178
+ return {
179
+ nodes: this.getAllNodes(),
180
+ edges: this.getAllEdges(),
181
+ };
182
+ }
183
+ static fromSerializable(data) {
184
+ const graph = new CoverageKnowledgeGraph();
185
+ for (const node of data.nodes) {
186
+ graph.addNode(node);
187
+ }
188
+ for (const edge of data.edges) {
189
+ graph.addEdge(edge);
190
+ }
191
+ return graph;
192
+ }
193
+ // ─── Clear ──────────────────────────────────────────────────────────
194
+ clear() {
195
+ this.nodes.clear();
196
+ this.edges.clear();
197
+ }
198
+ }
199
+ exports.CoverageKnowledgeGraph = CoverageKnowledgeGraph;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Pipeline module — Cascaded Multi-Stage Coverage Mapping Engine.
3
+ *
4
+ * Public API for the 6-stage pipeline: SCA → AST → TIA → IAST → DAST → Merge.
5
+ */
6
+ export type { PipelineConfidence, StageName, TestLayer, CoverageClass, AssertionSource, UrlResolution, ConflictType, ConflictSeverity, GraphNodeType, GraphEdgeType, GraphNode, GraphEdge, MockType, MockBoundary, ConflictNode, CoverageMapping, CoverageMappingItemType, StageDiagnostics, SkippedFile, PipelineSummary, PipelineSections, PipelineOutput, ConfidenceEvidence, } from './types';
7
+ export type { PipelineConfig, PipelineContext, PipelineStage } from './stageInterface';
8
+ export { DEFAULT_PIPELINE_CONFIG } from './stageInterface';
9
+ export { CoverageKnowledgeGraph } from './graph';
10
+ export { computeConfidence, computeBaseConfidence, applyConfidenceCaps, capConfidence, compareConfidence, minConfidence, hasMockBoundaryOnPath, hasPartialResolution, buildConfidenceEvidence, } from './confidence';
11
+ export { runPipeline, createPipelineContext } from './orchestrator';
12
+ export type { PipelineRunOptions, PipelineRunResult } from './orchestrator';
13
+ export { ScaStage } from './stages/sca/scaStage';
14
+ export { AstStage } from './stages/ast/astStage';
15
+ export { TiaStage } from './stages/tia/tiaStage';
16
+ export { IastStage } from './stages/iast/iastStage';
17
+ export { DastStage } from './stages/dast/dastStage';
18
+ export { MergeStage } from './stages/merge/mergeStage';
19
+ export type { ScaOutput } from './stages/sca/types';
20
+ export type { AstStageOutput } from './stages/ast/types';
21
+ export type { TiaOutput } from './stages/tia/types';
22
+ export type { IastOutput, IastEvent } from './stages/iast/types';
23
+ export type { DastOutput, DastProbeResult } from './stages/dast/types';
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,aAAa,EACb,eAAe,EACf,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,SAAS,EACT,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAG3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAGjD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACpE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG5E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGvD,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACjE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ /**
3
+ * Pipeline module — Cascaded Multi-Stage Coverage Mapping Engine.
4
+ *
5
+ * Public API for the 6-stage pipeline: SCA → AST → TIA → IAST → DAST → Merge.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.MergeStage = exports.DastStage = exports.IastStage = exports.TiaStage = exports.AstStage = exports.ScaStage = exports.createPipelineContext = exports.runPipeline = exports.buildConfidenceEvidence = exports.hasPartialResolution = exports.hasMockBoundaryOnPath = exports.minConfidence = exports.compareConfidence = exports.capConfidence = exports.applyConfidenceCaps = exports.computeBaseConfidence = exports.computeConfidence = exports.CoverageKnowledgeGraph = exports.DEFAULT_PIPELINE_CONFIG = void 0;
9
+ var stageInterface_1 = require("./stageInterface");
10
+ Object.defineProperty(exports, "DEFAULT_PIPELINE_CONFIG", { enumerable: true, get: function () { return stageInterface_1.DEFAULT_PIPELINE_CONFIG; } });
11
+ // ─── Graph ───────────────────────────────────────────────────────────────────
12
+ var graph_1 = require("./graph");
13
+ Object.defineProperty(exports, "CoverageKnowledgeGraph", { enumerable: true, get: function () { return graph_1.CoverageKnowledgeGraph; } });
14
+ // ─── Confidence ──────────────────────────────────────────────────────────────
15
+ var confidence_1 = require("./confidence");
16
+ Object.defineProperty(exports, "computeConfidence", { enumerable: true, get: function () { return confidence_1.computeConfidence; } });
17
+ Object.defineProperty(exports, "computeBaseConfidence", { enumerable: true, get: function () { return confidence_1.computeBaseConfidence; } });
18
+ Object.defineProperty(exports, "applyConfidenceCaps", { enumerable: true, get: function () { return confidence_1.applyConfidenceCaps; } });
19
+ Object.defineProperty(exports, "capConfidence", { enumerable: true, get: function () { return confidence_1.capConfidence; } });
20
+ Object.defineProperty(exports, "compareConfidence", { enumerable: true, get: function () { return confidence_1.compareConfidence; } });
21
+ Object.defineProperty(exports, "minConfidence", { enumerable: true, get: function () { return confidence_1.minConfidence; } });
22
+ Object.defineProperty(exports, "hasMockBoundaryOnPath", { enumerable: true, get: function () { return confidence_1.hasMockBoundaryOnPath; } });
23
+ Object.defineProperty(exports, "hasPartialResolution", { enumerable: true, get: function () { return confidence_1.hasPartialResolution; } });
24
+ Object.defineProperty(exports, "buildConfidenceEvidence", { enumerable: true, get: function () { return confidence_1.buildConfidenceEvidence; } });
25
+ // ─── Orchestrator ────────────────────────────────────────────────────────────
26
+ var orchestrator_1 = require("./orchestrator");
27
+ Object.defineProperty(exports, "runPipeline", { enumerable: true, get: function () { return orchestrator_1.runPipeline; } });
28
+ Object.defineProperty(exports, "createPipelineContext", { enumerable: true, get: function () { return orchestrator_1.createPipelineContext; } });
29
+ // ─── Stage classes ───────────────────────────────────────────────────────────
30
+ var scaStage_1 = require("./stages/sca/scaStage");
31
+ Object.defineProperty(exports, "ScaStage", { enumerable: true, get: function () { return scaStage_1.ScaStage; } });
32
+ var astStage_1 = require("./stages/ast/astStage");
33
+ Object.defineProperty(exports, "AstStage", { enumerable: true, get: function () { return astStage_1.AstStage; } });
34
+ var tiaStage_1 = require("./stages/tia/tiaStage");
35
+ Object.defineProperty(exports, "TiaStage", { enumerable: true, get: function () { return tiaStage_1.TiaStage; } });
36
+ var iastStage_1 = require("./stages/iast/iastStage");
37
+ Object.defineProperty(exports, "IastStage", { enumerable: true, get: function () { return iastStage_1.IastStage; } });
38
+ var dastStage_1 = require("./stages/dast/dastStage");
39
+ Object.defineProperty(exports, "DastStage", { enumerable: true, get: function () { return dastStage_1.DastStage; } });
40
+ var mergeStage_1 = require("./stages/merge/mergeStage");
41
+ Object.defineProperty(exports, "MergeStage", { enumerable: true, get: function () { return mergeStage_1.MergeStage; } });
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Pipeline orchestrator — chains the 6 stages (SCA → AST → TIA → IAST → DAST → Merge)
3
+ * and executes them in sequence, threading the PipelineContext through each stage.
4
+ *
5
+ * Optional stages (IAST, DAST) are skipped gracefully when disabled or when
6
+ * their data files are missing. The orchestrator catches per-stage errors
7
+ * and records them in diagnostics (RULE-02: never skip a file entirely on error).
8
+ */
9
+ import type { PipelineConfig, PipelineContext } from './stageInterface';
10
+ import type { PipelineOutput, StageName } from './types';
11
+ /**
12
+ * Options for running the pipeline.
13
+ */
14
+ export interface PipelineRunOptions {
15
+ /** Project root directory */
16
+ projectRoot: string;
17
+ /** Pipeline configuration (partial — defaults are merged) */
18
+ config?: Partial<Omit<PipelineConfig, 'projectRoot'>>;
19
+ /** If true, suppress console output */
20
+ silent?: boolean;
21
+ }
22
+ /**
23
+ * Result of a pipeline run.
24
+ */
25
+ export interface PipelineRunResult {
26
+ output: PipelineOutput;
27
+ context: PipelineContext;
28
+ durationMs: number;
29
+ stagesDurationMs: Record<StageName, number>;
30
+ }
31
+ /**
32
+ * Run the full 6-stage coverage pipeline.
33
+ *
34
+ * @param options - Pipeline run options
35
+ * @returns PipelineRunResult with the final output, context, and timing information
36
+ */
37
+ export declare function runPipeline(options: PipelineRunOptions): Promise<PipelineRunResult>;
38
+ /**
39
+ * Create a pipeline context for testing or manual usage.
40
+ */
41
+ export declare function createPipelineContext(projectRoot: string, configOverrides?: Partial<Omit<PipelineConfig, 'projectRoot'>>): PipelineContext;
42
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/pipeline/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAiB,MAAM,kBAAkB,CAAC;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAoB,MAAM,SAAS,CAAC;AAU3E;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IACtD,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,eAAe,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoFzF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,eAAe,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,GAC7D,eAAe,CAcjB"}