@vibe-validate/extractors 0.14.2 → 0.14.3

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 (36) hide show
  1. package/dist/ava-extractor.js +31 -35
  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 +9 -8
  5. package/dist/eslint-extractor.js.map +1 -1
  6. package/dist/jasmine-extractor.d.ts.map +1 -1
  7. package/dist/jasmine-extractor.js +19 -14
  8. package/dist/jasmine-extractor.js.map +1 -1
  9. package/dist/jest-extractor.d.ts.map +1 -1
  10. package/dist/jest-extractor.js +117 -63
  11. package/dist/jest-extractor.js.map +1 -1
  12. package/dist/junit-extractor.d.ts.map +1 -1
  13. package/dist/junit-extractor.js +35 -44
  14. package/dist/junit-extractor.js.map +1 -1
  15. package/dist/mocha-extractor.d.ts.map +1 -1
  16. package/dist/mocha-extractor.js +20 -15
  17. package/dist/mocha-extractor.js.map +1 -1
  18. package/dist/playwright-extractor.d.ts.map +1 -1
  19. package/dist/playwright-extractor.js +19 -9
  20. package/dist/playwright-extractor.js.map +1 -1
  21. package/dist/smart-extractor.d.ts +4 -4
  22. package/dist/smart-extractor.d.ts.map +1 -1
  23. package/dist/smart-extractor.js +59 -48
  24. package/dist/smart-extractor.js.map +1 -1
  25. package/dist/tap-extractor.js +14 -9
  26. package/dist/tap-extractor.js.map +1 -1
  27. package/dist/typescript-extractor.d.ts.map +1 -1
  28. package/dist/typescript-extractor.js +6 -4
  29. package/dist/typescript-extractor.js.map +1 -1
  30. package/dist/utils.d.ts.map +1 -1
  31. package/dist/utils.js +2 -1
  32. package/dist/utils.js.map +1 -1
  33. package/dist/vitest-extractor.d.ts.map +1 -1
  34. package/dist/vitest-extractor.js +280 -160
  35. package/dist/vitest-extractor.js.map +1 -1
  36. package/package.json +1 -1
@@ -5,6 +5,234 @@
5
5
  *
6
6
  * @package @vibe-validate/extractors
7
7
  */
