@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
@@ -18,7 +18,7 @@ import { stripAnsiCodes } from './utils.js';
18
18
  /**
19
19
  * Auto-detect tool type from output patterns and extract errors
20
20
  *
21
- * Detection is 100% pattern-based - context parameter is NOT used for routing decisions.
21
+ * Detection is 100% pattern-based from output analysis only.
22
22
  * This ensures robust detection regardless of how users name their validation steps.
23
23
  *
24
24
  * Auto-detection rules (checked in order):
@@ -26,32 +26,34 @@ import { stripAnsiCodes } from './utils.js';
26
26
  * 2. **ESLint**: `✖ X problems` summary or `line:col error/warning` format
27
27
  * 3. **JUnit XML**: `<?xml` + `<testsuite>` tags
28
28
  * 4. **Jasmine**: `Failures:` header + numbered list (`1) test name`)
29
- * 5. **Mocha**: `X passing`/`X failing` summary + numbered list
30
- * 6. **Playwright**: `.spec.ts` files + numbered failures with `›` separator
31
- * 7. **Jest**: `FAIL`/`PASS`/`●` markers or `Test Suites:` summary
32
- * 8. **Vitest**: `✓`/`✕` symbols or `Test Files` summary
29
+ * 5. **Jest**: `●` bullets or `Test Suites:` summary (checked before Mocha)
30
+ * 6. **Mocha**: `X passing`/`X failing` summary + numbered list
31
+ * 7. **Playwright**: `.spec.ts` files + numbered failures with `›` separator
32
+ * 8. **Vitest**: `×`/`❯`/`❌` symbols + `Test Files` summary
33
33
  * 9. **Generic**: Fallback for all other formats
34
34
  *
35
- * @param context - Context string (e.g., step name) preserved for generic extractor error messages only
36
- * @param output - Raw command output (may contain ANSI color codes)
35
+ * @param input - Raw command output (string) or separated streams (ExtractorInput)
37
36
  * @returns Structured error information from appropriate extractor
38
37
  *
39
38
  * @example
40
39
  * ```typescript
41
- * // TypeScript detection (from "error TS2322:" pattern, not context)
42
- * const result1 = autoDetectAndExtract('Build', tscOutput);
43
- * // Uses extractTypeScriptErrors
40
+ * // Legacy usage (string)
41
+ * const result1 = autoDetectAndExtract(tscOutput);
44
42
  *
45
- * // Jest detection (from "FAIL" markers, not context)
46
- * const result2 = autoDetectAndExtract('Validation', jestOutput);
47
- * // Uses extractJestErrors
48
- *
49
- * // Vitest detection (from "✓" symbols, not context)
50
- * const result3 = autoDetectAndExtract('Check', vitestOutput);
51
- * // Uses extractVitestErrors
43
+ * // New usage (separated streams)
44
+ * const result2 = autoDetectAndExtract({
45
+ * stdout: stdoutString,
46
+ * stderr: stderrString,
47
+ * combined: combinedString
48
+ * });
52
49
  * ```
53
50
  */
