@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.
Files changed (61) hide show
  1. package/dist/ava-extractor.js +35 -39
  2. package/dist/ava-extractor.js.map +1 -1
  3. package/dist/eslint-extractor.d.ts.map +1 -1
  4. package/dist/eslint-extractor.js +16 -14
  5. package/dist/eslint-extractor.js.map +1 -1
  6. package/dist/generic-extractor.d.ts +16 -10
  7. package/dist/generic-extractor.d.ts.map +1 -1
  8. package/dist/generic-extractor.js +106 -29
  9. package/dist/generic-extractor.js.map +1 -1
  10. package/dist/index.d.ts +4 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +3 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/jasmine-extractor.d.ts.map +1 -1
  15. package/dist/jasmine-extractor.js +25 -20
  16. package/dist/jasmine-extractor.js.map +1 -1
  17. package/dist/jest-extractor.d.ts.map +1 -1
  18. package/dist/jest-extractor.js +118 -64
  19. package/dist/jest-extractor.js.map +1 -1
  20. package/dist/junit-extractor.d.ts.map +1 -1
  21. package/dist/junit-extractor.js +41 -50
  22. package/dist/junit-extractor.js.map +1 -1
  23. package/dist/mocha-extractor.d.ts.map +1 -1
  24. package/dist/mocha-extractor.js +26 -21
  25. package/dist/mocha-extractor.js.map +1 -1
  26. package/dist/playwright-extractor.d.ts.map +1 -1
  27. package/dist/playwright-extractor.js +24 -14
  28. package/dist/playwright-extractor.js.map +1 -1
  29. package/dist/result-schema-export.d.ts +29 -0
  30. package/dist/result-schema-export.d.ts.map +1 -0
  31. package/dist/result-schema-export.js +37 -0
  32. package/dist/result-schema-export.js.map +1 -0
  33. package/dist/result-schema.d.ts +349 -0
  34. package/dist/result-schema.d.ts.map +1 -0
  35. package/dist/result-schema.js +139 -0
  36. package/dist/result-schema.js.map +1 -0
  37. package/dist/scripts/generate-result-schema.d.ts +10 -0
  38. package/dist/scripts/generate-result-schema.d.ts.map +1 -0
  39. package/dist/scripts/generate-result-schema.js +20 -0
  40. package/dist/scripts/generate-result-schema.js.map +1 -0
  41. package/dist/smart-extractor.d.ts +17 -20
  42. package/dist/smart-extractor.d.ts.map +1 -1
  43. package/dist/smart-extractor.js +116 -80
  44. package/dist/smart-extractor.js.map +1 -1
  45. package/dist/tap-extractor.js +18 -13
  46. package/dist/tap-extractor.js.map +1 -1
  47. package/dist/types.d.ts +18 -65
  48. package/dist/types.d.ts.map +1 -1
  49. package/dist/types.js +3 -0
  50. package/dist/types.js.map +1 -1
  51. package/dist/typescript-extractor.d.ts.map +1 -1
  52. package/dist/typescript-extractor.js +13 -10
  53. package/dist/typescript-extractor.js.map +1 -1
  54. package/dist/utils.d.ts.map +1 -1
  55. package/dist/utils.js +2 -1
  56. package/dist/utils.js.map +1 -1
  57. package/dist/vitest-extractor.d.ts.map +1 -1
  58. package/dist/vitest-extractor.js +310 -163
  59. package/dist/vitest-extractor.js.map +1 -1
  60. package/error-extractor-result.schema.json +134 -0
  61. package/package.json +8 -3
@@ -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
- const unhandledMatch = output.match(/⎯+\s*Unhandled Rejection\s*⎯+\s*\n\s*(Error:[^\n]+(?:\n\s*[^\n❯⎯]+)?)/);
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 = output.match(/❯\s+\S+\s+([\w:/.]+):(\d+):(\d+)/);
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
- for (let i = 0; i < lines.length; i++) {
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
- // Match Format 2: file.test.ts (N tests | M failed) 123ms
74
- // This line declares the file for subsequent × failures
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; // We found Format 2, so skip Format 1 to avoid duplicates
336
+ hasFormat2 = true;
80
337
  continue;
81
338
  }
82
- // Match Format 1: FAIL file.test.ts > test hierarchy
83
- // OR: file.test.ts > test hierarchy
84
- // OR: × file.test.ts > test hierarchy
85
- // BUT: Skip if we've seen Format 2 headers (to avoid processing duplicate FAIL lines)
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
- if (format1Match) {
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
- // Match: AssertionError: expected 3000 to be 9999 // Object.is equality
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
- // Check for standard error patterns
122
- const errorMatch = line.match(/((?:AssertionError|Error):\s*.+)/);
123
- // Check for snapshot failures (doesn't have "Error:" prefix)
124
- const snapshotMatch = line.match(/Snapshot\s+`([^`]+)`\s+mismatched/);
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
- // Capture additional lines (e.g., timeout guidance, long error messages, snapshot diffs)
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 = j - 1; // Skip the lines we just consumed
357
+ i = lastIndex;
184
358
  }
185
359
  continue;
186
360
  }
187
- // Match: test/unit/config/environment.test.ts:57:30
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
- // Try vitest location marker first
191
- const vitestLocation = line.match(/❯\s*(.+\.test\.ts):(\d+):(\d+)/);
192
- if (vitestLocation) {
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
- // Match source line: 57| expect(config.HTTP_PORT).toBe(9999);
204
- if (currentFailure && line.match(/^\s*\d+\|\s+/)) {
205
- const sourceMatch = line.match(/^\s*(\d+)\|\s*(.+)/);
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 && currentFailure.file) {
378
+ if (currentFailure?.file) {
214
379
  failures.push(currentFailure);
215
380
  }
216
- // Extract expected/actual values if present in output
381
+ // Extract expected/actual values and format output
217
382
  const { expected, actual } = extractExpectedActual(output);
218
- // Format output with all extracted information + LLM guidance
219
- const cleanOutput = failures
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, 10).map(f => {
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
- column = parseInt(parts.pop() || '');
257
- line = parseInt(parts.pop() || '');
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 || `Test failure: ${f.testHierarchy}`
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
- totalCount: failures.length,
405
+ totalErrors: failures.length,
268
406
  guidance,
269
- cleanOutput
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
- const confidence = completeness >= 80 ? 90 : (completeness >= 50 ? 70 : 50);
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 = fullOutput.match(/- Expected[^\n]*\n[^\n]*\n- (.+)/);
335
- const actualMatch = fullOutput.match(/\+ Received[^\n]*\n[^\n]*\n\+ (.+)/);
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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"}