8
+ /**
9
+ * Parse failure line to determine format and extract initial data
10
+ *
11
+ * @param line - Current line being parsed
12
+ * @param currentFile - File path from Format 2 header
13
+ * @param hasFormat2 - Whether Format 2 has been detected
14
+ * @returns Partial failure object or null if no match
15
+ *
16
+ * @internal
17
+ */
18
+ function parseFailureLine(line, currentFile, hasFormat2) {
19
+ // Match Format 1: FAIL file.test.ts > test hierarchy
20
+ // BUT: Skip if we've seen Format 2 headers (to avoid processing duplicate FAIL lines)
21
+ const format1Match = !hasFormat2 && /(?:FAIL|❌|×)\s+([^\s]+\.test\.ts)\s*>\s*(.+)/.exec(line);
22
+ if (format1Match) {
23
+ return {
24
+ file: format1Match[1],
25
+ testHierarchy: format1Match[2].trim(),
26
+ errorMessage: '',
27
+ sourceLine: '',
28
+ location: ''
29
+ };
30
+ }
31
+ // Match Format 2: × test hierarchy (without file path)
32
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses Vitest test framework output (controlled output), limited line length
33
+ const format2Match = /(?:×)\s+(.+?)(?:\s+\d+ms)?$/.exec(line);
34
+ if (format2Match && currentFile) {
35
+ return {
36
+ file: currentFile,
37
+ testHierarchy: format2Match[1].trim(),
38
+ errorMessage: '',
39
+ sourceLine: '',
40
+ location: ''
41
+ };
42
+ }
43
+ return null;
44
+ }
45
+ /**
46
+ * Extract initial error message from line
47
+ *
48
+ * @param line - Line to extract error from
49
+ * @returns Extracted error message
50
+ *
51
+ * @internal
52
+ */
53
+ function extractErrorMessage(line) {
54
+ const errorMatch = /((?:AssertionError|Error):\s*.+)/.exec(line);
55
+ if (errorMatch) {
56
+ return errorMatch[1].trim();
57
+ }
58
+ const format2ErrorMatch = /→\s+(.+)/.exec(line);
59
+ if (format2ErrorMatch) {
60
+ return format2ErrorMatch[1].trim();
61
+ }
62
+ return line.trim();
63
+ }
64
+ /**
65
+ * Check if line is a stop marker for error continuation
66
+ *
67
+ * @param line - Trimmed line to check
68
+ * @returns True if this line marks end of error message
69
+ *
70
+ * @internal
71
+ */
72
+ function isStopMarker(line) {
73
+ return (line.startsWith('❯') ||
74
+ /^\d+\|/.test(line) ||
75
+ line.startsWith('FAIL') ||
76
+ line.startsWith('✓') ||
77
+ line.startsWith('❌') ||
78
+ line.startsWith('×') ||
79
+ line.startsWith('⎯') ||
80
+ line.startsWith('at '));
81
+ }
82
+ /**
83
+ * Append continuation line to error message
84
+ *
85
+ * @param errorMessage - Current error message
86
+ * @param line - Raw line (with indentation)
87
+ * @param trimmedLine - Trimmed version of line
88
+ * @param isSnapshotError - Whether handling snapshot error
89
+ * @returns Updated error message
90
+ *
91
+ * @internal
92
+ */
93
+ function appendContinuationLine(errorMessage, line, trimmedLine, isSnapshotError) {
94
+ if (isSnapshotError) {
95
+ return errorMessage + '\n' + line; // Preserve indentation for diffs
96
+ }
97
+ return errorMessage + ' ' + trimmedLine; // Compact for normal errors
98
+ }
99
+ /**
100
+ * Handle truncation logic for non-snapshot errors
101
+ *
102
+ * @param errorMessage - Current error message
103
+ * @param nextLine - Next trimmed line
104
+ * @param isSnapshotError - Whether handling snapshot error
105
+ * @param linesConsumed - Number of lines consumed so far
106
+ * @param maxLines - Maximum continuation lines allowed
107
+ * @returns Object with updated message and whether to stop
108
+ *
109
+ * @internal
110
+ */
111
+ function handleTruncation(errorMessage, nextLine, isSnapshotError, linesConsumed, maxLines) {
112
+ if (isSnapshotError || linesConsumed < maxLines) {
113
+ return { errorMessage, shouldStop: false };
114
+ }
115
+ const updatedMessage = nextLine ? errorMessage + ' ...(truncated)' : errorMessage;
116
+ return { errorMessage: updatedMessage, shouldStop: true };
117
+ }
118
+ /**
119
+ * Parse error message with continuation line handling
120
+ *
121
+ * @param lines - All output lines
122
+ * @param startIndex - Index where error message starts
123
+ * @param isSnapshotError - Whether this is a snapshot error (different continuation rules)
124
+ * @returns Error message and index of last consumed line
125
+ *
126
+ * @internal
127
+ */
128
+ function parseErrorMessage(lines, startIndex, isSnapshotError) {
129
+ let errorMessage = extractErrorMessage(lines[startIndex]);
130
+ const MAX_CONTINUATION_LINES = 5;
131
+ let j = startIndex + 1;
132
+ let linesConsumed = 0;
133
+ while (j < lines.length) {
134
+ const nextLine = lines[j].trim();
135
+ if (isStopMarker(nextLine)) {
136
+ break;
137
+ }
138
+ // Check truncation limit for non-snapshot errors
139
+ const truncation = handleTruncation(errorMessage, nextLine, isSnapshotError, linesConsumed, MAX_CONTINUATION_LINES);
140
+ if (truncation.shouldStop) {
141
+ errorMessage = truncation.errorMessage;
142
+ break;
143
+ }
144
+ // For non-snapshot errors, stop at blank lines
145
+ if (!nextLine && !isSnapshotError) {
146
+ break;
147
+ }
148
+ // Add line to error message
149
+ if (nextLine || isSnapshotError) {
150
+ errorMessage = appendContinuationLine(errorMessage, lines[j], nextLine, isSnapshotError);
151
+ if (!isSnapshotError) {
152
+ linesConsumed++;
153
+ }
154
+ }
155
+ j++;
156
+ }
157
+ return { errorMessage, lastIndex: j - 1 };
158
+ }
159
+ /**
160
+ * Parse location from vitest marker or stack trace
161
+ *
162
+ * @param line - Line to parse
163
+ * @returns Location string (file:line:column) or null
164
+ *
165
+ * @internal
166
+ */
167
+ function parseLocation(line) {
168
+ // Try vitest location marker first
169
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses Vitest test framework location markers (controlled output), not user input
170
+ const vitestLocation = /❯\s*(.+\.test\.ts):(\d+):(\d+)/.exec(line);
171
+ if (vitestLocation) {
172
+ return `${vitestLocation[1]}:${vitestLocation[2]}:${vitestLocation[3]}`;
173
+ }
174
+ // Try stack trace pattern
175
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses Vitest test framework stack traces (controlled output), not user input
176
+ const stackLocation = /at\s+.+\(([^\s]+\.test\.ts):(\d+):(\d+)\)/.exec(line);
177
+ if (stackLocation) {
178
+ return `${stackLocation[1]}:${stackLocation[2]}:${stackLocation[3]}`;
179
+ }
180
+ return null;
181
+ }
182
+ /**
183
+ * Format failures into clean output
184
+ *
185
+ * @param failures - Extracted test failures
186
+ * @param expected - Expected value (if present)
187
+ * @param actual - Actual value (if present)
188
+ * @returns Formatted output string
189
+ *
190
+ * @internal
191
+ */
192
+ function formatFailuresOutput(failures, expected, actual) {
193
+ return failures
194
+ .slice(0, 10)
195
+ .map((f, idx) => {
196
+ const parts = [
197
+ `[Test ${idx + 1}/${failures.length}] ${f.location ?? f.file}`,
198
+ '',
199
+ `Test: ${f.testHierarchy}`,
200
+ `Error: ${f.errorMessage}`,
201
+ ];
202
+ if (expected && actual) {
203
+ parts.push(`Expected: ${expected}`, `Actual: ${actual}`);
204
+ }
205
+ if (f.sourceLine) {
206
+ parts.push('', f.sourceLine);
207
+ }
208
+ return parts.filter(p => p).join('\n');
209
+ })
210
+ .join('\n\n');
211
+ }
212
+ /**
213
+ * Generate LLM-friendly guidance based on failures
214
+ *
215
+ * @param failureCount - Number of failures
216
+ * @param expected - Expected value (if present)
217
+ * @param actual - Actual value (if present)
218
+ * @returns Guidance text
219
+ *
220
+ * @internal
221
+ */
222
+ function generateGuidanceText(failureCount, expected, actual) {
223
+ let guidance = `${failureCount} test(s) failed. `;
224
+ if (failureCount === 1) {
225
+ guidance += 'Fix the assertion in the test file at the location shown. ';
226
+ if (expected && actual) {
227
+ guidance += `The test expected "${expected}" but got "${actual}". `;
228
+ }
229
+ guidance += 'Run: npm test -- <test-file> to verify the fix.';
230
+ }
231
+ else {
232
+ guidance += 'Fix each failing test individually. Run: npm test -- <test-file> to test each file.';
233
+ }
234
+ return guidance;
235
+ }
8
236
  /**
9
237
  * Extract runtime errors (Unhandled Rejection, ENOENT, etc.)
10
238
  *
@@ -13,7 +241,8 @@
13
241
  */