54
- export function autoDetectAndExtract(context, output) {
51
+ // eslint-disable-next-line sonarjs/cognitive-complexity -- Complexity 26 acceptable for smart extractor (sequentially detects 9 different test framework output formats with pattern matching)
52
+ export function autoDetectAndExtract(input) {
53
+ // Normalize input to string for backwards compatibility
54
+ // Most extractors currently use combined output, but this structure
55
+ // allows future extractors to be stream-specific
56
+ const output = typeof input === 'string' ? input : input.combined;
55
57
  // CRITICAL: Strip ANSI codes centrally before routing to extractors
56
58
  //
57
59
  // Design Decision: Central stripping (DRY & fail-safe)
@@ -65,44 +67,97 @@ export function autoDetectAndExtract(context, output) {
65
67
  // - Impossible to forget (enforced for all extractors)
66
68
  // - Consistent behavior across all extraction paths
67
69
  // - Easier to maintain and test
68
- const cleanOutput = stripAnsiCodes(output);
70
+ const errorSummary = stripAnsiCodes(output);
69
71
  // TypeScript detection: Check for TypeScript compiler error patterns
70
72
  // - "error TS####:" (error code like TS2322, TS2345)
71
73
  // - Format: file.ts(line,col): error TS####:
72
- const hasTypeScriptMarkers = cleanOutput.match(/error TS\d+:/);
74
+ const hasTypeScriptMarkers = /error TS\d+:/.exec(errorSummary);
73
75
  if (hasTypeScriptMarkers) {
74
- const result = extractTypeScriptErrors(cleanOutput);
76
+ const result = extractTypeScriptErrors(errorSummary);
75
77
  return addDetectionMetadata(result, 'typescript', 95, ['error TS#### pattern'], 'TypeScript compiler error format detected');
76
78
  }
77
79
  // ESLint detection: Check for ESLint-specific patterns
78
80
  // - "✖ X problem(s)" summary line
79
81
  // - File paths with line:col followed by error/warning (with optional colon)
80
- const hasESLintMarkers = cleanOutput.match(/✖ \d+ problems?/) ||
81
- cleanOutput.match(/\d+:\d+:?\s+(error|warning)\s+/);
82
+ const hasESLintMarkers =
83
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Boolean OR for pattern matching, not nullish check
84
+ /✖ \d+ problems?/.exec(errorSummary) ||
85
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects ESLint output format (controlled linter output), limited input size
86
+ /\d+:\d+:?\s+(error|warning)\s+/.exec(errorSummary);
82
87
  if (hasESLintMarkers) {
83
- const result = extractESLintErrors(cleanOutput);
88
+ const result = extractESLintErrors(errorSummary);
84
89
  const patterns = [];
85
- if (cleanOutput.match(/✖ \d+ problems?/))
90
+ if (/✖ \d+ problems?/.exec(errorSummary))
86
91
  patterns.push('✖ X problems summary');
87
- if (cleanOutput.match(/\d+:\d+:?\s+(error|warning)\s+/))
92
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects ESLint output format (controlled linter output), limited input size
93
+ if (/\d+:\d+:?\s+(error|warning)\s+/.exec(errorSummary))
88
94
  patterns.push('line:col error/warning format');
89
95
  return addDetectionMetadata(result, 'eslint', 90, patterns, 'ESLint error format detected');
90
96
  }
97
+ // Vitest priority detection: Check for "RUN v" pattern (100% unique to vitest)
98
+ // CRITICAL: Must check BEFORE Jest to prevent false positives
99
+ // Jest's loose ● detection can match test names that mention Jest patterns
100
+ // (e.g., "should detect Jest from ● bullet marker")
101
+ // The "RUN v" pattern at the start of vitest output is unmistakable
102
+ // Note: Allow optional leading whitespace (ANSI stripping can leave spaces)
103
+ // eslint-disable-next-line sonarjs/slow-regex -- False positive: regex is anchored and has limited repetition
104
+ if (/^\s*RUN\s+v\d+\.\d+\.\d+/m.test(errorSummary)) {
105
+ const result = extractVitestErrors(errorSummary);
106
+ const patterns = ['RUN v#### version header'];
107
+ if (errorSummary.includes('×'))
108
+ patterns.push('× symbol (U+00D7)');
109
+ if (errorSummary.includes('❌'))
110
+ patterns.push('❌ cross mark');
111
+ if (errorSummary.includes(' ❯ '))
112
+ patterns.push('❯ arrow marker');
113
+ if (errorSummary.includes('Test Files'))
114
+ patterns.push('Test Files summary');
115
+ if (errorSummary.includes('.test.ts'))
116
+ patterns.push('.test.ts files');
117
+ if (/FAIL\s+\d+\s+test\s+(file|case)/i.exec(errorSummary))
118
+ patterns.push('FAIL N test files/cases pattern');
119
+ return addDetectionMetadata(result, 'vitest', 100, patterns, 'Vitest test output format detected (RUN v#### header)');
120
+ }
91
121
  // Auto-detect JUnit XML format
92
122
  // Must have both <?xml at start of line AND <testsuite tag (not just mentioned in text)
93
- if (cleanOutput.match(/^<\?xml\s+/m) && cleanOutput.includes('<testsuite')) {
94
- const result = extractJUnitErrors(cleanOutput);
123
+ if (/^<\?xml\s+/m.exec(errorSummary) && errorSummary.includes('<testsuite')) {
124
+ const result = extractJUnitErrors(errorSummary);
95
125
  return addDetectionMetadata(result, 'junit', 100, ['<?xml header', '<testsuite> tag'], 'JUnit XML format detected');
96
126
  }
97
127
  // Auto-detect Jasmine format (distinctive "Failures:" header)
98
- if (cleanOutput.includes('Failures:') && cleanOutput.match(/^\d+\)\s+/m)) {
99
- const result = extractJasmineErrors(cleanOutput);
128
+ if (errorSummary.includes('Failures:') && /^\d+\)\s+/m.exec(errorSummary)) {
129
+ const result = extractJasmineErrors(errorSummary);
100
130
  return addDetectionMetadata(result, 'jasmine', 85, ['Failures: header', 'numbered test list'], 'Jasmine test output format detected');
101
131
  }
132
+ // Jest detection: Check output for Jest-specific patterns
133
+ // CRITICAL: Must check BEFORE Mocha to avoid false positives
134
+ // - "●" bullet marker for detailed errors (Jest-specific, Vitest uses ×)
135
+ // - "Test Suites:" summary line (Jest-specific, Vitest uses "Test Files")
136
+ // Jest patterns are highly distinctive (confidence 90) vs Mocha's generic patterns (confidence 80)
137
+ // Mocha's "passing"/"failing" patterns can appear in Jest test names, causing misdetection
138
+ const hasJestMarkers = errorSummary.includes('●') ||
139
+ errorSummary.includes('Test Suites:');
140
+ if (hasJestMarkers) {
141
+ const result = extractJestErrors(errorSummary);
142
+ const patterns = [];
143
+ if (errorSummary.includes('●'))
144
+ patterns.push('● bullet marker');
145
+ if (errorSummary.includes('Test Suites:'))
146
+ patterns.push('Test Suites: summary');
147
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects Jest test framework output format (controlled test framework output), not user input
148
+ if (/^\s*FAIL\s+/m.exec(errorSummary))
149
+ patterns.push('FAIL marker');
150
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects Jest test framework output format (controlled test framework output), not user input
151
+ if (/^\s*PASS\s+/m.exec(errorSummary))
152
+ patterns.push('PASS marker');
153
+ return addDetectionMetadata(result, 'jest', 90, patterns, 'Jest test output format detected');
154
+ }
102
155
  // Auto-detect Mocha format (distinctive "X passing"/"X failing" pattern)
103
- if ((cleanOutput.includes(' passing') || cleanOutput.includes(' failing')) &&
104
- cleanOutput.match(/\s+\d+\)\s+/)) {
105
- const result = extractMochaErrors(cleanOutput);
156
+ // NOTE: Checked AFTER Jest because "passing"/"failing" can appear in Jest test names
157
+ if ((errorSummary.includes(' passing') || errorSummary.includes(' failing')) &&
158
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects Mocha test framework output format (controlled test framework output), not user input
159
+ /\s+\d+\)\s+/.exec(errorSummary)) {
160
+ const result = extractMochaErrors(errorSummary);
106
161
  return addDetectionMetadata(result, 'mocha', 80, ['passing/failing summary', 'numbered failures'], 'Mocha test output format detected');
107
162
  }
108
163
  // Playwright detection: Check for Playwright-specific patterns
@@ -110,43 +165,25 @@ export function autoDetectAndExtract(context, output) {
110
165
  // - Numbered failures with › separator: "1) file.spec.ts:26:5 › test name"
111
166
  // - ✘ symbol followed by .spec.ts file path
112
167
  // IMPORTANT: Require .spec.ts with › separator OR ✘ + .spec.ts (not just mentioned in text)
113
- // Must check BEFORE Jest/Vitest to avoid misdetection
114
- const hasPlaywrightMarkers = (cleanOutput.includes('.spec.ts') &&
115
- (cleanOutput.match(/\d+\)\s+.*\.spec\.ts:\d+:\d+\s+›/) ||
116
- cleanOutput.match(/✘.*\.spec\.ts/)));
168
+ // Must check BEFORE Vitest to avoid misdetection (.spec.ts vs .test.ts)
169
+ const hasPlaywrightMarkers = (errorSummary.includes('.spec.ts') &&
170
+ // eslint-disable-next-line sonarjs/slow-regex, @typescript-eslint/prefer-nullish-coalescing -- Safe: only detects Playwright test framework output format (controlled test framework output), not user input. Boolean OR for pattern matching.
171
+ (/\d+\)\s+.*\.spec\.ts:\d+:\d+\s+›/.exec(errorSummary) ||
172
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects Playwright test framework output format (controlled test framework output), not user input
173
+ /✘.*\.spec\.ts/.exec(errorSummary)));
117
174
  if (hasPlaywrightMarkers) {
118
- const result = extractPlaywrightErrors(cleanOutput);
175
+ const result = extractPlaywrightErrors(errorSummary);
119
176
  const patterns = [];
120
- if (cleanOutput.includes('.spec.ts'))
177
+ if (errorSummary.includes('.spec.ts'))
121
178
  patterns.push('.spec.ts files');
122
- if (cleanOutput.match(/\d+\)\s+.*\.spec\.ts:\d+:\d+\s+›/))
179
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects Playwright test framework output format (controlled test framework output), not user input
180
+ if (/\d+\)\s+.*\.spec\.ts:\d+:\d+\s+›/.exec(errorSummary))
123
181
  patterns.push('numbered failures with › separator');
