@vibe-validate/extractors 0.14.2 → 0.15.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ava-extractor.js +35 -39
- package/dist/ava-extractor.js.map +1 -1
- package/dist/eslint-extractor.d.ts.map +1 -1
- package/dist/eslint-extractor.js +16 -14
- package/dist/eslint-extractor.js.map +1 -1
- package/dist/generic-extractor.d.ts +16 -10
- package/dist/generic-extractor.d.ts.map +1 -1
- package/dist/generic-extractor.js +106 -29
- package/dist/generic-extractor.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/jasmine-extractor.d.ts.map +1 -1
- package/dist/jasmine-extractor.js +25 -20
- package/dist/jasmine-extractor.js.map +1 -1
- package/dist/jest-extractor.d.ts.map +1 -1
- package/dist/jest-extractor.js +118 -64
- package/dist/jest-extractor.js.map +1 -1
- package/dist/junit-extractor.d.ts.map +1 -1
- package/dist/junit-extractor.js +41 -50
- package/dist/junit-extractor.js.map +1 -1
- package/dist/mocha-extractor.d.ts.map +1 -1
- package/dist/mocha-extractor.js +26 -21
- package/dist/mocha-extractor.js.map +1 -1
- package/dist/playwright-extractor.d.ts.map +1 -1
- package/dist/playwright-extractor.js +24 -14
- package/dist/playwright-extractor.js.map +1 -1
- package/dist/result-schema-export.d.ts +29 -0
- package/dist/result-schema-export.d.ts.map +1 -0
- package/dist/result-schema-export.js +37 -0
- package/dist/result-schema-export.js.map +1 -0
- package/dist/result-schema.d.ts +349 -0
- package/dist/result-schema.d.ts.map +1 -0
- package/dist/result-schema.js +139 -0
- package/dist/result-schema.js.map +1 -0
- package/dist/scripts/generate-result-schema.d.ts +10 -0
- package/dist/scripts/generate-result-schema.d.ts.map +1 -0
- package/dist/scripts/generate-result-schema.js +20 -0
- package/dist/scripts/generate-result-schema.js.map +1 -0
- package/dist/smart-extractor.d.ts +17 -20
- package/dist/smart-extractor.d.ts.map +1 -1
- package/dist/smart-extractor.js +116 -80
- package/dist/smart-extractor.js.map +1 -1
- package/dist/tap-extractor.js +18 -13
- package/dist/tap-extractor.js.map +1 -1
- package/dist/types.d.ts +18 -65
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/dist/typescript-extractor.d.ts.map +1 -1
- package/dist/typescript-extractor.js +13 -10
- package/dist/typescript-extractor.js.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +2 -1
- package/dist/utils.js.map +1 -1
- package/dist/vitest-extractor.d.ts.map +1 -1
- package/dist/vitest-extractor.js +310 -163
- package/dist/vitest-extractor.js.map +1 -1
- package/error-extractor-result.schema.json +134 -0
- package/package.json +8 -3
package/dist/vitest-extractor.js
CHANGED
|
@@ -5,6 +5,235 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @package @vibe-validate/extractors
|
|
7
7
|
*/
|
|
8
|
+
import { MAX_ERRORS_IN_ARRAY } from './result-schema.js';
|
|
9
|
+
/**
|
|
10
|
+
* Parse failure line to determine format and extract initial data
|
|
11
|
+
*
|
|
12
|
+
* @param line - Current line being parsed
|
|
13
|
+
* @param currentFile - File path from Format 2 header
|
|
14
|
+
* @param hasFormat2 - Whether Format 2 has been detected
|
|
15
|
+
* @returns Partial failure object or null if no match
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
function parseFailureLine(line, currentFile, hasFormat2) {
|
|
20
|
+
// Match Format 1: FAIL file.test.ts > test hierarchy
|
|
21
|
+
// BUT: Skip if we've seen Format 2 headers (to avoid processing duplicate FAIL lines)
|
|
22
|
+
const format1Match = !hasFormat2 && /(?:FAIL|❌|×)\s+([^\s]+\.test\.ts)\s*>\s*(.+)/.exec(line);
|
|
23
|
+
if (format1Match) {
|
|
24
|
+
return {
|
|
25
|
+
file: format1Match[1],
|
|
26
|
+
testHierarchy: format1Match[2].trim(),
|
|
27
|
+
errorMessage: '',
|
|
28
|
+
sourceLine: '',
|
|
29
|
+
location: ''
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// Match Format 2: × test hierarchy (without file path)
|
|
33
|
+
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses Vitest test framework output (controlled output), limited line length
|
|
34
|
+
const format2Match = /(?:×)\s+(.+?)(?:\s+\d+ms)?$/.exec(line);
|
|
35
|
+
if (format2Match && currentFile) {
|
|
36
|
+
return {
|
|
37
|
+
file: currentFile,
|
|
38
|
+
testHierarchy: format2Match[1].trim(),
|
|
39
|
+
errorMessage: '',
|
|
40
|
+
sourceLine: '',
|
|
41
|
+
location: ''
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Extract initial error message from line
|
|
48
|
+
*
|
|
49
|
+
* @param line - Line to extract error from
|
|
50
|
+
* @returns Extracted error message
|
|
51
|
+
*
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
54
|
+
function extractErrorMessage(line) {
|
|
55
|
+
const errorMatch = /((?:AssertionError|Error):\s*.+)/.exec(line);
|
|
56
|
+
if (errorMatch) {
|
|
57
|
+
return errorMatch[1].trim();
|
|
58
|
+
}
|
|
59
|
+
const format2ErrorMatch = /→\s+(.+)/.exec(line);
|
|
60
|
+
if (format2ErrorMatch) {
|
|
61
|
+
return format2ErrorMatch[1].trim();
|
|
62
|
+
}
|
|
63
|
+
return line.trim();
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check if line is a stop marker for error continuation
|
|
67
|
+
*
|
|
68
|
+
* @param line - Trimmed line to check
|
|
69
|
+
* @returns True if this line marks end of error message
|
|
70
|
+
*
|
|
71
|
+
* @internal
|
|
72
|
+
*/
|
|
73
|
+
function isStopMarker(line) {
|
|
74
|
+
return (line.startsWith('❯') ||
|
|
75
|
+
/^\d+\|/.test(line) ||
|
|
76
|
+
line.startsWith('FAIL') ||
|
|
77
|
+
line.startsWith('✓') ||
|
|
78
|
+
line.startsWith('❌') ||
|
|
79
|
+
line.startsWith('×') ||
|
|
80
|
+
line.startsWith('⎯') ||
|
|
81
|
+
line.startsWith('at '));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Append continuation line to error message
|
|
85
|
+
*
|
|
86
|
+
* @param errorMessage - Current error message
|
|
87
|
+
* @param line - Raw line (with indentation)
|
|
88
|
+
* @param trimmedLine - Trimmed version of line
|
|
89
|
+
* @param isSnapshotError - Whether handling snapshot error
|
|
90
|
+
* @returns Updated error message
|
|
91
|
+
*
|
|
92
|
+
* @internal
|
|
93
|
+
*/
|
|
94
|
+
function appendContinuationLine(errorMessage, line, trimmedLine, isSnapshotError) {
|
|
95
|
+
if (isSnapshotError) {
|
|
96
|
+
return errorMessage + '\n' + line; // Preserve indentation for diffs
|
|
97
|
+
}
|
|
98
|
+
return errorMessage + ' ' + trimmedLine; // Compact for normal errors
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Handle truncation logic for non-snapshot errors
|
|
102
|
+
*
|
|
103
|
+
* @param errorMessage - Current error message
|
|
104
|
+
* @param nextLine - Next trimmed line
|
|
105
|
+
* @param isSnapshotError - Whether handling snapshot error
|
|
106
|
+
* @param linesConsumed - Number of lines consumed so far
|
|
107
|
+
* @param maxLines - Maximum continuation lines allowed
|
|
108
|
+
* @returns Object with updated message and whether to stop
|
|
109
|
+
*
|
|
110
|
+
* @internal
|
|
111
|
+
*/
|
|
112
|
+
function handleTruncation(errorMessage, nextLine, isSnapshotError, linesConsumed, maxLines) {
|
|
113
|
+
if (isSnapshotError || linesConsumed < maxLines) {
|
|
114
|
+
return { errorMessage, shouldStop: false };
|
|
115
|
+
}
|
|
116
|
+
const updatedMessage = nextLine ? errorMessage + ' ...(truncated)' : errorMessage;
|
|
117
|
+
return { errorMessage: updatedMessage, shouldStop: true };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Parse error message with continuation line handling
|
|
121
|
+
*
|
|
122
|
+
* @param lines - All output lines
|
|
123
|
+
* @param startIndex - Index where error message starts
|
|
124
|
+
* @param isSnapshotError - Whether this is a snapshot error (different continuation rules)
|
|
125
|
+
* @returns Error message and index of last consumed line
|
|
126
|
+
*
|
|
127
|
+
* @internal
|
|
128
|
+
*/
|
|
129
|
+
function parseErrorMessage(lines, startIndex, isSnapshotError) {
|
|
130
|
+
let errorMessage = extractErrorMessage(lines[startIndex]);
|
|
131
|
+
const MAX_CONTINUATION_LINES = 5;
|
|
132
|
+
let j = startIndex + 1;
|
|
133
|
+
let linesConsumed = 0;
|
|
134
|
+
while (j < lines.length) {
|
|
135
|
+
const nextLine = lines[j].trim();
|
|
136
|
+
if (isStopMarker(nextLine)) {
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
// Check truncation limit for non-snapshot errors
|
|
140
|
+
const truncation = handleTruncation(errorMessage, nextLine, isSnapshotError, linesConsumed, MAX_CONTINUATION_LINES);
|
|
141
|
+
if (truncation.shouldStop) {
|
|
142
|
+
errorMessage = truncation.errorMessage;
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
// For non-snapshot errors, stop at blank lines
|
|
146
|
+
if (!nextLine && !isSnapshotError) {
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
// Add line to error message
|
|
150
|
+
if (nextLine || isSnapshotError) {
|
|
151
|
+
errorMessage = appendContinuationLine(errorMessage, lines[j], nextLine, isSnapshotError);
|
|
152
|
+
if (!isSnapshotError) {
|
|
153
|
+
linesConsumed++;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
j++;
|
|
157
|
+
}
|
|
158
|
+
return { errorMessage, lastIndex: j - 1 };
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Parse location from vitest marker or stack trace
|
|
162
|
+
*
|
|
163
|
+
* @param line - Line to parse
|
|
164
|
+
* @returns Location string (file:line:column) or null
|
|
165
|
+
*
|
|
166
|
+
* @internal
|
|
167
|
+
*/
|
|
168
|
+
function parseLocation(line) {
|
|
169
|
+
// Try vitest location marker first
|
|
170
|
+
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses Vitest test framework location markers (controlled output), not user input
|
|
171
|
+
const vitestLocation = /❯\s*(.+\.test\.ts):(\d+):(\d+)/.exec(line);
|
|
172
|
+
if (vitestLocation) {
|
|
173
|
+
return `${vitestLocation[1]}:${vitestLocation[2]}:${vitestLocation[3]}`;
|
|
174
|
+
}
|
|
175
|
+
// Try stack trace pattern
|
|
176
|
+
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses Vitest test framework stack traces (controlled output), not user input
|
|
177
|
+
const stackLocation = /at\s+.+\(([^\s]+\.test\.ts):(\d+):(\d+)\)/.exec(line);
|
|
178
|
+
if (stackLocation) {
|
|
179
|
+
return `${stackLocation[1]}:${stackLocation[2]}:${stackLocation[3]}`;
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Format failures into clean output
|
|
185
|
+
*
|
|
186
|
+
* @param failures - Extracted test failures
|
|
187
|
+
* @param expected - Expected value (if present)
|
|
188
|
+
* @param actual - Actual value (if present)
|
|
189
|
+
* @returns Formatted output string
|
|
190
|
+
*
|
|
191
|
+
* @internal
|
|
192
|
+
*/
|
|
193
|
+
function formatFailuresOutput(failures, expected, actual) {
|
|
194
|
+
return failures
|
|
195
|
+
.slice(0, MAX_ERRORS_IN_ARRAY)
|
|
196
|
+
.map((f, idx) => {
|
|
197
|
+
const parts = [
|
|
198
|
+
`[Test ${idx + 1}/${failures.length}] ${f.location ?? f.file}`,
|
|
199
|
+
'',
|
|
200
|
+
`Test: ${f.testHierarchy}`,
|
|
201
|
+
`Error: ${f.errorMessage}`,
|
|
202
|
+
];
|
|
203
|
+
if (expected && actual) {
|
|
204
|
+
parts.push(`Expected: ${expected}`, `Actual: ${actual}`);
|
|
205
|
+
}
|
|
206
|
+
if (f.sourceLine) {
|
|
207
|
+
parts.push('', f.sourceLine);
|
|
208
|
+
}
|
|
209
|
+
return parts.filter(p => p).join('\n');
|
|
210
|
+
})
|
|
211
|
+
.join('\n\n');
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Generate LLM-friendly guidance based on failures
|
|
215
|
+
*
|
|
216
|
+
* @param failureCount - Number of failures
|
|
217
|
+
* @param expected - Expected value (if present)
|
|
218
|
+
* @param actual - Actual value (if present)
|
|
219
|
+
* @returns Guidance text
|
|
220
|
+
*
|
|
221
|
+
* @internal
|
|
222
|
+
*/
|
|
223
|
+
function generateGuidanceText(failureCount, expected, actual) {
|
|
224
|
+
let guidance = `${failureCount} test(s) failed. `;
|
|
225
|
+
if (failureCount === 1) {
|
|
226
|
+
guidance += 'Fix the assertion in the test file at the location shown. ';
|
|
227
|
+
if (expected && actual) {
|
|
228
|
+
guidance += `The test expected "${expected}" but got "${actual}". `;
|
|
229
|
+
}
|
|
230
|
+
guidance += 'Run: npm test -- <test-file> to verify the fix.';
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
guidance += 'Fix each failing test individually. Run: npm test -- <test-file> to test each file.';
|
|
234
|
+
}
|
|
235
|
+
return guidance;
|
|
236
|
+
}
|
|
8
237
|
/**
|
|
9
238
|
* Extract runtime errors (Unhandled Rejection, ENOENT, etc.)
|
|
10
239
|
*
|
|
@@ -13,7 +242,8 @@
|
|
|
13
242
|
*/
|
|
14
243
|
function extractRuntimeError(output) {
|
|
15
244
|
// Look for "Unhandled Rejection" section
|
|
16
|
-
|
|
245
|
+
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses Vitest test framework runtime errors (controlled output), not user input
|
|
246
|
+
const unhandledMatch = /⎯+\s*Unhandled Rejection\s*⎯+\s*\n\s*(Error:[^\n]+(?:\n\s*[^\n❯⎯]+)?)/.exec(output);
|
|
17
247
|
if (!unhandledMatch) {
|
|
18
248
|
return null;
|
|
19
249
|
}
|
|
@@ -21,7 +251,7 @@ function extractRuntimeError(output) {
|
|
|
21
251
|
const errorMessage = unhandledMatch[1].trim().replace(/\n\s+/g, ' ');
|
|
22
252
|
// Extract location from stack trace (❯ function file:line:col)
|
|
23
253
|
// File path may contain colons (e.g., node:internal/fs/promises), so match ❯ function filepath:number:number
|
|
24
|
-
const locationMatch =
|
|
254
|
+
const locationMatch = /❯\s+\S+\s+([\w:/.]+):(\d+):(\d+)/.exec(output);
|
|
25
255
|
let file = 'unknown';
|
|
26
256
|
let location = '';
|
|
27
257
|
if (locationMatch) {
|
|
@@ -36,6 +266,27 @@ function extractRuntimeError(output) {
|
|
|
36
266
|
sourceLine: ''
|
|
37
267
|
};
|
|
38
268
|
}
|
|
269
|
+
/**
|
|
270
|
+
* Extract coverage threshold failures
|
|
271
|
+
*
|
|
272
|
+
* @param output - Full test output
|
|
273
|
+
* @returns Test failure object if coverage threshold error found
|
|
274
|
+
*/
|
|
275
|
+
function extractCoverageThresholdError(output) {
|
|
276
|
+
// Look for: "ERROR: Coverage for functions (86.47%) does not meet global threshold (87%)"
|
|
277
|
+
const coverageMatch = /ERROR:\s+Coverage for (\w+) \(([\d.]+)%\) does not meet (?:global )?threshold \(([\d.]+)%\)/.exec(output);
|
|
278
|
+
if (!coverageMatch) {
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
const [, metric, actual, expected] = coverageMatch;
|
|
282
|
+
return {
|
|
283
|
+
file: 'vitest.config.ts',
|
|
284
|
+
location: '',
|
|
285
|
+
testHierarchy: 'Coverage Threshold',
|
|
286
|
+
errorMessage: `Coverage for ${metric} (${actual}%) does not meet threshold (${expected}%)`,
|
|
287
|
+
sourceLine: ''
|
|
288
|
+
};
|
|
289
|
+
}
|
|
39
290
|
/**
|
|
40
291
|
* Format Vitest test failures
|
|
41
292
|
*
|
|
@@ -57,6 +308,7 @@ function extractRuntimeError(output) {
|
|
|
57
308
|
* console.log(result.guidance); // "Fix each failing test individually..."
|
|
58
309
|
* ```
|
|
59
310
|
*/
|
|
311
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity -- Complexity 29 acceptable for Vitest output parsing (down from 97) - main parsing loop coordinates multiple format detection and state tracking
|
|
60
312
|
export function extractVitestErrors(output, options) {
|
|
61
313
|
const lines = output.split('\n');
|
|
62
314
|
const failures = [];
|
|
@@ -68,205 +320,91 @@ export function extractVitestErrors(output, options) {
|
|
|
68
320
|
if (runtimeError) {
|
|
69
321
|
failures.push(runtimeError);
|
|
70
322
|
}
|
|
71
|
-
|
|
323
|
+
// Check for coverage threshold failures
|
|
324
|
+
const coverageError = extractCoverageThresholdError(output);
|
|
325
|
+
if (coverageError) {
|
|
326
|
+
failures.push(coverageError);
|
|
327
|
+
}
|
|
328
|
+
let i = -1;
|
|
329
|
+
while (i < lines.length - 1) {
|
|
330
|
+
i++; // Increment at start so 'continue' statements don't bypass it
|
|
72
331
|
const line = lines[i];
|
|
73
|
-
//
|
|
74
|
-
|
|
75
|
-
// NOTE: Must have parentheses to distinguish from location lines (❯ file.test.ts:57:30)
|
|
76
|
-
const fileHeaderMatch = line.match(/❯\s+([^\s]+\.test\.ts)\s+\(/);
|
|
332
|
+
// Check for Format 2 file header
|
|
333
|
+
const fileHeaderMatch = /❯\s+([^\s]+\.test\.ts)\s+\(/.exec(line);
|
|
77
334
|
if (fileHeaderMatch) {
|
|
78
335
|
currentFile = fileHeaderMatch[1];
|
|
79
|
-
hasFormat2 = true;
|
|
336
|
+
hasFormat2 = true;
|
|
80
337
|
continue;
|
|
81
338
|
}
|
|
82
|
-
//
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const format1Match = !hasFormat2 && line.match(/(?:FAIL|❌|×)\s+([^\s]+\.test\.ts)\s*>\s*(.+)/);
|
|
87
|
-
// Match Format 2: × test hierarchy (without file path)
|
|
88
|
-
// Use currentFile tracked from ❯ line above
|
|
89
|
-
const format2Match = !format1Match && line.match(/(?:×)\s+(.+?)(?:\s+\d+ms)?$/);
|
|
90
|
-
if (format1Match || (format2Match && currentFile)) {
|
|
91
|
-
if (currentFailure && currentFailure.file) {
|
|
339
|
+
// Try to parse as failure line (Format 1 or Format 2)
|
|
340
|
+
const parsedFailure = parseFailureLine(line, currentFile, hasFormat2);
|
|
341
|
+
if (parsedFailure) {
|
|
342
|
+
if (currentFailure?.file) {
|
|
92
343
|
failures.push(currentFailure);
|
|
93
344
|
}
|
|
94
|
-
|
|
95
|
-
// Format 1: file path is in the × line itself
|
|
96
|
-
currentFailure = {
|
|
97
|
-
file: format1Match[1],
|
|
98
|
-
testHierarchy: format1Match[2].trim(),
|
|
99
|
-
errorMessage: '',
|
|
100
|
-
sourceLine: '',
|
|
101
|
-
location: ''
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
else if (format2Match && currentFile) {
|
|
105
|
-
// Format 2: use file from previous ❯ line
|
|
106
|
-
currentFailure = {
|
|
107
|
-
file: currentFile,
|
|
108
|
-
testHierarchy: format2Match[1].trim(),
|
|
109
|
-
errorMessage: '',
|
|
110
|
-
sourceLine: '',
|
|
111
|
-
location: ''
|
|
112
|
-
};
|
|
113
|
-
}
|
|
345
|
+
currentFailure = parsedFailure;
|
|
114
346
|
continue;
|
|
115
347
|
}
|
|
116
|
-
//
|
|
117
|
-
// OR: Error: Test timed out in 5000ms.
|
|
118
|
-
// OR: Snapshot `name` mismatched
|
|
119
|
-
// OR: → expected 1 to be 5 // Object.is equality (Format 2 error message)
|
|
348
|
+
// Parse error message if we have a current failure
|
|
120
349
|
if (currentFailure && !currentFailure.errorMessage) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
// Check for Format 2 error messages (→ prefix)
|
|
126
|
-
const format2ErrorMatch = line.match(/→\s+(.+)/);
|
|
127
|
-
if (errorMatch || snapshotMatch || format2ErrorMatch) {
|
|
128
|
-
// Keep the full error including the type (AssertionError: ...)
|
|
129
|
-
let errorMessage;
|
|
130
|
-
if (errorMatch) {
|
|
131
|
-
errorMessage = errorMatch[1].trim();
|
|
132
|
-
}
|
|
133
|
-
else if (format2ErrorMatch) {
|
|
134
|
-
errorMessage = format2ErrorMatch[1].trim();
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
errorMessage = line.trim();
|
|
138
|
-
}
|
|
350
|
+
const snapshotMatch = /Snapshot\s+`([^`]+)`\s+mismatched/.exec(line);
|
|
351
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Need to check truthy regex matches, not just null/undefined
|
|
352
|
+
const hasError = /((?:AssertionError|Error):\s*.+)/.exec(line) || /→\s+(.+)/.exec(line) || snapshotMatch;
|
|
353
|
+
if (hasError) {
|
|
139
354
|
const isSnapshotError = !!snapshotMatch;
|
|
140
|
-
|
|
141
|
-
// For snapshot errors: continue through blank lines until stack trace (no line limit)
|
|
142
|
-
// For other errors: stop at blank lines OR after 5 continuation lines (prevent verbose object dumps)
|
|
143
|
-
const MAX_CONTINUATION_LINES = 5;
|
|
144
|
-
let j = i + 1;
|
|
145
|
-
let linesConsumed = 0;
|
|
146
|
-
while (j < lines.length) {
|
|
147
|
-
const nextLine = lines[j].trim();
|
|
148
|
-
// Always stop at these markers
|
|
149
|
-
if (nextLine.startsWith('❯') || nextLine.match(/^\d+\|/) || nextLine.startsWith('FAIL') || nextLine.startsWith('✓') || nextLine.startsWith('❌') || nextLine.startsWith('×') || nextLine.startsWith('⎯')) {
|
|
150
|
-
break;
|
|
151
|
-
}
|
|
152
|
-
// Stop at stack trace (starts with "at ")
|
|
153
|
-
if (nextLine.startsWith('at ')) {
|
|
154
|
-
break;
|
|
155
|
-
}
|
|
156
|
-
// For non-snapshot errors, limit continuation lines to prevent massive object dumps
|
|
157
|
-
if (!isSnapshotError && linesConsumed >= MAX_CONTINUATION_LINES) {
|
|
158
|
-
if (nextLine) {
|
|
159
|
-
errorMessage += ' ...(truncated)';
|
|
160
|
-
}
|
|
161
|
-
break;
|
|
162
|
-
}
|
|
163
|
-
// For non-snapshot errors, stop at blank lines
|
|
164
|
-
// For snapshot errors, continue through blank lines to capture diff
|
|
165
|
-
if (!nextLine && !isSnapshotError) {
|
|
166
|
-
break;
|
|
167
|
-
}
|
|
168
|
-
// Add line to error message
|
|
169
|
-
// For snapshots: preserve formatting with newlines and indentation
|
|
170
|
-
// For other errors: join with spaces for compact output
|
|
171
|
-
if (nextLine || isSnapshotError) {
|
|
172
|
-
if (isSnapshotError) {
|
|
173
|
-
errorMessage += '\n' + lines[j]; // Preserve indentation for diffs
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
errorMessage += ' ' + nextLine; // Compact for normal errors
|
|
177
|
-
linesConsumed++;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
j++;
|
|
181
|
-
}
|
|
355
|
+
const { errorMessage, lastIndex } = parseErrorMessage(lines, i, isSnapshotError);
|
|
182
356
|
currentFailure.errorMessage = errorMessage;
|
|
183
|
-
i =
|
|
357
|
+
i = lastIndex;
|
|
184
358
|
}
|
|
185
359
|
continue;
|
|
186
360
|
}
|
|
187
|
-
//
|
|
188
|
-
// OR stack trace: at Object.<anonymous> (packages/core/test/runner.test.ts:45:12)
|
|
361
|
+
// Parse location if we have a current failure
|
|
189
362
|
if (currentFailure && !currentFailure.location) {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
currentFailure.location = `${vitestLocation[1]}:${vitestLocation[2]}:${vitestLocation[3]}`;
|
|
194
|
-
continue;
|
|
195
|
-
}
|
|
196
|
-
// Try stack trace pattern
|
|
197
|
-
const stackLocation = line.match(/at\s+.+\(([^\s]+\.test\.ts):(\d+):(\d+)\)/);
|
|
198
|
-
if (stackLocation) {
|
|
199
|
-
currentFailure.location = `${stackLocation[1]}:${stackLocation[2]}:${stackLocation[3]}`;
|
|
363
|
+
const location = parseLocation(line);
|
|
364
|
+
if (location) {
|
|
365
|
+
currentFailure.location = location;
|
|
200
366
|
continue;
|
|
201
367
|
}
|
|
202
368
|
}
|
|
203
|
-
//
|
|
204
|
-
if (currentFailure &&
|
|
205
|
-
const sourceMatch =
|
|
369
|
+
// Parse source line
|
|
370
|
+
if (currentFailure && /^\s*\d+\|\s+/.exec(line)) {
|
|
371
|
+
const sourceMatch = /^\s*(\d+)\|\s*(.+)/.exec(line);
|
|
206
372
|
if (sourceMatch) {
|
|
207
373
|
currentFailure.sourceLine = `${sourceMatch[1]}| ${sourceMatch[2].trim()}`;
|
|
208
374
|
}
|
|
209
|
-
continue;
|
|
210
375
|
}
|
|
211
376
|
}
|
|
212
377
|
// Add last failure
|
|
213
|
-
if (currentFailure
|
|
378
|
+
if (currentFailure?.file) {
|
|
214
379
|
failures.push(currentFailure);
|
|
215
380
|
}
|
|
216
|
-
// Extract expected/actual values
|
|
381
|
+
// Extract expected/actual values and format output
|
|
217
382
|
const { expected, actual } = extractExpectedActual(output);
|
|
218
|
-
|
|
219
|
-
const
|
|
220
|
-
.slice(0, 10)
|
|
221
|
-
.map((f, idx) => {
|
|
222
|
-
const parts = [
|
|
223
|
-
`[Test ${idx + 1}/${failures.length}] ${f.location || f.file}`,
|
|
224
|
-
'',
|
|
225
|
-
`Test: ${f.testHierarchy}`,
|
|
226
|
-
`Error: ${f.errorMessage}`,
|
|
227
|
-
];
|
|
228
|
-
if (expected && actual) {
|
|
229
|
-
parts.push(`Expected: ${expected}`, `Actual: ${actual}`);
|
|
230
|
-
}
|
|
231
|
-
if (f.sourceLine) {
|
|
232
|
-
parts.push('', f.sourceLine);
|
|
233
|
-
}
|
|
234
|
-
return parts.filter(p => p).join('\n');
|
|
235
|
-
})
|
|
236
|
-
.join('\n\n');
|
|
237
|
-
// Enhanced LLM-friendly guidance
|
|
238
|
-
let guidance = `${failures.length} test(s) failed. `;
|
|
239
|
-
if (failures.length === 1) {
|
|
240
|
-
guidance += 'Fix the assertion in the test file at the location shown. ';
|
|
241
|
-
if (expected && actual) {
|
|
242
|
-
guidance += `The test expected "${expected}" but got "${actual}". `;
|
|
243
|
-
}
|
|
244
|
-
guidance += 'Run: npm test -- <test-file> to verify the fix.';
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
guidance += 'Fix each failing test individually. Run: npm test -- <test-file> to test each file.';
|
|
248
|
-
}
|
|
383
|
+
const errorSummary = formatFailuresOutput(failures, expected, actual);
|
|
384
|
+
const guidance = generateGuidanceText(failures.length, expected, actual);
|
|
249
385
|
const result = {
|
|
250
|
-
errors: failures.slice(0,
|
|
386
|
+
errors: failures.slice(0, MAX_ERRORS_IN_ARRAY).map(f => {
|
|
251
387
|
// Parse line:column from end of location string (file paths may contain colons)
|
|
252
388
|
let line;
|
|
253
389
|
let column;
|
|
254
390
|
if (f.location) {
|
|
255
391
|
const parts = f.location.split(':');
|
|
256
|
-
|
|
257
|
-
|
|
392
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Need to filter empty strings for parseInt, not just null/undefined
|
|
393
|
+
column = Number.parseInt(parts.pop() || '');
|
|
394
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Need to filter empty strings for parseInt, not just null/undefined
|
|
395
|
+
line = Number.parseInt(parts.pop() || '');
|
|
258
396
|
}
|
|
259
397
|
return {
|
|
260
398
|
file: f.file,
|
|
261
|
-
line: line !== undefined && !isNaN(line) ? line : undefined,
|
|
262
|
-
column: column !== undefined && !isNaN(column) ? column : undefined,
|
|
263
|
-
message: f.errorMessage
|
|
399
|
+
line: line !== undefined && !Number.isNaN(line) ? line : undefined,
|
|
400
|
+
column: column !== undefined && !Number.isNaN(column) ? column : undefined,
|
|
401
|
+
message: f.errorMessage
|
|
264
402
|
};
|
|
265
403
|
}),
|
|
266
404
|
summary: `${failures.length} test failure(s)`,
|
|
267
|
-
|
|
405
|
+
totalErrors: failures.length,
|
|
268
406
|
guidance,
|
|
269
|
-
|
|
407
|
+
errorSummary
|
|
270
408
|
};
|
|
271
409
|
// Add quality metadata if developer feedback enabled
|
|
272
410
|
if (options?.developerFeedback) {
|
|
@@ -295,7 +433,16 @@ function calculateExtractionQuality(failures, options) {
|
|
|
295
433
|
: 100;
|
|
296
434
|
// Confidence: based on how well patterns matched
|
|
297
435
|
// High confidence if most failures have complete data
|
|
298
|
-
|
|
436
|
+
let confidence;
|
|
437
|
+
if (completeness >= 80) {
|
|
438
|
+
confidence = 90;
|
|
439
|
+
}
|
|
440
|
+
else if (completeness >= 50) {
|
|
441
|
+
confidence = 70;
|
|
442
|
+
}
|
|
443
|
+
else {
|
|
444
|
+
confidence = 50;
|
|
445
|
+
}
|
|
299
446
|
// Issues encountered
|
|
300
447
|
const issues = [];
|
|
301
448
|
if (withFile < failures.length) {
|
|
@@ -331,8 +478,8 @@ function calculateExtractionQuality(failures, options) {
|
|
|
331
478
|
* @returns Expected and actual values (if found)
|
|
332
479
|
*/
|
|
333
480
|
function extractExpectedActual(fullOutput) {
|
|
334
|
-
const expectedMatch =
|
|
335
|
-
const actualMatch =
|
|
481
|
+
const expectedMatch = /- Expected[^\n]*\n[^\n]*\n- (.+)/.exec(fullOutput);
|
|
482
|
+
const actualMatch = /\+ Received[^\n]*\n[^\n]*\n\+ (.+)/.exec(fullOutput);
|
|
336
483
|
return {
|
|
337
484
|
expected: expectedMatch ? expectedMatch[1].trim() : undefined,
|
|
338
485
|
actual: actualMatch ? actualMatch[1].trim() : undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest-extractor.js","sourceRoot":"","sources":["../src/vitest-extractor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vitest-extractor.js","sourceRoot":"","sources":["../src/vitest-extractor.ts"],"names":[],"mappings":"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"}
|