14
242
  function extractRuntimeError(output) {
15
243
  // Look for "Unhandled Rejection" section
16
- const unhandledMatch = output.match(/⎯+\s*Unhandled Rejection\s*⎯+\s*\n\s*(Error:[^\n]+(?:\n\s*[^\n❯⎯]+)?)/);
244
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses Vitest test framework runtime errors (controlled output), not user input
245
+ const unhandledMatch = /⎯+\s*Unhandled Rejection\s*⎯+\s*\n\s*(Error:[^\n]+(?:\n\s*[^\n❯⎯]+)?)/.exec(output);
17
246
  if (!unhandledMatch) {
18
247
  return null;
19
248
  }
@@ -21,7 +250,7 @@ function extractRuntimeError(output) {
21
250
  const errorMessage = unhandledMatch[1].trim().replace(/\n\s+/g, ' ');
22
251
  // Extract location from stack trace (❯ function file:line:col)
23
252
  // 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+)/);
253
+ const locationMatch = /❯\s+\S+\s+([\w:/.]+):(\d+):(\d+)/.exec(output);
25
254
  let file = 'unknown';
26
255
  let location = '';
27
256
  if (locationMatch) {
@@ -57,6 +286,7 @@ function extractRuntimeError(output) {
57
286
  * console.log(result.guidance); // "Fix each failing test individually..."
58
287
  * ```
59
288
  */
289
+ // 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
290
  export function extractVitestErrors(output, options) {
61
291
  const lines = output.split('\n');
62
292
  const failures = [];
@@ -68,184 +298,63 @@ export function extractVitestErrors(output, options) {
68
298
  if (runtimeError) {
69
299
  failures.push(runtimeError);
70
300
  }
71
- for (let i = 0; i < lines.length; i++) {
301
+ let i = -1;
302
+ while (i < lines.length - 1) {
303
+ i++; // Increment at start so 'continue' statements don't bypass it
72
304
  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+\(/);
305
+ // Check for Format 2 file header
306
+ const fileHeaderMatch = /❯\s+([^\s]+\.test\.ts)\s+\(/.exec(line);
77
307
  if (fileHeaderMatch) {
78
308
  currentFile = fileHeaderMatch[1];
79
- hasFormat2 = true; // We found Format 2, so skip Format 1 to avoid duplicates
309
+ hasFormat2 = true;
80
310
  continue;
81
311
  }
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) {
312
+ // Try to parse as failure line (Format 1 or Format 2)
313
+ const parsedFailure = parseFailureLine(line, currentFile, hasFormat2);
314
+ if (parsedFailure) {
315
+ if (currentFailure?.file) {
92
316
  failures.push(currentFailure);
93
317
  }
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
- }
318
+ currentFailure = parsedFailure;
114
319
  continue;
115
320
  }
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)
321
+ // Parse error message if we have a current failure
120
322
  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
- }
323
+ const snapshotMatch = /Snapshot\s+`([^`]+)`\s+mismatched/.exec(line);
324
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Need to check truthy regex matches, not just null/undefined
325
+ const hasError = /((?:AssertionError|Error):\s*.+)/.exec(line) || /→\s+(.+)/.exec(line) || snapshotMatch;
326
+ if (hasError) {
139
327
  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
- }
328
+ const { errorMessage, lastIndex } = parseErrorMessage(lines, i, isSnapshotError);
182
329
  currentFailure.errorMessage = errorMessage;
183
- i = j - 1; // Skip the lines we just consumed
330
+ i = lastIndex;
184
331
  }
185
332
  continue;
186
333
  }
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)
334
+ // Parse location if we have a current failure
189
335
  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]}`;
336
+ const location = parseLocation(line);
337
+ if (location) {
338
+ currentFailure.location = location;
200
339
  continue;
201
340
  }
202
341
  }
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*(.+)/);
342
+ // Parse source line
343
+ if (currentFailure && /^\s*\d+\|\s+/.exec(line)) {
344
+ const sourceMatch = /^\s*(\d+)\|\s*(.+)/.exec(line);
206
345
  if (sourceMatch) {
207
346
  currentFailure.sourceLine = `${sourceMatch[1]}| ${sourceMatch[2].trim()}`;
208
347
  }
209
- continue;
210
348
  }
211
349
  }
212
350
  // Add last failure
213
- if (currentFailure && currentFailure.file) {
351
+ if (currentFailure?.file) {
214
352
  failures.push(currentFailure);
215
353
  }
216
- // Extract expected/actual values if present in output
354
+ // Extract expected/actual values and format output
217
355
  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
- }
356
+ const cleanOutput = formatFailuresOutput(failures, expected, actual);
357
+ const guidance = generateGuidanceText(failures.length, expected, actual);
249
358
  const result = {
250
359
  errors: failures.slice(0, 10).map(f => {
251
360
  // Parse line:column from end of location string (file paths may contain colons)
@@ -253,14 +362,16 @@ export function extractVitestErrors(output, options) {
253
362
  let column;
254
363
  if (f.location) {
255
364
  const parts = f.location.split(':');
256
- column = parseInt(parts.pop() || '');
257
- line = parseInt(parts.pop() || '');
365
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Need to filter empty strings for parseInt, not just null/undefined
366
+ column = Number.parseInt(parts.pop() || '');
367
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Need to filter empty strings for parseInt, not just null/undefined
368
+ line = Number.parseInt(parts.pop() || '');
258
369
  }
259
370
  return {
260
371
  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}`
372
+ line: line !== undefined && !Number.isNaN(line) ? line : undefined,
373
+ column: column !== undefined && !Number.isNaN(column) ? column : undefined,
374
+ message: f.errorMessage
264
375
  };