124
- if (cleanOutput.match(/✘.*\.spec\.ts/))
182
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects Playwright test framework output format (controlled test framework output), not user input
183
+ if (/✘.*\.spec\.ts/.exec(errorSummary))
125
184
  patterns.push('✘ failure with .spec.ts file');
126
185
  return addDetectionMetadata(result, 'playwright', 95, patterns, 'Playwright test output format detected');
127
186
  }
128
- // Jest detection: Check output for Jest-specific patterns FIRST (before Vitest)
129
- // Jest has very distinctive markers that should be checked first to avoid misdetection
130
- // - " ● " bullet marker for detailed errors (Jest-specific, Vitest uses ×)
131
- // - "Test Suites:" summary line (Jest-specific, Vitest uses "Test Files")
132
- // NOTE: We don't use "FAIL" alone because Vitest also uses it (e.g., "FAIL tests/...")
133
- // CRITICAL: Must check BEFORE Vitest because Jest stack traces can contain ❯ symbol
134
- // from source code (e.g., in comments), which would trigger Vitest detection
135
- const hasJestMarkers = cleanOutput.includes(' ● ') ||
136
- cleanOutput.includes('Test Suites:');
137
- if (hasJestMarkers) {
138
- const result = extractJestErrors(cleanOutput);
139
- const patterns = [];
140
- if (cleanOutput.includes(' ● '))
141
- patterns.push('● bullet marker');
142
- if (cleanOutput.includes('Test Suites:'))
143
- patterns.push('Test Suites: summary');
144
- if (cleanOutput.match(/^\s*FAIL\s+/m))
145
- patterns.push('FAIL marker');
146
- if (cleanOutput.match(/^\s*PASS\s+/m))
147
- patterns.push('PASS marker');
148
- return addDetectionMetadata(result, 'jest', 90, patterns, 'Jest test output format detected');
149
- }
150
187
  // Vitest detection: Check output for Vitest-specific patterns
