api-tests-coverage 1.0.13 → 1.0.14

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,191 @@
1
+ "use strict";
2
+ /**
3
+ * Test layer classifier — classifies test files into 7 layers:
4
+ * unit, component, integration, api, e2e, performance, security.
5
+ *
6
+ * Uses multiple signals: directory patterns, naming patterns,
7
+ * framework annotations, and import analysis.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.classifyTestLayer = classifyTestLayer;
44
+ const path = __importStar(require("path"));
45
+ const CLASSIFICATION_RULES = [
46
+ {
47
+ layer: 'e2e',
48
+ directoryPatterns: [/\be2e\b/i, /\bcypress\b/i, /\bplaywright\b/i, /\bselenium\b/i, /\bfunctional\b/i, /\bacceptance\b/i],
49
+ fileNamePatterns: [/\.e2e\./i, /\.feature$/i],
50
+ contentPatterns: [
51
+ /cy\.\w+/, // Cypress
52
+ /test\.goto|page\.\w+|playwright/i, // Playwright
53
+ /driver\.|WebDriver|selenium/i, // Selenium
54
+ /Given|When|Then|Scenario:/, // Cucumber/Gherkin
55
+ /browser\.\w+/i, // Browser automation
56
+ ],
57
+ priority: 90,
58
+ },
59
+ {
60
+ layer: 'performance',
61
+ directoryPatterns: [/\bperformance\b/i, /\bperf\b/i, /\bload\b/i, /\bstress\b/i, /\bbenchmark\b/i],
62
+ fileNamePatterns: [/\.perf\./i, /\.bench\./i, /\.load\./i, /\.k6\./i],
63
+ contentPatterns: [
64
+ /import\s.*k6/, // k6
65
+ /from\s+['"]k6/,
66
+ /io\.gatling/i, // Gatling
67
+ /locust|HttpUser|TaskSet/i, // Locust
68
+ /import\s.*artillery/i, // Artillery
69
+ /autocannon/i, // Autocannon
70
+ ],
71
+ priority: 85,
72
+ },
73
+ {
74
+ layer: 'security',
75
+ directoryPatterns: [/\bsecurity\b/i, /\bsec-test\b/i, /\bpentest\b/i],
76
+ fileNamePatterns: [/\.security\./i, /\.sec\./i],
77
+ contentPatterns: [
78
+ /@Tag\(["']security["']\)/i, // JUnit @Tag
79
+ /csrf|xss|sql.?injection|auth.?bypass/i,
80
+ /ZAP|OWASP|pentest/i,
81
+ ],
82
+ priority: 80,
83
+ },
84
+ {
85
+ layer: 'api',
86
+ directoryPatterns: [/\bapi\b/i, /\bapi[-_]?test\b/i, /\bcontract\b/i],
87
+ fileNamePatterns: [/\.api\./i, /\.contract\./i],
88
+ contentPatterns: [
89
+ /supertest|request\(app\)/i, // Supertest
90
+ /MockMvc|mockMvc/, // Spring MockMvc
91
+ /TestRestTemplate|restTemplate/, // Spring RestTemplate
92
+ /httpx\.AsyncClient/i, // Python httpx
93
+ /RestAssured|given\(\)\./i, // REST Assured
94
+ /\.pact\./i, // Pact
95
+ ],
96
+ priority: 70,
97
+ },
98
+ {
99
+ layer: 'integration',
100
+ directoryPatterns: [/\bintegration\b/i, /\bint[-_]?test\b/i],
101
+ fileNamePatterns: [/\.integration\./i, /\.int\./i, /IT\.java$/],
102
+ contentPatterns: [
103
+ /@SpringBootTest/, // Spring Boot integration test
104
+ /TestRestTemplate/, // Spring REST testing
105
+ /@Testcontainers/i, // Testcontainers
106
+ /@DataJpaTest/i, // Spring Data JPA
107
+ /@WebMvcTest/i, // Spring MVC test
108
+ /testcontainers/i, // Docker containers
109
+ ],
110
+ priority: 60,
111
+ },
112
+ {
113
+ layer: 'component',
114
+ directoryPatterns: [/\bcomponent\b/i],
115
+ fileNamePatterns: [/\.component\./i],
116
+ contentPatterns: [
117
+ /render\(|screen\./, // React Testing Library
118
+ /@testing-library/, // Testing Library
119
+ /shallow\(|mount\(/, // Enzyme
120
+ /ComponentFixture|TestBed/, // Angular testing
121
+ ],
122
+ priority: 50,
123
+ },
124
+ {
125
+ layer: 'unit',
126
+ directoryPatterns: [/\bunit\b/i],
127
+ fileNamePatterns: [/\.unit\./i],
128
+ contentPatterns: [
129
+ // Unit tests are the default; no specific content patterns needed
130
+ ],
131
+ priority: 10,
132
+ },
133
+ ];
134
+ /**
135
+ * Classify a test file into a layer.
136
+ *
137
+ * @param filePath - The test file path
138
+ * @param content - Optional file content for content-based classification
139
+ */
140
+ function classifyTestLayer(filePath, content) {
141
+ const signals = [];
142
+ const normalizedPath = filePath.replace(/\\/g, '/');
143
+ const basename = path.basename(filePath);
144
+ // Sort rules by priority (highest first)
145
+ const sortedRules = [...CLASSIFICATION_RULES].sort((a, b) => b.priority - a.priority);
146
+ for (const rule of sortedRules) {
147
+ let matchCount = 0;
148
+ // Check directory patterns
149
+ for (const pattern of rule.directoryPatterns) {
150
+ if (pattern.test(normalizedPath)) {
151
+ signals.push(`dir:${rule.layer}`);
152
+ matchCount++;
153
+ break;
154
+ }
155
+ }
156
+ // Check file name patterns
157
+ for (const pattern of rule.fileNamePatterns) {
158
+ if (pattern.test(basename)) {
159
+ signals.push(`name:${rule.layer}`);
160
+ matchCount++;
161
+ break;
162
+ }
163
+ }
164
+ // Check content patterns (if content is available)
165
+ if (content) {
166
+ for (const pattern of rule.contentPatterns) {
167
+ if (pattern.test(content)) {
168
+ signals.push(`content:${rule.layer}`);
169
+ matchCount++;
170
+ break;
171
+ }
172
+ }
173
+ }
174
+ if (matchCount > 0) {
175
+ const confidence = matchCount >= 2 ? 'high' : 'medium';
176
+ return {
177
+ filePath,
178
+ layer: rule.layer,
179
+ confidence,
180
+ signals,
181
+ };
182
+ }
183
+ }
184
+ // Default: unit test
185
+ return {
186
+ filePath,
187
+ layer: 'unit',
188
+ confidence: 'low',
189
+ signals: ['default:unit'],
190
+ };
191
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * TIA (Test Impact Analysis) stage — Stage 3 of the pipeline.
3
+ *
4
+ * Implements:
5
+ * - Test layer classification (7 layers)
6
+ * - Mock boundary detection
7
+ * - Parameterized test expansion
8
+ * - Test-to-endpoint mapping
9
+ *
10
+ * The TIA stage reads the AST stage output from context.stageOutputs
11
+ * to get semantic models and the knowledge graph.
12
+ */
13
+ import type { PipelineStage, PipelineContext } from '../../stageInterface';
14
+ import type { TiaOutput } from './types';
15
+ export declare class TiaStage implements PipelineStage<TiaOutput> {
16
+ readonly name: "tia";
17
+ readonly optional = false;
18
+ execute(context: PipelineContext): Promise<TiaOutput>;
19
+ }
20
+ //# sourceMappingURL=tiaStage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiaStage.d.ts","sourceRoot":"","sources":["../../../../../src/pipeline/stages/tia/tiaStage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAWzC,qBAAa,QAAS,YAAW,aAAa,CAAC,SAAS,CAAC;IACvD,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAC/B,QAAQ,CAAC,QAAQ,SAAS;IAEpB,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;CAmJ5D"}
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ /**
3
+ * TIA (Test Impact Analysis) stage — Stage 3 of the pipeline.
4
+ *
5
+ * Implements:
6
+ * - Test layer classification (7 layers)
7
+ * - Mock boundary detection
8
+ * - Parameterized test expansion
9
+ * - Test-to-endpoint mapping
10
+ *
11
+ * The TIA stage reads the AST stage output from context.stageOutputs
12
+ * to get semantic models and the knowledge graph.
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.TiaStage = void 0;
49
+ const testLayerClassifier_1 = require("./testLayerClassifier");
50
+ const mockBoundaryDetector_1 = require("./mockBoundaryDetector");
51
+ const parameterizedTestExpander_1 = require("./parameterizedTestExpander");
52
+ const testEndpointMapper_1 = require("./testEndpointMapper");
53
+ const fileClassifier_1 = require("../../../discovery/fileClassifier");
54
+ const fs = __importStar(require("fs"));
55
+ const path = __importStar(require("path"));
56
+ class TiaStage {
57
+ constructor() {
58
+ this.name = 'tia';
59
+ this.optional = false;
60
+ }
61
+ async execute(context) {
62
+ var _a;
63
+ const startTime = Date.now();
64
+ const filesScanned = [];
65
+ const filesSkipped = [];
66
+ // Get upstream outputs
67
+ const astOutput = context.stageOutputs.get('ast');
68
+ const scaOutput = context.stageOutputs.get('sca');
69
+ // Collect test files from AST models or discover
70
+ const testFiles = [];
71
+ if (astOutput) {
72
+ for (const [filePath] of astOutput.models) {
73
+ if ((0, fileClassifier_1.isTestFile)(path.basename(filePath))) {
74
+ testFiles.push(filePath);
75
+ }
76
+ }
77
+ }
78
+ const output = {
79
+ classifications: [],
80
+ mockBoundaries: [],
81
+ parameterizedTests: [],
82
+ testEndpointMappings: [],
83
+ };
84
+ // 1. Classify test layers
85
+ for (const testFile of testFiles) {
86
+ let content;
87
+ try {
88
+ content = fs.readFileSync(testFile, 'utf-8');
89
+ }
90
+ catch {
91
+ filesSkipped.push({ file: testFile, reason: 'read-error' });
92
+ continue;
93
+ }
94
+ filesScanned.push(testFile);
95
+ const classification = (0, testLayerClassifier_1.classifyTestLayer)(testFile, content);
96
+ output.classifications.push(classification);
97
+ // 2. Detect mock boundaries
98
+ const language = detectLanguageFromPath(testFile);
99
+ const boundaries = (0, mockBoundaryDetector_1.detectMockBoundaries)(testFile, content, language);
100
+ output.mockBoundaries.push(...boundaries);
101
+ // 3. Expand parameterized tests (RULE-07)
102
+ const paramTests = (0, parameterizedTestExpander_1.expandParameterizedTests)(testFile, content, language);
103
+ output.parameterizedTests.push(...paramTests);
104
+ }
105
+ // 4. Map tests to endpoints
106
+ output.testEndpointMappings = (0, testEndpointMapper_1.mapTestsToEndpoints)(context.graph, testFiles);
107
+ // 5. Populate graph with TIA-discovered nodes
108
+ // Add mock-boundary nodes
109
+ for (const boundary of output.mockBoundaries) {
110
+ const nodeId = `mock-boundary:${boundary.testFilePath}:${boundary.mockedTarget}:${(_a = boundary.line) !== null && _a !== void 0 ? _a : 0}`;
111
+ if (!context.graph.hasNode(nodeId)) {
112
+ const node = {
113
+ id: nodeId,
114
+ type: 'mock-boundary',
115
+ label: `Mock: ${boundary.mockedTarget}`,
116
+ sourceStage: 'tia',
117
+ filePath: boundary.testFilePath,
118
+ line: boundary.line,
119
+ metadata: {
120
+ mockingLibrary: boundary.mockingLibrary,
121
+ mockType: boundary.mockType,
122
+ mockedTarget: boundary.mockedTarget,
123
+ },
124
+ };
125
+ context.graph.addNode(node);
126
+ // Add 'mocks' edge from test file to mock boundary
127
+ const fileNodeId = `file:${boundary.testFilePath}`;
128
+ if (context.graph.hasNode(fileNodeId)) {
129
+ const edgeId = `${fileNodeId}->mocks->${nodeId}`;
130
+ if (!context.graph.hasEdge(edgeId)) {
131
+ context.graph.addEdge({
132
+ id: edgeId,
133
+ type: 'mocks',
134
+ sourceNodeId: fileNodeId,
135
+ targetNodeId: nodeId,
136
+ sourceStage: 'tia',
137
+ metadata: { mockType: boundary.mockType },
138
+ });
139
+ }
140
+ }
141
+ }
142
+ }
143
+ // Add param-variant nodes (RULE-07: counted as N variants, not 1)
144
+ for (const paramTest of output.parameterizedTests) {
145
+ const nodeId = `param-variant:${paramTest.testFilePath}:${paramTest.testName}`;
146
+ if (!context.graph.hasNode(nodeId)) {
147
+ const node = {
148
+ id: nodeId,
149
+ type: 'param-variant',
150
+ label: `${paramTest.testName} (${paramTest.variantCount} variants)`,
151
+ sourceStage: 'tia',
152
+ filePath: paramTest.testFilePath,
153
+ line: paramTest.line,
154
+ metadata: {
155
+ variantCount: paramTest.variantCount,
156
+ pattern: paramTest.pattern,
157
+ },
158
+ };
159
+ context.graph.addNode(node);
160
+ // Add 'param-expands-to' edge from test file
161
+ const fileNodeId = `file:${paramTest.testFilePath}`;
162
+ if (context.graph.hasNode(fileNodeId)) {
163
+ const edgeId = `${fileNodeId}->param-expands-to->${nodeId}`;
164
+ if (!context.graph.hasEdge(edgeId)) {
165
+ context.graph.addEdge({
166
+ id: edgeId,
167
+ type: 'param-expands-to',
168
+ sourceNodeId: fileNodeId,
169
+ targetNodeId: nodeId,
170
+ sourceStage: 'tia',
171
+ metadata: {},
172
+ });
173
+ }
174
+ }
175
+ }
176
+ }
177
+ // Record diagnostics (RULE-12)
178
+ const diagnostics = {
179
+ stageName: 'tia',
180
+ filesScanned,
181
+ filesSkipped,
182
+ durationMs: Date.now() - startTime,
183
+ metadata: {
184
+ testFilesClassified: output.classifications.length,
185
+ mockBoundariesDetected: output.mockBoundaries.length,
186
+ parameterizedTestsExpanded: output.parameterizedTests.length,
187
+ testEndpointMappings: output.testEndpointMappings.length,
188
+ layerDistribution: countByLayer(output.classifications),
189
+ },
190
+ };
191
+ context.diagnostics.set('tia', diagnostics);
192
+ context.stageOutputs.set('tia', output);
193
+ return output;
194
+ }
195
+ }
196
+ exports.TiaStage = TiaStage;
197
+ function detectLanguageFromPath(filePath) {
198
+ var _a;
199
+ const ext = path.extname(filePath).toLowerCase();
200
+ const map = {
201
+ '.ts': 'typescript', '.tsx': 'typescript',
202
+ '.js': 'javascript', '.jsx': 'javascript',
203
+ '.java': 'java', '.kt': 'kotlin', '.kts': 'kotlin',
204
+ '.py': 'python', '.rb': 'ruby',
205
+ };
206
+ return (_a = map[ext]) !== null && _a !== void 0 ? _a : 'unknown';
207
+ }
208
+ function countByLayer(classifications) {
209
+ var _a;
210
+ const counts = {};
211
+ for (const c of classifications) {
212
+ counts[c.layer] = ((_a = counts[c.layer]) !== null && _a !== void 0 ? _a : 0) + 1;
213
+ }
214
+ return counts;
215
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * TIA (Test Impact Analysis) stage types.
3
+ */
4
+ import type { TestLayer, MockType } from '../../types';
5
+ /**
6
+ * Classification result for a single test file.
7
+ */
8
+ export interface TestClassification {
9
+ filePath: string;
10
+ layer: TestLayer;
11
+ confidence: 'high' | 'medium' | 'low';
12
+ signals: string[];
13
+ }
14
+ /**
15
+ * Detected mock boundary in a test file.
16
+ */
17
+ export interface DetectedMockBoundary {
18
+ testFilePath: string;
19
+ mockingLibrary: string;
20
+ mockType: MockType;
21
+ mockedTarget: string;
22
+ line?: number;
23
+ }
24
+ /**
25
+ * Result of parameterized test expansion.
26
+ */
27
+ export interface ExpandedParameterizedTest {
28
+ testFilePath: string;
29
+ testName: string;
30
+ variantCount: number | 'unresolvable';
31
+ pattern: string;
32
+ line?: number;
33
+ }
34
+ /**
35
+ * Mapping from a test file to endpoints it covers.
36
+ */
37
+ export interface TestEndpointMapping {
38
+ testFilePath: string;
39
+ endpointId: string;
40
+ evidenceType: 'explicit-url' | 'resolved-constant' | 'import-graph' | 'naming-convention' | 'framework-metadata' | 'helper-traversal' | 'page-object';
41
+ confidence: 'high' | 'medium' | 'low';
42
+ }
43
+ /**
44
+ * Output of the TIA pipeline stage.
45
+ */
46
+ export interface TiaOutput {
47
+ classifications: TestClassification[];
48
+ mockBoundaries: DetectedMockBoundary[];
49
+ parameterizedTests: ExpandedParameterizedTest[];
50
+ testEndpointMappings: TestEndpointMapping[];
51
+ }
52
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/pipeline/stages/tia/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAA4B,MAAM,aAAa,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,cAAc,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,cAAc,GAAG,mBAAmB,GAAG,cAAc,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,aAAa,CAAC;IACtJ,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,kBAAkB,EAAE,CAAC;IACtC,cAAc,EAAE,oBAAoB,EAAE,CAAC;IACvC,kBAAkB,EAAE,yBAAyB,EAAE,CAAC;IAChD,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;CAC7C"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ /**
3
+ * TIA (Test Impact Analysis) stage types.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Pipeline types — Coverage Knowledge Graph, nodes, edges, confidence,
3
+ * conflict, coverage mapping, diagnostics, and output schema.
4
+ *
5
+ * These are the canonical types consumed by every stage in the 6-stage
6
+ * cascaded pipeline (SCA → AST → TIA → IAST → DAST → Graph Merge).
7
+ */
8
+ export type { ResolutionType } from '../coverage/deep-analysis/types';
9
+ export type { SupportedLanguage, AssertionType, SemanticModel } from '../ast/astTypes';
10
+ /**
11
+ * Extended confidence level. Adds `verified` to the existing 3-level model.
12
+ *
13
+ * - `low` — Only static AST evidence; no test linkage
14
+ * - `medium` — AST + TIA agree; no runtime confirmation
15
+ * - `high` — Static + at least one runtime stage (IAST or DAST) confirm
16
+ * - `verified` — All stages confirm + assertion is traced and confirmed
17
+ */
18
+ export type PipelineConfidence = 'low' | 'medium' | 'high' | 'verified';
19
+ export type StageName = 'sca' | 'ast' | 'tia' | 'iast' | 'dast' | 'merge';
20
+ export type TestLayer = 'unit' | 'component' | 'integration' | 'api' | 'e2e' | 'performance' | 'security';
21
+ export type CoverageClass = 'unit-covered' | 'component-covered' | 'integration-covered' | 'api-covered' | 'e2e-covered' | 'mock-covered' | 'uncovered';
22
+ export type AssertionSource = 'direct' | 'inherited' | 'fixture' | 'helper' | 'unresolved';
23
+ export type UrlResolution = 'literal' | 'symbolic' | 'unresolved';
24
+ export type ConflictType = 'dast-unreachable' | 'runtime-unconfirmed' | 'stage-disagreement' | 'security-annotation-not-enforced' | 'unhandled-server-error' | 'undeclared-endpoint';
25
+ export type ConflictSeverity = 'info' | 'warning' | 'error';
26
+ export type GraphNodeType = 'endpoint' | 'parameter' | 'controller' | 'service' | 'repository' | 'model' | 'exception-branch' | 'route' | 'file' | 'class' | 'function' | 'test-file' | 'test-suite' | 'test-case' | 'assertion' | 'fixture' | 'helper' | 'base-test-class' | 'mock-boundary' | 'param-variant' | 'conflict' | 'runtime-event' | 'dependency';
27
+ export type GraphEdgeType = 'defines' | 'calls' | 'validates' | 'throws' | 'handles' | 'tests' | 'asserts' | 'extends' | 'imports-helper' | 'mocks' | 'resolves-to' | 'param-expands-to' | 'depends-on' | 'observed-by' | 'executes' | 'conflicts-with';
28
+ export interface GraphNode {
29
+ id: string;
30
+ type: GraphNodeType;
31
+ label: string;
32
+ sourceStage: StageName;
33
+ filePath?: string;
34
+ line?: number;
35
+ metadata: Record<string, unknown>;
36
+ }
37
+ export interface GraphEdge {
38
+ id: string;
39
+ type: GraphEdgeType;
40
+ sourceNodeId: string;
41
+ targetNodeId: string;
42
+ sourceStage: StageName;
43
+ metadata: Record<string, unknown>;
44
+ }
45
+ export type MockType = 'return-value' | 'exception' | 'spy' | 'partial' | 'timer' | 'env';
46
+ export interface MockBoundary {
47
+ testId: string;
48
+ mockedNodeId: string;
49
+ mockingLibrary: string;
50
+ mockType: MockType;
51
+ effect: 'coverage-limited';
52
+ }
53
+ export interface ConflictNode {
54
+ conflictId: string;
55
+ nodeId: string;
56
+ type: ConflictType;
57
+ stages: StageName[];
58
+ stageOutputs: Record<string, unknown>;
59
+ detail: string;
60
+ suggestedAction: string;
61
+ severity: ConflictSeverity;
62
+ }
63
+ export type CoverageMappingItemType = 'endpoint' | 'service' | 'repository' | 'error-branch' | 'security-path' | 'validation-rule';
64
+ export interface CoverageMapping {
65
+ itemId: string;
66
+ itemType: CoverageMappingItemType;
67
+ linkedTests: string[];
68
+ sourceStages: StageName[];
69
+ confidence: PipelineConfidence;
70
+ coverageClass: CoverageClass;
71
+ mockBoundaries: string[];
72
+ assertionSource: AssertionSource;
73
+ assertionConfirmed: boolean;
74
+ dastReachable: boolean | 'not-probed';
75
+ runtimeConfirmed: boolean;
76
+ urlResolution: UrlResolution;
77
+ conflicts: string[];
78
+ traversalDepth: number;
79
+ }
80
+ export interface SkippedFile {
81
+ file: string;
82
+ reason: string;
83
+ }
84
+ export interface StageDiagnostics {
85
+ stageName: StageName;
86
+ filesScanned: string[];
87
+ filesSkipped: SkippedFile[];
88
+ durationMs: number;
89
+ metadata: Record<string, unknown>;
90
+ }
91
+ export interface PipelineSummary {
92
+ totalEndpoints: number;
93
+ coveredEndpoints: number;
94
+ verifiedEndpoints: number;
95
+ uncoveredEndpoints: number;
96
+ mockLimitedPaths: number;
97
+ unresolvedAbstractions: number;
98
+ conflictCount: number;
99
+ coverageByLayer: Record<TestLayer, number>;
100
+ }
101
+ export interface PipelineSections {
102
+ endpoints: CoverageMapping[];
103
+ parameters: CoverageMapping[];
104
+ integrationFlows: CoverageMapping[];
105
+ security: CoverageMapping[];
106
+ errorHandling: CoverageMapping[];
107
+ performance: CoverageMapping[];
108
+ }
109
+ export interface PipelineOutput {
110
+ graph: {
111
+ nodes: GraphNode[];
112
+ edges: GraphEdge[];
113
+ };
114
+ sections: PipelineSections;
115
+ diagnostics: Record<StageName, StageDiagnostics>;
116
+ summary: PipelineSummary;
117
+ }
118
+ export interface ConfidenceEvidence {
119
+ sourceStages: StageName[];
120
+ hasIastConfirmation: boolean;
121
+ hasDastConfirmation: boolean;
122
+ hasAssertionConfirmation: boolean;
123
+ hasMockBoundary: boolean;
124
+ hasPartialResolution: boolean;
125
+ hasSymbolicUrl: boolean;
126
+ isStaticOnlyMode: boolean;
127
+ }
128
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/pipeline/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * Pipeline types — Coverage Knowledge Graph, nodes, edges, confidence,
4
+ * conflict, coverage mapping, diagnostics, and output schema.
5
+ *
6
+ * These are the canonical types consumed by every stage in the 6-stage
7
+ * cascaded pipeline (SCA → AST → TIA → IAST → DAST → Graph Merge).
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "api-tests-coverage",
3
- "version": "1.0.13",
3
+ "version": "1.0.14",
4
4
  "description": "CLI and library to measure how thoroughly your test suite exercises your API surface area",
5
5
  "main": "dist/src/lib/index.js",
6
6
  "types": "dist/src/lib/index.d.ts",