@vibe-validate/extractors 0.16.1 → 0.17.0-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/extractor-registry.d.ts +103 -0
- package/dist/extractor-registry.d.ts.map +1 -0
- package/dist/extractor-registry.js +278 -0
- package/dist/extractor-registry.js.map +1 -0
- package/dist/extractors/ava/index.d.ts +23 -0
- package/dist/extractors/ava/index.d.ts.map +1 -0
- package/dist/extractors/ava/index.js +507 -0
- package/dist/extractors/ava/index.js.map +1 -0
- package/dist/extractors/ava/index.test.d.ts +7 -0
- package/dist/extractors/ava/index.test.d.ts.map +1 -0
- package/dist/extractors/ava/index.test.js +408 -0
- package/dist/extractors/ava/index.test.js.map +1 -0
- package/dist/extractors/eslint/index.d.ts +18 -0
- package/dist/extractors/eslint/index.d.ts.map +1 -0
- package/dist/extractors/eslint/index.js +206 -0
- package/dist/extractors/eslint/index.js.map +1 -0
- package/dist/extractors/eslint/index.test.d.ts +9 -0
- package/dist/extractors/eslint/index.test.d.ts.map +1 -0
- package/dist/extractors/eslint/index.test.js +191 -0
- package/dist/extractors/eslint/index.test.js.map +1 -0
- package/dist/extractors/generic/index.d.ts +30 -0
- package/dist/extractors/generic/index.d.ts.map +1 -0
- package/dist/extractors/generic/index.js +140 -0
- package/dist/extractors/generic/index.js.map +1 -0
- package/dist/extractors/generic/index.test.d.ts +7 -0
- package/dist/extractors/generic/index.test.d.ts.map +1 -0
- package/dist/extractors/generic/index.test.js +61 -0
- package/dist/extractors/generic/index.test.js.map +1 -0
- package/dist/extractors/jasmine/index.d.ts +17 -0
- package/dist/extractors/jasmine/index.d.ts.map +1 -0
- package/dist/extractors/jasmine/index.js +254 -0
- package/dist/extractors/jasmine/index.js.map +1 -0
- package/dist/extractors/jasmine/index.test.d.ts +7 -0
- package/dist/extractors/jasmine/index.test.d.ts.map +1 -0
- package/dist/extractors/jasmine/index.test.js +345 -0
- package/dist/extractors/jasmine/index.test.js.map +1 -0
- package/dist/extractors/jest/index.d.ts +17 -0
- package/dist/extractors/jest/index.d.ts.map +1 -0
- package/dist/extractors/jest/index.js +278 -0
- package/dist/extractors/jest/index.js.map +1 -0
- package/dist/extractors/jest/index.test.d.ts +9 -0
- package/dist/extractors/jest/index.test.d.ts.map +1 -0
- package/dist/extractors/jest/index.test.js +353 -0
- package/dist/extractors/jest/index.test.js.map +1 -0
- package/dist/extractors/junit/index.d.ts +18 -0
- package/dist/extractors/junit/index.d.ts.map +1 -0
- package/dist/extractors/junit/index.js +259 -0
- package/dist/extractors/junit/index.js.map +1 -0
- package/dist/extractors/junit/index.test.d.ts +7 -0
- package/dist/extractors/junit/index.test.d.ts.map +1 -0
- package/dist/extractors/junit/index.test.js +341 -0
- package/dist/extractors/junit/index.test.js.map +1 -0
- package/dist/extractors/maven-checkstyle/index.d.ts +23 -0
- package/dist/extractors/maven-checkstyle/index.d.ts.map +1 -0
- package/dist/extractors/maven-checkstyle/index.js +263 -0
- package/dist/extractors/maven-checkstyle/index.js.map +1 -0
- package/dist/extractors/maven-checkstyle/index.test.d.ts +2 -0
- package/dist/extractors/maven-checkstyle/index.test.d.ts.map +1 -0
- package/dist/extractors/maven-checkstyle/index.test.js +197 -0
- package/dist/extractors/maven-checkstyle/index.test.js.map +1 -0
- package/dist/extractors/maven-compiler/index.d.ts +23 -0
- package/dist/extractors/maven-compiler/index.d.ts.map +1 -0
- package/dist/extractors/maven-compiler/index.js +271 -0
- package/dist/extractors/maven-compiler/index.js.map +1 -0
- package/dist/extractors/maven-compiler/index.test.d.ts +2 -0
- package/dist/extractors/maven-compiler/index.test.d.ts.map +1 -0
- package/dist/extractors/maven-compiler/index.test.js +189 -0
- package/dist/extractors/maven-compiler/index.test.js.map +1 -0
- package/dist/extractors/maven-surefire/index.d.ts +23 -0
- package/dist/extractors/maven-surefire/index.d.ts.map +1 -0
- package/dist/extractors/maven-surefire/index.js +292 -0
- package/dist/extractors/maven-surefire/index.js.map +1 -0
- package/dist/extractors/maven-surefire/index.test.d.ts +2 -0
- package/dist/extractors/maven-surefire/index.test.d.ts.map +1 -0
- package/dist/extractors/maven-surefire/index.test.js +169 -0
- package/dist/extractors/maven-surefire/index.test.js.map +1 -0
- package/dist/extractors/mocha/index.d.ts +17 -0
- package/dist/extractors/mocha/index.d.ts.map +1 -0
- package/dist/extractors/mocha/index.js +241 -0
- package/dist/extractors/mocha/index.js.map +1 -0
- package/dist/extractors/mocha/index.test.d.ts +7 -0
- package/dist/extractors/mocha/index.test.d.ts.map +1 -0
- package/dist/extractors/mocha/index.test.js +300 -0
- package/dist/extractors/mocha/index.test.js.map +1 -0
- package/dist/extractors/playwright/index.d.ts +17 -0
- package/dist/extractors/playwright/index.d.ts.map +1 -0
- package/dist/extractors/playwright/index.js +320 -0
- package/dist/extractors/playwright/index.js.map +1 -0
- package/dist/extractors/playwright/index.test.d.ts +7 -0
- package/dist/extractors/playwright/index.test.d.ts.map +1 -0
- package/dist/extractors/playwright/index.test.js +274 -0
- package/dist/extractors/playwright/index.test.js.map +1 -0
- package/dist/extractors/tap/index.d.ts +23 -0
- package/dist/extractors/tap/index.d.ts.map +1 -0
- package/dist/extractors/tap/index.js +352 -0
- package/dist/extractors/tap/index.js.map +1 -0
- package/dist/extractors/tap/index.test.d.ts +7 -0
- package/dist/extractors/tap/index.test.d.ts.map +1 -0
- package/dist/extractors/tap/index.test.js +100 -0
- package/dist/extractors/tap/index.test.js.map +1 -0
- package/dist/extractors/typescript/index.d.ts +17 -0
- package/dist/extractors/typescript/index.d.ts.map +1 -0
- package/dist/extractors/typescript/index.js +150 -0
- package/dist/extractors/typescript/index.js.map +1 -0
- package/dist/extractors/typescript/index.test.d.ts +9 -0
- package/dist/extractors/typescript/index.test.d.ts.map +1 -0
- package/dist/extractors/typescript/index.test.js +177 -0
- package/dist/extractors/typescript/index.test.js.map +1 -0
- package/dist/extractors/vitest/index.d.ts +17 -0
- package/dist/extractors/vitest/index.d.ts.map +1 -0
- package/dist/extractors/vitest/index.js +564 -0
- package/dist/extractors/vitest/index.js.map +1 -0
- package/dist/extractors/vitest/index.test.d.ts +9 -0
- package/dist/extractors/vitest/index.test.d.ts.map +1 -0
- package/dist/extractors/vitest/index.test.js +373 -0
- package/dist/extractors/vitest/index.test.js.map +1 -0
- package/dist/index.d.ts +27 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -11
- package/dist/index.js.map +1 -1
- package/dist/maven-checkstyle-extractor.d.ts +20 -0
- package/dist/maven-checkstyle-extractor.d.ts.map +1 -0
- package/dist/maven-checkstyle-extractor.js +208 -0
- package/dist/maven-checkstyle-extractor.js.map +1 -0
- package/dist/maven-compiler-extractor.d.ts +20 -0
- package/dist/maven-compiler-extractor.d.ts.map +1 -0
- package/dist/maven-compiler-extractor.js +218 -0
- package/dist/maven-compiler-extractor.js.map +1 -0
- package/dist/maven-surefire-extractor.d.ts +20 -0
- package/dist/maven-surefire-extractor.d.ts.map +1 -0
- package/dist/maven-surefire-extractor.js +228 -0
- package/dist/maven-surefire-extractor.js.map +1 -0
- package/dist/maven-utils.d.ts +24 -0
- package/dist/maven-utils.d.ts.map +1 -0
- package/dist/maven-utils.js +36 -0
- package/dist/maven-utils.js.map +1 -0
- package/dist/plugin-loader.d.ts +82 -0
- package/dist/plugin-loader.d.ts.map +1 -0
- package/dist/plugin-loader.js +201 -0
- package/dist/plugin-loader.js.map +1 -0
- package/dist/result-schema.d.ts +59 -9
- package/dist/result-schema.d.ts.map +1 -1
- package/dist/result-schema.js +3 -19
- package/dist/result-schema.js.map +1 -1
- package/dist/sandbox.d.ts +161 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +254 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/sandbox.test.d.ts +8 -0
- package/dist/sandbox.test.d.ts.map +1 -0
- package/dist/sandbox.test.js +395 -0
- package/dist/sandbox.test.js.map +1 -0
- package/dist/sandboxed-extractor.d.ts +46 -0
- package/dist/sandboxed-extractor.d.ts.map +1 -0
- package/dist/sandboxed-extractor.js +172 -0
- package/dist/sandboxed-extractor.js.map +1 -0
- package/dist/sandboxed-extractor.test.d.ts +5 -0
- package/dist/sandboxed-extractor.test.d.ts.map +1 -0
- package/dist/sandboxed-extractor.test.js +346 -0
- package/dist/sandboxed-extractor.test.js.map +1 -0
- package/dist/smart-extractor.d.ts +22 -10
- package/dist/smart-extractor.d.ts.map +1 -1
- package/dist/smart-extractor.js +116 -163
- package/dist/smart-extractor.js.map +1 -1
- package/dist/types.d.ts +94 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ava Error Extractor Plugin
|
|
3
|
+
*
|
|
4
|
+
* Parses Ava test output and formats failures for LLM consumption.
|
|
5
|
+
* Supports Ava v6+ output format with Unicode symbols and clean error formatting.
|
|
6
|
+
*
|
|
7
|
+
* @package @vibe-validate/extractors
|
|
8
|
+
*/
|
|
9
|
+
import { formatCleanOutput } from '../../utils/formatter-utils.js';
|
|
10
|
+
import { generateGuidanceFromPatterns, COMMON_GUIDANCE_PATTERNS, } from '../../utils/guidance-generator.js';
|
|
11
|
+
/**
|
|
12
|
+
* Ava-specific guidance patterns
|
|
13
|
+
* Extends common patterns with Ava-specific timeout guidance
|
|
14
|
+
*/
|
|
15
|
+
const AVA_GUIDANCE_PATTERNS = [
|
|
16
|
+
...COMMON_GUIDANCE_PATTERNS,
|
|
17
|
+
{
|
|
18
|
+
key: 'ava-timeout',
|
|
19
|
+
messageMatchers: [],
|
|
20
|
+
errorTypeMatchers: ['timeout'],
|
|
21
|
+
guidance: 'Tests are timing out - use t.timeout() to increase limit or optimize async operations',
|
|
22
|
+
},
|
|
23
|
+
];
|
|
24
|
+
/**
|
|
25
|
+
* Detects if output is from Ava test framework
|
|
26
|
+
*/
|
|
27
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity -- Complexity 20 acceptable for Ava detection (pattern scoring with multiple marker types)
|
|
28
|
+
export function detectAva(output) {
|
|
29
|
+
const lines = output.split('\n');
|
|
30
|
+
let score = 0;
|
|
31
|
+
const foundPatterns = [];
|
|
32
|
+
// Look for Ava-specific patterns
|
|
33
|
+
let hasAvaFailureMarker = false;
|
|
34
|
+
let hasAvaTestHeader = false;
|
|
35
|
+
let hasFileUrlFormat = false;
|
|
36
|
+
let hasErrorThrownMarker = false;
|
|
37
|
+
for (const line of lines) {
|
|
38
|
+
const trimmed = line.trim();
|
|
39
|
+
// High-value markers (30 points each)
|
|
40
|
+
if (!hasAvaFailureMarker && /✘\s+\[fail\]:/.test(trimmed)) {
|
|
41
|
+
score += 30;
|
|
42
|
+
foundPatterns.push('Ava failure marker (✘ [fail]:)');
|
|
43
|
+
hasAvaFailureMarker = true;
|
|
44
|
+
}
|
|
45
|
+
// Medium-value markers (20 points)
|
|
46
|
+
if (!hasAvaTestHeader && trimmed.includes('›') && !trimmed.startsWith('›') && trimmed.length > 15) {
|
|
47
|
+
score += 20;
|
|
48
|
+
foundPatterns.push('Ava test hierarchy (›)');
|
|
49
|
+
hasAvaTestHeader = true;
|
|
50
|
+
}
|
|
51
|
+
if (!hasFileUrlFormat && /›\s+file:\/\//.test(trimmed)) {
|
|
52
|
+
score += 20;
|
|
53
|
+
foundPatterns.push('file:// URL format');
|
|
54
|
+
hasFileUrlFormat = true;
|
|
55
|
+
}
|
|
56
|
+
// Ava-specific error markers (15 points)
|
|
57
|
+
if (!hasErrorThrownMarker && (trimmed === 'Error thrown in test:' || trimmed === 'Rejected promise returned by test. Reason:')) {
|
|
58
|
+
score += 15;
|
|
59
|
+
foundPatterns.push('Ava error marker');
|
|
60
|
+
hasErrorThrownMarker = true;
|
|
61
|
+
}
|
|
62
|
+
// Low-value markers (10 points)
|
|
63
|
+
if (trimmed.includes('Test timeout exceeded')) {
|
|
64
|
+
score += 10;
|
|
65
|
+
foundPatterns.push('Ava timeout message');
|
|
66
|
+
}
|
|
67
|
+
// File path with line number format (10 points)
|
|
68
|
+
if (/^[^:]+\.(?:js|ts|mjs|cjs):\d+$/.test(trimmed)) {
|
|
69
|
+
score += 5;
|
|
70
|
+
foundPatterns.push('file:line format');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Determine reason based on score
|
|
74
|
+
let reason;
|
|
75
|
+
if (score >= 50) {
|
|
76
|
+
reason = 'Ava test output detected';
|
|
77
|
+
}
|
|
78
|
+
else if (score >= 30) {
|
|
79
|
+
reason = 'Possible Ava test output';
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
reason = 'Not Ava test output';
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
confidence: Math.min(score, 100),
|
|
86
|
+
patterns: foundPatterns,
|
|
87
|
+
reason,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Extract errors from Ava test output
|
|
92
|
+
*/
|
|
93
|
+
export function extractAva(output, _command) {
|
|
94
|
+
const detection = detectAva(output);
|
|
95
|
+
if (detection.confidence < 30) {
|
|
96
|
+
return {
|
|
97
|
+
summary: 'Not Ava test output',
|
|
98
|
+
totalErrors: 0,
|
|
99
|
+
errors: [],
|
|
100
|
+
metadata: {
|
|
101
|
+
detection: {
|
|
102
|
+
extractor: 'ava',
|
|
103
|
+
confidence: detection.confidence,
|
|
104
|
+
patterns: detection.patterns,
|
|
105
|
+
reason: detection.reason,
|
|
106
|
+
},
|
|
107
|
+
confidence: detection.confidence,
|
|
108
|
+
completeness: 100,
|
|
109
|
+
issues: [],
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// Extract all failures using two-pass approach:
|
|
114
|
+
// 1. Parse summary lines to get test names
|
|
115
|
+
// 2. Parse detailed blocks to get file locations and messages
|
|
116
|
+
const failures = extractFailures(output);
|
|
117
|
+
if (failures.length === 0) {
|
|
118
|
+
return {
|
|
119
|
+
summary: '0 test(s) failed',
|
|
120
|
+
errors: [],
|
|
121
|
+
totalErrors: 0,
|
|
122
|
+
errorSummary: '',
|
|
123
|
+
guidance: '',
|
|
124
|
+
metadata: {
|
|
125
|
+
detection: {
|
|
126
|
+
extractor: 'ava',
|
|
127
|
+
confidence: detection.confidence,
|
|
128
|
+
patterns: detection.patterns,
|
|
129
|
+
reason: detection.reason,
|
|
130
|
+
},
|
|
131
|
+
confidence: 100,
|
|
132
|
+
completeness: 100,
|
|
133
|
+
issues: [],
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
const errors = [];
|
|
138
|
+
let completeCount = 0;
|
|
139
|
+
for (const failure of failures) {
|
|
140
|
+
const file = failure.file ?? 'unknown';
|
|
141
|
+
// Use test name as fallback message if no explicit message extracted
|
|
142
|
+
const message = failure.message ?? failure.testName ?? 'Test failed';
|
|
143
|
+
const context = failure.testName ?? '';
|
|
144
|
+
const isComplete = file !== 'unknown' && failure.line && message && message !== 'Test failed';
|
|
145
|
+
if (isComplete) {
|
|
146
|
+
completeCount++;
|
|
147
|
+
}
|
|
148
|
+
errors.push({
|
|
149
|
+
file,
|
|
150
|
+
line: failure.line,
|
|
151
|
+
message,
|
|
152
|
+
context,
|
|
153
|
+
guidance: failure.guidance,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
// Generate summary
|
|
157
|
+
const summary = `${failures.length} test(s) failed`;
|
|
158
|
+
// Generate guidance using Ava-specific patterns
|
|
159
|
+
const guidance = generateGuidanceFromPatterns(failures, AVA_GUIDANCE_PATTERNS);
|
|
160
|
+
// Calculate quality metadata
|
|
161
|
+
const completeness = failures.length > 0 ? (completeCount / failures.length) * 100 : 100;
|
|
162
|
+
const confidence = failures.length > 0 ? 90 : 100; // High confidence for Ava's structured output
|
|
163
|
+
const metadata = {
|
|
164
|
+
detection: {
|
|
165
|
+
extractor: 'ava',
|
|
166
|
+
confidence: detection.confidence,
|
|
167
|
+
patterns: detection.patterns,
|
|
168
|
+
reason: detection.reason,
|
|
169
|
+
},
|
|
170
|
+
confidence,
|
|
171
|
+
completeness,
|
|
172
|
+
issues: [],
|
|
173
|
+
};
|
|
174
|
+
return {
|
|
175
|
+
summary,
|
|
176
|
+
errors,
|
|
177
|
+
totalErrors: failures.length,
|
|
178
|
+
errorSummary: formatCleanOutput(errors),
|
|
179
|
+
guidance,
|
|
180
|
+
metadata,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Extract all failures from Ava output
|
|
185
|
+
* Strategy: Find detailed headers (test names with ›), then parse each block
|
|
186
|
+
*/
|
|
187
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity -- Complexity 23 acceptable for Ava output parsing (handles multiple output formats with fallback detection)
|
|
188
|
+
function extractFailures(output) {
|
|
189
|
+
const lines = output.split('\n');
|
|
190
|
+
const failures = [];
|
|
191
|
+
// Find all detailed block headers (clean test names with ›)
|
|
192
|
+
// These are the authoritative source - each one represents a failure
|
|
193
|
+
const headerIndices = [];
|
|
194
|
+
for (let i = 0; i < lines.length; i++) {
|
|
195
|
+
const trimmed = lines[i].trim();
|
|
196
|
+
// Detailed header: has ›, not a summary, not a file:// line, not code, reasonable length
|
|
197
|
+
if (trimmed.includes('›') &&
|
|
198
|
+
!trimmed.includes('[fail]:') &&
|
|
199
|
+
!trimmed.startsWith('›') &&
|
|
200
|
+
!trimmed.includes('file://') &&
|
|
201
|
+
!/^\d+:/.exec(trimmed) &&
|
|
202
|
+
!/^Error/.exec(trimmed) &&
|
|
203
|
+
!trimmed.includes('{') &&
|
|
204
|
+
!trimmed.includes('}') &&
|
|
205
|
+
trimmed.length > 10) {
|
|
206
|
+
headerIndices.push({ index: i, testName: trimmed });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// If we found detailed headers, parse each one
|
|
210
|
+
if (headerIndices.length > 0) {
|
|
211
|
+
for (const header of headerIndices) {
|
|
212
|
+
const failure = {
|
|
213
|
+
testName: header.testName,
|
|
214
|
+
};
|
|
215
|
+
// Parse block starting from line after header
|
|
216
|
+
parseDetailedBlock(lines, header.index + 1, failure);
|
|
217
|
+
// Add error type detection and guidance
|
|
218
|
+
if (!failure.errorType && failure.message) {
|
|
219
|
+
failure.errorType = detectErrorType(failure.message);
|
|
220
|
+
}
|
|
221
|
+
if (failure.errorType) {
|
|
222
|
+
failure.guidance = getErrorGuidance(failure.errorType);
|
|
223
|
+
}
|
|
224
|
+
failures.push(failure);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
// Fallback: No detailed headers found (minimal format)
|
|
229
|
+
// Look for summary lines and parse content after them
|
|
230
|
+
for (let i = 0; i < lines.length; i++) {
|
|
231
|
+
const trimmed = lines[i].trim();
|
|
232
|
+
if (trimmed.includes('✘') && trimmed.includes('[fail]:')) {
|
|
233
|
+
const failure = {};
|
|
234
|
+
const summaryMatch = /✘\s+\[fail\]:\s+(.+)/.exec(trimmed);
|
|
235
|
+
if (summaryMatch) {
|
|
236
|
+
failure.testName = summaryMatch[1];
|
|
237
|
+
}
|
|
238
|
+
// Parse block starting from next line
|
|
239
|
+
parseDetailedBlock(lines, i + 1, failure);
|
|
240
|
+
// Add error type detection and guidance
|
|
241
|
+
if (!failure.errorType && failure.message) {
|
|
242
|
+
failure.errorType = detectErrorType(failure.message);
|
|
243
|
+
}
|
|
244
|
+
if (failure.errorType) {
|
|
245
|
+
failure.guidance = getErrorGuidance(failure.errorType);
|
|
246
|
+
}
|
|
247
|
+
failures.push(failure);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return failures;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Parse a detailed error block to extract file, line, and message
|
|
255
|
+
*/
|
|
256
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity -- Complexity 40 acceptable for Ava error block parsing (state machine handling multiple output formats and edge cases)
|
|
257
|
+
function parseDetailedBlock(lines, startIndex, failure) {
|
|
258
|
+
let i = startIndex;
|
|
259
|
+
let foundCodeSnippet = false;
|
|
260
|
+
let inErrorObject = false;
|
|
261
|
+
while (i < lines.length && i < startIndex + 60) {
|
|
262
|
+
const line = lines[i];
|
|
263
|
+
const trimmed = line.trim();
|
|
264
|
+
// Stop at next test header (clean test name with ›)
|
|
265
|
+
if (i > startIndex + 3 &&
|
|
266
|
+
trimmed.includes('›') &&
|
|
267
|
+
!trimmed.startsWith('›') &&
|
|
268
|
+
trimmed.length > 15 &&
|
|
269
|
+
!trimmed.includes('file://') &&
|
|
270
|
+
!/^\d+:/.exec(trimmed) &&
|
|
271
|
+
!/^Error/.exec(trimmed) &&
|
|
272
|
+
!trimmed.includes('{') &&
|
|
273
|
+
!trimmed.includes('}')) {
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
// Stop at separator
|
|
277
|
+
if (trimmed === '─') {
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
// Extract file path: "tests/ava/test.js:28" (appears right after test name header)
|
|
281
|
+
const fileMatch = /^([^:]+\.(?:js|ts|mjs|cjs)):(\d+)$/.exec(trimmed);
|
|
282
|
+
if (fileMatch && !failure.file) {
|
|
283
|
+
failure.file = fileMatch[1];
|
|
284
|
+
failure.line = Number.parseInt(fileMatch[2], 10);
|
|
285
|
+
i++;
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
// Extract from file:// URL: "› file://tests/ava/test.js:28:5"
|
|
289
|
+
const urlMatch = /^›\s+file:\/\/(.+?):(\d+):\d+$/.exec(trimmed);
|
|
290
|
+
if (urlMatch && !failure.file) {
|
|
291
|
+
failure.file = urlMatch[1];
|
|
292
|
+
failure.line = Number.parseInt(urlMatch[2], 10);
|
|
293
|
+
i++;
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
// Code snippet marker (line numbers like " 28: code here")
|
|
297
|
+
if (/^\d+:/.exec(trimmed)) {
|
|
298
|
+
foundCodeSnippet = true;
|
|
299
|
+
i++;
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
// Error object start
|
|
303
|
+
if (/^(?:TypeError|Error|.*Error)\s*\{$/.exec(trimmed)) {
|
|
304
|
+
inErrorObject = true;
|
|
305
|
+
i++;
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
// Error object end
|
|
309
|
+
if (inErrorObject && trimmed === '}') {
|
|
310
|
+
inErrorObject = false;
|
|
311
|
+
i++;
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
// Extract from error object properties
|
|
315
|
+
if (inErrorObject) {
|
|
316
|
+
// message property
|
|
317
|
+
const msgMatch = /message:\s*'([^']+)'/.exec(trimmed);
|
|
318
|
+
if (msgMatch && !failure.message) {
|
|
319
|
+
failure.message = msgMatch[1];
|
|
320
|
+
}
|
|
321
|
+
// code property for error type detection
|
|
322
|
+
const codeMatch = /code:\s*'([^']+)'/.exec(trimmed);
|
|
323
|
+
if (codeMatch) {
|
|
324
|
+
if (codeMatch[1] === 'ENOENT') {
|
|
325
|
+
failure.errorType = 'file-not-found';
|
|
326
|
+
}
|
|
327
|
+
else if (codeMatch[1] === 'ERR_MODULE_NOT_FOUND') {
|
|
328
|
+
failure.errorType = 'import-error';
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
i++;
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
// Extract error from Error: line (after error object)
|
|
335
|
+
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses Ava test framework error messages (controlled output), not user input
|
|
336
|
+
const errorLineMatch = /^(?:TypeError|Error|.*Error):\s+(.+)$/.exec(trimmed);
|
|
337
|
+
if (errorLineMatch) {
|
|
338
|
+
failure.message ??= errorLineMatch[1];
|
|
339
|
+
// Look for file in stack trace (next few lines)
|
|
340
|
+
if (!failure.file && i + 1 < lines.length) {
|
|
341
|
+
for (let j = i + 1; j < Math.min(i + 10, lines.length); j++) {
|
|
342
|
+
const stackLine = lines[j].trim();
|
|
343
|
+
// Match: at file:///path/to/file.js:110:24
|
|
344
|
+
// But skip node_modules and ava lib files
|
|
345
|
+
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses Ava test framework stack traces (controlled output), not user input
|
|
346
|
+
const stackMatch = /at\s+(?:.*?\s+)?\(?file:\/\/([^:)]+):(\d+):\d+/.exec(stackLine);
|
|
347
|
+
if (stackMatch) {
|
|
348
|
+
const stackFile = stackMatch[1];
|
|
349
|
+
// Skip node_modules and ava library files
|
|
350
|
+
if (!stackFile.includes('node_modules') && !stackFile.includes('/ava/lib/')) {
|
|
351
|
+
failure.file = stackFile;
|
|
352
|
+
failure.line = Number.parseInt(stackMatch[2], 10);
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
i++;
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
// Timeout marker
|
|
362
|
+
if (trimmed.includes('Test timeout exceeded')) {
|
|
363
|
+
failure.message ??= 'Test timeout exceeded';
|
|
364
|
+
failure.errorType = 'timeout';
|
|
365
|
+
i++;
|
|
366
|
+
continue;
|
|
367
|
+
}
|
|
368
|
+
// Error markers
|
|
369
|
+
if (trimmed === 'Error thrown in test:' || trimmed === 'Rejected promise returned by test. Reason:') {
|
|
370
|
+
i++;
|
|
371
|
+
continue;
|
|
372
|
+
}
|
|
373
|
+
// Detect assertion from Difference section
|
|
374
|
+
if (trimmed.startsWith('Difference') && trimmed.includes('actual') && trimmed.includes('expected')) {
|
|
375
|
+
failure.message ??= 'Assertion failed';
|
|
376
|
+
failure.errorType ??= 'assertion';
|
|
377
|
+
i++;
|
|
378
|
+
continue;
|
|
379
|
+
}
|
|
380
|
+
// Skip diff headers and diff lines
|
|
381
|
+
if (trimmed.startsWith('Difference') ||
|
|
382
|
+
trimmed.startsWith('Expected:') ||
|
|
383
|
+
trimmed.startsWith('Received:') ||
|
|
384
|
+
/^[+-]\s/.exec(trimmed)) {
|
|
385
|
+
i++;
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
// Assertion message (single line after code snippet, before Difference section)
|
|
389
|
+
if (foundCodeSnippet &&
|
|
390
|
+
!failure.message &&
|
|
391
|
+
trimmed.length > 0 &&
|
|
392
|
+
trimmed.length < 150 &&
|
|
393
|
+
!/^\d+:/.exec(trimmed) &&
|
|
394
|
+
!trimmed.includes('Difference') &&
|
|
395
|
+
!trimmed.includes('{') &&
|
|
396
|
+
!trimmed.includes('}') &&
|
|
397
|
+
!/^at\s+/.exec(trimmed) &&
|
|
398
|
+
!trimmed.includes('file://') &&
|
|
399
|
+
!trimmed.includes('.js:') &&
|
|
400
|
+
!trimmed.includes('.ts:')) {
|
|
401
|
+
failure.message = trimmed;
|
|
402
|
+
i++;
|
|
403
|
+
continue;
|
|
404
|
+
}
|
|
405
|
+
i++;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Detect error type from message
|
|
410
|
+
*/
|
|
411
|
+
function detectErrorType(message) {
|
|
412
|
+
const lower = message.toLowerCase();
|
|
413
|
+
if (lower.includes('timeout') || lower.includes('timed out')) {
|
|
414
|
+
return 'timeout';
|
|
415
|
+
}
|
|
416
|
+
if (lower.includes('enoent') || lower.includes('no such file')) {
|
|
417
|
+
return 'file-not-found';
|
|
418
|
+
}
|
|
419
|
+
if (lower.includes('cannot read properties') || lower.includes('typeerror')) {
|
|
420
|
+
return 'type-error';
|
|
421
|
+
}
|
|
422
|
+
if (lower.includes('expected') || lower.includes('should') || lower.includes('difference')) {
|
|
423
|
+
return 'assertion';
|
|
424
|
+
}
|
|
425
|
+
if (lower.includes('cannot find module') || lower.includes('module not found')) {
|
|
426
|
+
return 'import-error';
|
|
427
|
+
}
|
|
428
|
+
return 'unknown';
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Get guidance for a specific error type
|
|
432
|
+
*/
|
|
433
|
+
function getErrorGuidance(errorType) {
|
|
434
|
+
const guidanceMap = {
|
|
435
|
+
assertion: 'Review the assertion logic and expected vs actual values',
|
|
436
|
+
timeout: 'Increase timeout limit with t.timeout() or optimize async operations',
|
|
437
|
+
'file-not-found': 'Verify file path exists and permissions are correct',
|
|
438
|
+
'type-error': 'Check for null/undefined values before accessing properties',
|
|
439
|
+
'import-error': 'Verify module path and ensure dependencies are installed',
|
|
440
|
+
};
|
|
441
|
+
return guidanceMap[errorType];
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Ava Extractor Plugin
|
|
445
|
+
*/
|
|
446
|
+
const avaExtractor = {
|
|
447
|
+
metadata: {
|
|
448
|
+
name: 'ava',
|
|
449
|
+
version: '1.0.0',
|
|
450
|
+
author: 'Jeff Dutton <jeff@duckcreek.com>',
|
|
451
|
+
description: 'Extracts test failures from Ava test framework output',
|
|
452
|
+
repository: 'https://github.com/jdutton/vibe-validate',
|
|
453
|
+
tags: ['ava', 'test', 'javascript', 'typescript'],
|
|
454
|
+
},
|
|
455
|
+
hints: {
|
|
456
|
+
anyOf: ['✘', '[fail]', 'file://'],
|
|
457
|
+
},
|
|
458
|
+
priority: 82,
|
|
459
|
+
detect: detectAva,
|
|
460
|
+
extract: extractAva,
|
|
461
|
+
samples: [
|
|
462
|
+
{
|
|
463
|
+
name: 'basic-assertion-failure',
|
|
464
|
+
description: 'Simple assertion failure with file and line',
|
|
465
|
+
input: `
|
|
466
|
+
✘ [fail]: Extractors › should extract TypeScript errors correctly should have 5 errors
|
|
467
|
+
|
|
468
|
+
Extractors › should extract TypeScript errors correctly
|
|
469
|
+
|
|
470
|
+
tests/ava/comprehensive-failures.test.js:28
|
|
471
|
+
|
|
472
|
+
27: // Expected: 1 error, but we assert 5 (INTENTIONAL FAILURE)
|
|
473
|
+
28: t.is(result.errors.length, 5, 'should have 5 errors');
|
|
474
|
+
29: });
|
|
475
|
+
|
|
476
|
+
should have 5 errors
|
|
477
|
+
|
|
478
|
+
Difference (- actual, + expected):
|
|
479
|
+
|
|
480
|
+
- 1
|
|
481
|
+
+ 5
|
|
482
|
+
|
|
483
|
+
› file://tests/ava/comprehensive-failures.test.js:28:5
|
|
484
|
+
`,
|
|
485
|
+
expected: {
|
|
486
|
+
totalErrors: 1,
|
|
487
|
+
errors: [
|
|
488
|
+
{
|
|
489
|
+
file: 'tests/ava/comprehensive-failures.test.js',
|
|
490
|
+
line: 28,
|
|
491
|
+
message: 'should have 5 errors',
|
|
492
|
+
},
|
|
493
|
+
],
|
|
494
|
+
},
|
|
495
|
+
},
|
|
496
|
+
{
|
|
497
|
+
name: 'comprehensive-failures',
|
|
498
|
+
description: 'Real Ava comprehensive failure output',
|
|
499
|
+
inputFile: './samples/comprehensive-failures-001.txt',
|
|
500
|
+
expected: {
|
|
501
|
+
totalErrors: 11,
|
|
502
|
+
},
|
|
503
|
+
},
|
|
504
|
+
],
|
|
505
|
+
};
|
|
506
|
+
export default avaExtractor;
|
|
507
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extractors/ava/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/extractors/ava/index.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|