151
188
  // - "×" symbol (U+00D7 multiplication, Vitest-specific - Jest uses ✕ U+2715)
152
189
  // - "❌" cross mark symbol (Vitest failure marker in some formats)
@@ -157,27 +194,28 @@ export function autoDetectAndExtract(context, output) {
157
194
  // NOTE: Both Vitest and Jest use ✓ (check mark), so we don't check for it alone
158
195
  // IMPORTANT: Require MULTIPLE patterns together to avoid false positives
159
196
  // (e.g., ❯ can appear in Jest stack traces from source code comments)
160
- const hasVitestMarkers = (cleanOutput.includes('×') || cleanOutput.includes(' ❯ ') || cleanOutput.includes('❌')) &&
161
- (cleanOutput.includes('Test Files') || cleanOutput.match(/FAIL\s+\d+\s+test\s+(file|case)/i) || cleanOutput.includes('.test.ts'));
197
+ const hasVitestMarkers = (errorSummary.includes('×') || errorSummary.includes(' ❯ ') || errorSummary.includes('❌')) &&
198
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Boolean OR for pattern matching, not nullish check
199
+ (errorSummary.includes('Test Files') || /FAIL\s+\d+\s+test\s+(file|case)/i.exec(errorSummary) || errorSummary.includes('.test.ts'));
162
200
  if (hasVitestMarkers) {
163
- const result = extractVitestErrors(cleanOutput);
201
+ const result = extractVitestErrors(errorSummary);
164
202
  const patterns = [];
165
- if (cleanOutput.includes('×'))
203
+ if (errorSummary.includes('×'))
166
204
  patterns.push('× symbol (U+00D7)');
167
- if (cleanOutput.includes('❌'))
205
+ if (errorSummary.includes('❌'))
168
206
  patterns.push('❌ cross mark');
169
- if (cleanOutput.includes(' ❯ '))
207
+ if (errorSummary.includes(' ❯ '))
170
208
  patterns.push('❯ arrow marker');
171
- if (cleanOutput.includes('Test Files'))
209
+ if (errorSummary.includes('Test Files'))
172
210
  patterns.push('Test Files summary');
173
- if (cleanOutput.includes('.test.ts'))
211
+ if (errorSummary.includes('.test.ts'))
174
212
  patterns.push('.test.ts files');
175
- if (cleanOutput.match(/FAIL\s+\d+\s+test\s+(file|case)/i))
213
+ if (/FAIL\s+\d+\s+test\s+(file|case)/i.exec(errorSummary))
176
214
  patterns.push('FAIL N test files/cases pattern');
177
215
  return addDetectionMetadata(result, 'vitest', 90, patterns, 'Vitest test output format detected');
178
216
  }
179
217
  // No specific pattern detected - use generic extractor
180
- const result = extractGenericErrors(cleanOutput, context);
218
+ const result = extractGenericErrors(errorSummary);
181
219
  return addDetectionMetadata(result, 'generic', 50, ['no specific patterns'], 'No specific tool detected, using generic extractor');
182
220
  }