265
376
  }),
266
377
  summary: `${failures.length} test failure(s)`,
@@ -295,7 +406,16 @@ function calculateExtractionQuality(failures, options) {
295
406
  : 100;
296
407
  // Confidence: based on how well patterns matched
297
408
  // High confidence if most failures have complete data
298
- const confidence = completeness >= 80 ? 90 : (completeness >= 50 ? 70 : 50);
409
+ let confidence;
410
+ if (completeness >= 80) {
411
+ confidence = 90;
412
+ }
413
+ else if (completeness >= 50) {
414
+ confidence = 70;
415
+ }
416
+ else {
417
+ confidence = 50;
418
+ }
299
419
  // Issues encountered
300
420
  const issues = [];
301
421
  if (withFile < failures.length) {
@@ -331,8 +451,8 @@ function calculateExtractionQuality(failures, options) {
331
451
  * @returns Expected and actual values (if found)
332
452
  */
333
453
  function extractExpectedActual(fullOutput) {
334
- const expectedMatch = fullOutput.match(/- Expected[^\n]*\n[^\n]*\n- (.+)/);
335
- const actualMatch = fullOutput.match(/\+ Received[^\n]*\n[^\n]*\n\+ (.+)/);
454
+ const expectedMatch = /- Expected[^\n]*\n[^\n]*\n- (.+)/.exec(fullOutput);
455
+ const actualMatch = /\+ Received[^\n]*\n[^\n]*\n\+ (.+)/.exec(fullOutput);
336
456
  return {
337
457
  expected: expectedMatch ? expectedMatch[1].trim() : undefined,
338
458
  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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibe-validate/extractors",
3
- "version": "0.14.2",
3
+ "version": "0.14.3",
4
4
  "description": "LLM-optimized error extractors for validation output",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",