183
221
  /**
@@ -219,13 +257,11 @@ export function autoDetectAndExtract(context, output) {
219
257
  function addDetectionMetadata(result, extractor, confidence, patterns, reason) {
220
258
  // Only add detection metadata if it doesn't already exist
221
259
  // (individual extractors might have their own metadata)
222
- if (!result.metadata) {
223
- result.metadata = {
224
- confidence: 100,
225
- completeness: 100,
226
- issues: [],
227
- };
228
- }
260
+ result.metadata ??= {
261
+ confidence: 100,
262
+ completeness: 100,
263
+ issues: [],
264
+ };
229
265
  result.metadata.detection = {
230
266
  extractor,
231
267
  confidence,
@@ -1 +1 @@
1
- {"version":3,"file":"smart-extractor.js","sourceRoot":"","sources":["../src/smart-extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"smart-extractor.js","sourceRoot":"","sources":["../src/smart-extractor.ts"],"names":[],"mappings":"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"}
@@ -27,8 +27,8 @@ export function extractTAPErrors(output) {
27
27
  return {
28
28
  summary: '0 test(s) failed',
29
29
  errors: [],
30
- totalCount: 0,
31
- cleanOutput: '',
30
+ totalErrors: 0,
31
+ errorSummary: '',
32
32
  guidance: '',
33
33
  metadata: {
34
34
  confidence: 100,
@@ -40,9 +40,9 @@ export function extractTAPErrors(output) {
40
40
  const errors = [];
41
41
  let completeCount = 0;
42
42
  for (const failure of failures) {
43
- const file = failure.file || undefined;
44
- const message = failure.message || 'Test failed';
45
- const context = failure.testName || '';
43
+ const file = failure.file ?? undefined;
44
+ const message = failure.message ?? 'Test failed';
45
+ const context = failure.testName ?? '';
46
46
  const isComplete = file && failure.line && message;
47
47
  if (isComplete) {
48
48
  completeCount++;
@@ -70,8 +70,8 @@ export function extractTAPErrors(output) {
70
70
  return {
71
71
  summary,
72
72
  errors,
73
- totalCount: failures.length,
74
- cleanOutput: formatCleanOutput(errors),
73
+ totalErrors: failures.length,
74
+ errorSummary: formatCleanOutput(errors),
75
75
  guidance,
76
76
  metadata
77
77
  };
@@ -79,6 +79,7 @@ export function extractTAPErrors(output) {
79
79
  /**
80
80
  * Extract all failures from TAP output
81
81
  */
82
+ // eslint-disable-next-line sonarjs/cognitive-complexity -- Complexity 17 acceptable for TAP output parsing (handles test comments, failure markers, and YAML diagnostic blocks)
82
83
  function extractFailures(output) {
83
84
  const failures = [];
84
85
  const lines = output.split('\n');
@@ -93,7 +94,8 @@ function extractFailures(output) {
93
94
  continue;
94
95
  }
95
96
  // Look for failures: "not ok N message"
96
- const failureMatch = line.match(/^not ok\s+\d+\s+(.+)$/);
97
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses TAP test framework output (controlled output), not user input
98
+ const failureMatch = /^not ok\s+\d+\s+(.+)$/.exec(line);
97
99
  if (failureMatch) {
98
100
  const message = failureMatch[1].trim();
99
101
  const failure = {
@@ -109,7 +111,8 @@ function extractFailures(output) {
109
111
  // Extract location from "at:" field
110
112
  // Format: "at: Test.<anonymous> (file:///path/to/file.js:line:col)"
111
113
  // or: "at: file.js:line:col"
112
- const atMatch = yamlLine.match(/^\s+at:\s+(.+)$/);
114
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses TAP test framework YAML diagnostics (controlled output), not user input
115
+ const atMatch = /^\s+at:\s+(.+)$/.exec(yamlLine);
113
116
  if (atMatch) {
114
117
  const location = atMatch[1];
115
118
  const { file, line } = parseLocation(location);
@@ -141,17 +144,18 @@ function extractFailures(output) {
141
144
  */
142
145
  function parseLocation(location) {
143
146
  // Try to extract from parentheses first: (file:///path:line:col) or (path:line:col)
144
- const parenMatch = location.match(/\(([^)]+)\)/);
147
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses TAP test framework location strings (controlled output), not user input
148
+ const parenMatch = /\(([^)]+)\)/.exec(location);
145
149
  const pathString = parenMatch ? parenMatch[1] : location;
146
150
  // Remove file:// protocol if present
147
151
  const cleanPath = pathString.replace(/^file:\/\//, '');
148
152
  // Extract file path and line number
149
153
  // Format: /path/to/file.js:line:col or path/to/file.js:line:col
150
- const match = cleanPath.match(/^(.+):(\d+):\d+$/);
154
+ const match = /^(.+):(\d+):\d+$/.exec(cleanPath);
151
155
  if (match) {
152
156
  return {
153
157
  file: match[1],
154
- line: parseInt(match[2], 10)
158
+ line: Number.parseInt(match[2], 10)
155
159
  };
156
160
  }
157
161
  return {};
@@ -215,8 +219,9 @@ function formatCleanOutput(errors) {
215
219
  }
216
220
  return errors
217
221
  .map(error => {
222
+ const linePart = error.line ? `:${error.line}` : '';
218
223
  const location = error.file
219
- ? `${error.file}${error.line ? `:${error.line}` : ''}`
224
+ ? `${error.file}${linePart}`
220
225
  : 'unknown location';
221
226
  const context = error.context ? `[${error.context}] ` : '';
222
227
  return `${location}: ${context}${error.message}`;
@@ -1 +1 @@
1
- {"version":3,"file":"tap-extractor.js","sourceRoot":"","sources":["../src/tap-extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tap-extractor.js","sourceRoot":"","sources":["../src/tap-extractor.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -3,75 +3,28 @@
3
3
  *
4
4
  * Type definitions for LLM-optimized error extraction.
5
5
  *
6
+ * NOTE: These types are now derived from Zod schemas in result-schema.ts
7
+ * This file re-exports them for backward compatibility.
8
+ *
6
9
  * @package @vibe-validate/extractors
7
10
  */
11
+ import type { ErrorExtractorResult as ExtractorResult } from './result-schema.js';
12
+ export type { FormattedError, DetectionMetadata, ExtractionMetadata, ErrorExtractorResult, } from './result-schema.js';
8
13
  /**
9
- * Structured error information extracted from validation output
10
- */
11
- export interface FormattedError {
12
- /** File path where the error occurred (undefined if location cannot be determined) */
13
- file?: string;
14
- /** Line number (1-indexed) */
15
- line?: number;
16
- /** Column number (1-indexed) */
17
- column?: number;
18
- /** Error message */
19
- message: string;
20
- /** Error code (e.g., TS2322, ESLint rule name) */
21
- code?: string;
22
- /** Severity level */
23
- severity?: 'error' | 'warning';
24
- /** Additional context (surrounding code, stack trace excerpt) */
25
- context?: string;
26
- /** Guidance for fixing the error */
27
- guidance?: string;
28
- }
29
- /**
30
- * Metadata about which extractor was selected and why
31
- */
32
- export interface DetectionMetadata {
33
- /** Which extractor was used (e.g., "jest", "vitest", "typescript", "generic") */
34
- extractor: string;
35
- /** Confidence in detection (0-100) */
36
- confidence: number;
37
- /** Patterns that matched (e.g., ["FAIL pattern", "✕ symbols found"]) */
38
- patterns: string[];
39
- /** Why this extractor was chosen */
40
- reason: string;
41
- }
42
- /**
43
- * Metadata about extraction quality (what the extractor knows about its own extraction)
14
+ * Input for error extraction with separated streams
44
15
  *
45
- * Note: Extractor doesn't know expected count - test infrastructure compares against ground truth
46
- */
47
- export interface ExtractionMetadata {
48
- /** Detection information (which extractor, why) - only included when developerFeedback: true */
49
- detection?: DetectionMetadata;
50
- /** Extraction confidence (0-100) based on pattern match quality */
51
- confidence: number;
52
- /** Percentage of extracted errors with complete data (file + line + message) */
53
- completeness: number;
54
- /** Issues encountered during extraction (e.g., "ambiguous patterns", "missing line numbers") */
55
- issues: string[];
56
- /** Suggestions for improving extraction quality (only included when developerFeedback: true) */
57
- suggestions?: string[];
58
- }
59
- /**
60
- * Result of error extraction operation
16
+ * Allows extractors to choose the most appropriate stream(s) for extraction:
17
+ * - stdout: Standard output (clean, structured data)
18
+ * - stderr: Error output (warnings, errors, debug info)
19
+ * - combined: Chronological mix (for context-dependent extraction)
61
20
  */
62
- export interface ErrorExtractorResult {
63
- /** Parsed and structured errors (limited to first 10 for token efficiency) */
64
- errors: FormattedError[];
65
- /** Human-readable summary (e.g., "3 type errors, 2 warnings") */
66
- summary: string;
67
- /** Total error count (may exceed errors.length if truncated) */
68
- totalCount: number;
69
- /** Step-specific actionable guidance for fixing errors */
70
- guidance?: string;
71
- /** Clean, formatted output for YAML/JSON embedding */
72
- cleanOutput: string;
73
- /** Extraction quality metadata (only included when developerFeedback: true) */
74
- metadata?: ExtractionMetadata;
21
+ export interface ExtractorInput {
22
+ /** Raw stdout output */
23
+ stdout: string;
24
+ /** Raw stderr output */
25
+ stderr: string;
26
+ /** Combined chronological output (stdout + stderr) */
27
+ combined: string;
75
28
  }
76
29
  /**
77
30
  * Error extractor interface for specific tool/format
@@ -83,6 +36,6 @@ export interface ErrorExtractor {
83
36
  * @param _output - Raw command output (may include ANSI codes, noise)
84
37
  * @returns Structured error information optimized for LLM consumption
85
38
  */
86
- format(_output: string): ErrorExtractorResult;
39
+ format(_output: string): ExtractorResult;
87
40
  }
88
41
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,sFAAsF;IACtF,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAEhB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAE/B,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAElB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IAEnB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,gGAAgG;IAChG,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAE9B,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC;IAEnB,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;IAErB,gGAAgG;IAChG,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,gGAAgG;IAChG,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8EAA8E;IAC9E,MAAM,EAAE,cAAc,EAAE,CAAC;IAEzB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAEhB,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IAEnB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IAEpB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAAC;CAC/C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,oBAAoB,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGlF,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAAC;CAC1C"}
package/dist/types.js CHANGED
@@ -3,6 +3,9 @@
3
3
  *
4
4
  * Type definitions for LLM-optimized error extraction.
5
5
  *
6
+ * NOTE: These types are now derived from Zod schemas in result-schema.ts
7
+ * This file re-exports them for backward compatibility.
8
+ *
6
9
  * @package @vibe-validate/extractors
7
10
  */
8
11
  export {};
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -1 +1 @@
1
- {"version":3,"file":"typescript-extractor.d.ts","sourceRoot":"","sources":["../src/typescript-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAkB,MAAM,YAAY,CAAC;AAEvE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAoD5E"}
1
+ {"version":3,"file":"typescript-extractor.d.ts","sourceRoot":"","sources":["../src/typescript-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAkB,MAAM,YAAY,CAAC;AAGvE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAsD5E"}