@vibe-validate/extractors 0.17.3 → 0.17.5-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 (134) hide show
  1. package/dist/extractor-registry.d.ts.map +1 -1
  2. package/dist/extractor-registry.js +8 -8
  3. package/dist/extractor-registry.js.map +1 -1
  4. package/dist/extractors/ava/index.d.ts.map +1 -1
  5. package/dist/extractors/ava/index.js +15 -14
  6. package/dist/extractors/ava/index.js.map +1 -1
  7. package/dist/extractors/ava/index.test.js +30 -20
  8. package/dist/extractors/ava/index.test.js.map +1 -1
  9. package/dist/extractors/eslint/index.d.ts.map +1 -1
  10. package/dist/extractors/eslint/index.js +1 -1
  11. package/dist/extractors/eslint/index.js.map +1 -1
  12. package/dist/extractors/eslint/index.test.js.map +1 -1
  13. package/dist/extractors/generic/index.test.js.map +1 -1
  14. package/dist/extractors/jasmine/index.test.js.map +1 -1
  15. package/dist/extractors/jest/index.d.ts.map +1 -1
  16. package/dist/extractors/jest/index.js.map +1 -1
  17. package/dist/extractors/jest/index.test.js.map +1 -1
  18. package/dist/extractors/junit/index.d.ts.map +1 -1
  19. package/dist/extractors/junit/index.js +5 -5
  20. package/dist/extractors/junit/index.js.map +1 -1
  21. package/dist/extractors/junit/index.test.js.map +1 -1
  22. package/dist/extractors/maven-checkstyle/index.d.ts.map +1 -1
  23. package/dist/extractors/maven-checkstyle/index.js +1 -1
  24. package/dist/extractors/maven-checkstyle/index.js.map +1 -1
  25. package/dist/extractors/maven-checkstyle/index.test.js +2 -2
  26. package/dist/extractors/maven-checkstyle/index.test.js.map +1 -1
  27. package/dist/extractors/maven-compiler/index.d.ts.map +1 -1
  28. package/dist/extractors/maven-compiler/index.js +1 -1
  29. package/dist/extractors/maven-compiler/index.js.map +1 -1
  30. package/dist/extractors/maven-compiler/index.test.js +1 -1
  31. package/dist/extractors/maven-compiler/index.test.js.map +1 -1
  32. package/dist/extractors/maven-surefire/index.d.ts.map +1 -1
  33. package/dist/extractors/maven-surefire/index.js.map +1 -1
  34. package/dist/extractors/maven-surefire/index.test.js.map +1 -1
  35. package/dist/extractors/mocha/index.test.js.map +1 -1
  36. package/dist/extractors/playwright/index.test.js.map +1 -1
  37. package/dist/extractors/tap/index.test.js +2 -2
  38. package/dist/extractors/tap/index.test.js.map +1 -1
  39. package/dist/extractors/typescript/index.d.ts.map +1 -1
  40. package/dist/extractors/typescript/index.js +16 -19
  41. package/dist/extractors/typescript/index.js.map +1 -1
  42. package/dist/extractors/typescript/index.test.js.map +1 -1
  43. package/dist/extractors/vitest/index.d.ts.map +1 -1
  44. package/dist/extractors/vitest/index.js +16 -7
  45. package/dist/extractors/vitest/index.js.map +1 -1
  46. package/dist/extractors/vitest/index.test.js +38 -0
  47. package/dist/extractors/vitest/index.test.js.map +1 -1
  48. package/dist/plugin-loader.d.ts.map +1 -1
  49. package/dist/plugin-loader.js +1 -1
  50. package/dist/plugin-loader.js.map +1 -1
  51. package/dist/result-schema-export.d.ts.map +1 -1
  52. package/dist/result-schema-export.js.map +1 -1
  53. package/dist/result-schema.d.ts.map +1 -1
  54. package/dist/result-schema.js +1 -1
  55. package/dist/result-schema.js.map +1 -1
  56. package/dist/sandboxed-extractor.d.ts +1 -1
  57. package/dist/sandboxed-extractor.d.ts.map +1 -1
  58. package/dist/sandboxed-extractor.js.map +1 -1
  59. package/dist/scripts/generate-result-schema.js +1 -1
  60. package/dist/scripts/generate-result-schema.js.map +1 -1
  61. package/dist/smart-extractor.d.ts.map +1 -1
  62. package/dist/smart-extractor.js.map +1 -1
  63. package/dist/utils/guidance-generator.d.ts.map +1 -1
  64. package/dist/utils/guidance-generator.js +4 -7
  65. package/dist/utils/guidance-generator.js.map +1 -1
  66. package/dist/utils/test-framework-utils.d.ts.map +1 -1
  67. package/dist/utils/test-framework-utils.js.map +1 -1
  68. package/dist/utils.js +1 -1
  69. package/dist/utils.js.map +1 -1
  70. package/package.json +8 -8
  71. package/dist/ava-extractor.d.ts +0 -24
  72. package/dist/ava-extractor.d.ts.map +0 -1
  73. package/dist/ava-extractor.js +0 -343
  74. package/dist/ava-extractor.js.map +0 -1
  75. package/dist/eslint-extractor.d.ts +0 -25
  76. package/dist/eslint-extractor.d.ts.map +0 -1
  77. package/dist/eslint-extractor.js +0 -145
  78. package/dist/eslint-extractor.js.map +0 -1
  79. package/dist/generic-extractor.d.ts +0 -35
  80. package/dist/generic-extractor.d.ts.map +0 -1
  81. package/dist/generic-extractor.js +0 -128
  82. package/dist/generic-extractor.js.map +0 -1
  83. package/dist/jasmine-extractor.d.ts +0 -23
  84. package/dist/jasmine-extractor.d.ts.map +0 -1
  85. package/dist/jasmine-extractor.js +0 -151
  86. package/dist/jasmine-extractor.js.map +0 -1
  87. package/dist/jest-extractor.d.ts +0 -29
  88. package/dist/jest-extractor.d.ts.map +0 -1
  89. package/dist/jest-extractor.js +0 -174
  90. package/dist/jest-extractor.js.map +0 -1
  91. package/dist/junit-extractor.d.ts +0 -24
  92. package/dist/junit-extractor.d.ts.map +0 -1
  93. package/dist/junit-extractor.js +0 -193
  94. package/dist/junit-extractor.js.map +0 -1
  95. package/dist/maven-checkstyle-extractor.d.ts +0 -20
  96. package/dist/maven-checkstyle-extractor.d.ts.map +0 -1
  97. package/dist/maven-checkstyle-extractor.js +0 -208
  98. package/dist/maven-checkstyle-extractor.js.map +0 -1
  99. package/dist/maven-compiler-extractor.d.ts +0 -20
  100. package/dist/maven-compiler-extractor.d.ts.map +0 -1
  101. package/dist/maven-compiler-extractor.js +0 -218
  102. package/dist/maven-compiler-extractor.js.map +0 -1
  103. package/dist/maven-surefire-extractor.d.ts +0 -20
  104. package/dist/maven-surefire-extractor.d.ts.map +0 -1
  105. package/dist/maven-surefire-extractor.js +0 -228
  106. package/dist/maven-surefire-extractor.js.map +0 -1
  107. package/dist/mocha-extractor.d.ts +0 -23
  108. package/dist/mocha-extractor.d.ts.map +0 -1
  109. package/dist/mocha-extractor.js +0 -160
  110. package/dist/mocha-extractor.js.map +0 -1
  111. package/dist/playwright-extractor.d.ts +0 -38
  112. package/dist/playwright-extractor.d.ts.map +0 -1
  113. package/dist/playwright-extractor.js +0 -239
  114. package/dist/playwright-extractor.js.map +0 -1
  115. package/dist/sandbox.test.d.ts +0 -8
  116. package/dist/sandbox.test.d.ts.map +0 -1
  117. package/dist/sandbox.test.js +0 -395
  118. package/dist/sandbox.test.js.map +0 -1
  119. package/dist/sandboxed-extractor.test.d.ts +0 -5
  120. package/dist/sandboxed-extractor.test.d.ts.map +0 -1
  121. package/dist/sandboxed-extractor.test.js +0 -346
  122. package/dist/sandboxed-extractor.test.js.map +0 -1
  123. package/dist/tap-extractor.d.ts +0 -24
  124. package/dist/tap-extractor.d.ts.map +0 -1
  125. package/dist/tap-extractor.js +0 -217
  126. package/dist/tap-extractor.js.map +0 -1
  127. package/dist/typescript-extractor.d.ts +0 -25
  128. package/dist/typescript-extractor.d.ts.map +0 -1
  129. package/dist/typescript-extractor.js +0 -96
  130. package/dist/typescript-extractor.js.map +0 -1
  131. package/dist/vitest-extractor.d.ts +0 -38
  132. package/dist/vitest-extractor.d.ts.map +0 -1
  133. package/dist/vitest-extractor.js +0 -540
  134. package/dist/vitest-extractor.js.map +0 -1
@@ -1,343 +0,0 @@
1
- /**
2
- * Ava Error Extractor
3
- *
4
- * Parses Ava test output and formats failures for LLM consumption.
5
- * Supports Ava v6+ output format with Unicode symbols and clean error formatting.
6
- *
7
- * @package @vibe-validate/extractors
8
- */
9
- import { formatCleanOutput } from './utils/formatter-utils.js';
10
- import { generateGuidanceFromPatterns, COMMON_GUIDANCE_PATTERNS } from './utils/guidance-generator.js';
11
- /**
12
- * Extract errors from Ava test output
13
- *
14
- * @param output - Ava text output
15
- * @returns Structured error information
16
- *
17
- * @example
18
- * ```typescript
19
- * const avaOutput = execSync('ava tests/**\/*.test.js', { encoding: 'utf-8' });
20
- * const result = extractAvaErrors(avaOutput);
21
- * console.log(result.summary); // "5 test(s) failed"
22
- * ```
23
- */
24
- export function extractAvaErrors(output) {
25
- // Note: ANSI codes are stripped centrally in smart-extractor.ts
26
- // Extract all failures using two-pass approach:
27
- // 1. Parse summary lines to get test names
28
- // 2. Parse detailed blocks to get file locations and messages
29
- const failures = extractFailures(output);
30
- if (failures.length === 0) {
31
- return {
32
- summary: '0 test(s) failed',
33
- errors: [],
34
- totalErrors: 0,
35
- errorSummary: '',
36
- guidance: '',
37
- metadata: {
38
- confidence: 100,
39
- completeness: 100,
40
- issues: []
41
- }
42
- };
43
- }
44
- const errors = [];
45
- let completeCount = 0;
46
- for (const failure of failures) {
47
- const file = failure.file ?? 'unknown';
48
- // Use test name as fallback message if no explicit message extracted
49
- const message = failure.message ?? failure.testName ?? 'Test failed';
50
- const context = failure.testName ?? '';
51
- const isComplete = file !== 'unknown' && failure.line && message && message !== 'Test failed';
52
- if (isComplete) {
53
- completeCount++;
54
- }
55
- errors.push({
56
- file,
57
- line: failure.line,
58
- message,
59
- context,
60
- guidance: failure.guidance
61
- });
62
- }
63
- // Generate summary
64
- const summary = `${failures.length} test(s) failed`;
65
- // Generate guidance using Ava-specific patterns
66
- const guidance = generateGuidanceFromPatterns(failures, AVA_GUIDANCE_PATTERNS);
67
- // Calculate quality metadata
68
- const completeness = failures.length > 0 ? (completeCount / failures.length) * 100 : 100;
69
- const confidence = failures.length > 0 ? 90 : 100; // High confidence for Ava's structured output
70
- const metadata = {
71
- confidence,
72
- completeness,
73
- issues: []
74
- };
75
- return {
76
- summary,
77
- errors,
78
- totalErrors: failures.length,
79
- errorSummary: formatCleanOutput(errors),
80
- guidance,
81
- metadata
82
- };
83
- }
84
- /**
85
- * Extract all failures from Ava output
86
- * Strategy: Find detailed headers (test names with ›), then parse each block
87
- */
88
- // eslint-disable-next-line sonarjs/cognitive-complexity -- Complexity 23 acceptable for Ava output parsing (handles multiple output formats with fallback detection)
89
- function extractFailures(output) {
90
- const lines = output.split('\n');
91
- const failures = [];
92
- // Find all detailed block headers (clean test names with ›)
93
- // These are the authoritative source - each one represents a failure
94
- const headerIndices = [];
95
- for (let i = 0; i < lines.length; i++) {
96
- const trimmed = lines[i].trim();
97
- // Detailed header: has ›, not a summary, not a file:// line, not code, reasonable length
98
- if (trimmed.includes('›') &&
99
- !trimmed.includes('[fail]:') &&
100
- !trimmed.startsWith('›') &&
101
- !trimmed.includes('file://') &&
102
- !/^\d+:/.exec(trimmed) &&
103
- !/^Error/.exec(trimmed) &&
104
- !trimmed.includes('{') &&
105
- !trimmed.includes('}') &&
106
- trimmed.length > 10) {
107
- headerIndices.push({ index: i, testName: trimmed });
108
- }
109
- }
110
- // If we found detailed headers, parse each one
111
- if (headerIndices.length > 0) {
112
- for (const header of headerIndices) {
113
- const failure = {
114
- testName: header.testName
115
- };
116
- // Parse block starting from line after header
117
- parseDetailedBlock(lines, header.index + 1, failure);
118
- // Add error type detection and guidance
119
- if (!failure.errorType && failure.message) {
120
- failure.errorType = detectErrorType(failure.message);
121
- }
122
- if (failure.errorType) {
123
- failure.guidance = getErrorGuidance(failure.errorType);
124
- }
125
- failures.push(failure);
126
- }
127
- }
128
- else {
129
- // Fallback: No detailed headers found (minimal format)
130
- // Look for summary lines and parse content after them
131
- for (let i = 0; i < lines.length; i++) {
132
- const trimmed = lines[i].trim();
133
- if (trimmed.includes('✘') && trimmed.includes('[fail]:')) {
134
- const failure = {};
135
- const summaryMatch = /✘\s+\[fail\]:\s+(.+)/.exec(trimmed);
136
- if (summaryMatch) {
137
- failure.testName = summaryMatch[1];
138
- }
139
- // Parse block starting from next line
140
- parseDetailedBlock(lines, i + 1, failure);
141
- // Add error type detection and guidance
142
- if (!failure.errorType && failure.message) {
143
- failure.errorType = detectErrorType(failure.message);
144
- }
145
- if (failure.errorType) {
146
- failure.guidance = getErrorGuidance(failure.errorType);
147
- }
148
- failures.push(failure);
149
- }
150
- }
151
- }
152
- return failures;
153
- }
154
- /**
155
- * Parse a detailed error block to extract file, line, and message
156
- */
157
- // eslint-disable-next-line sonarjs/cognitive-complexity -- Complexity 40 acceptable for Ava error block parsing (state machine handling multiple output formats and edge cases)
158
- function parseDetailedBlock(lines, startIndex, failure) {
159
- let i = startIndex;
160
- let foundCodeSnippet = false;
161
- let inErrorObject = false;
162
- while (i < lines.length && i < startIndex + 60) {
163
- const line = lines[i];
164
- const trimmed = line.trim();
165
- // Stop at next test header (clean test name with ›)
166
- if (i > startIndex + 3 && trimmed.includes('›') && !trimmed.startsWith('›') &&
167
- trimmed.length > 15 && !trimmed.includes('file://') &&
168
- !/^\d+:/.exec(trimmed) && !/^Error/.exec(trimmed) &&
169
- !trimmed.includes('{') && !trimmed.includes('}')) {
170
- break;
171
- }
172
- // Stop at separator
173
- if (trimmed === '─') {
174
- break;
175
- }
176
- // Extract file path: "tests/ava/test.js:28" (appears right after test name header)
177
- const fileMatch = /^([^:]+\.(?:js|ts|mjs|cjs)):(\d+)$/.exec(trimmed);
178
- if (fileMatch && !failure.file) {
179
- failure.file = fileMatch[1];
180
- failure.line = Number.parseInt(fileMatch[2], 10);
181
- i++;
182
- continue;
183
- }
184
- // Extract from file:// URL: "› file://tests/ava/test.js:28:5"
185
- const urlMatch = /^›\s+file:\/\/(.+?):(\d+):\d+$/.exec(trimmed);
186
- if (urlMatch && !failure.file) {
187
- failure.file = urlMatch[1];
188
- failure.line = Number.parseInt(urlMatch[2], 10);
189
- i++;
190
- continue;
191
- }
192
- // Code snippet marker (line numbers like " 28: code here")
193
- if (/^\d+:/.exec(trimmed)) {
194
- foundCodeSnippet = true;
195
- i++;
196
- continue;
197
- }
198
- // Error object start
199
- if (/^(?:TypeError|Error|.*Error)\s*\{$/.exec(trimmed)) {
200
- inErrorObject = true;
201
- i++;
202
- continue;
203
- }
204
- // Error object end
205
- if (inErrorObject && trimmed === '}') {
206
- inErrorObject = false;
207
- i++;
208
- continue;
209
- }
210
- // Extract from error object properties
211
- if (inErrorObject) {
212
- // message property
213
- const msgMatch = /message:\s*'([^']+)'/.exec(trimmed);
214
- if (msgMatch && !failure.message) {
215
- failure.message = msgMatch[1];
216
- }
217
- // code property for error type detection
218
- const codeMatch = /code:\s*'([^']+)'/.exec(trimmed);
219
- if (codeMatch) {
220
- if (codeMatch[1] === 'ENOENT') {
221
- failure.errorType = 'file-not-found';
222
- }
223
- else if (codeMatch[1] === 'ERR_MODULE_NOT_FOUND') {
224
- failure.errorType = 'import-error';
225
- }
226
- }
227
- i++;
228
- continue;
229
- }
230
- // Extract error from Error: line (after error object)
231
- // eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses Ava test framework error messages (controlled output), not user input
232
- const errorLineMatch = /^(?:TypeError|Error|.*Error):\s+(.+)$/.exec(trimmed);
233
- if (errorLineMatch) {
234
- failure.message ??= errorLineMatch[1];
235
- // Look for file in stack trace (next few lines)
236
- if (!failure.file && i + 1 < lines.length) {
237
- for (let j = i + 1; j < Math.min(i + 10, lines.length); j++) {
238
- const stackLine = lines[j].trim();
239
- // Match: at file:///path/to/file.js:110:24
240
- // But skip node_modules and ava lib files
241
- // eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses Ava test framework stack traces (controlled output), not user input
242
- const stackMatch = /at\s+(?:.*?\s+)?\(?file:\/\/([^:)]+):(\d+):\d+/.exec(stackLine);
243
- if (stackMatch) {
244
- const stackFile = stackMatch[1];
245
- // Skip node_modules and ava library files
246
- if (!stackFile.includes('node_modules') && !stackFile.includes('/ava/lib/')) {
247
- failure.file = stackFile;
248
- failure.line = Number.parseInt(stackMatch[2], 10);
249
- break;
250
- }
251
- }
252
- }
253
- }
254
- i++;
255
- continue;
256
- }
257
- // Timeout marker
258
- if (trimmed.includes('Test timeout exceeded')) {
259
- failure.message ??= 'Test timeout exceeded';
260
- failure.errorType = 'timeout';
261
- i++;
262
- continue;
263
- }
264
- // Error markers
265
- if (trimmed === 'Error thrown in test:' || trimmed === 'Rejected promise returned by test. Reason:') {
266
- i++;
267
- continue;
268
- }
269
- // Detect assertion from Difference section
270
- if (trimmed.startsWith('Difference') && trimmed.includes('actual') && trimmed.includes('expected')) {
271
- failure.message ??= 'Assertion failed';
272
- failure.errorType ??= 'assertion';
273
- i++;
274
- continue;
275
- }
276
- // Skip diff headers and diff lines
277
- if (trimmed.startsWith('Difference') || trimmed.startsWith('Expected:') ||
278
- trimmed.startsWith('Received:') || /^[+-]\s/.exec(trimmed)) {
279
- i++;
280
- continue;
281
- }
282
- // Assertion message (single line after code snippet, before Difference section)
283
- if (foundCodeSnippet && !failure.message && trimmed.length > 0 && trimmed.length < 150 &&
284
- !/^\d+:/.exec(trimmed) && !trimmed.includes('Difference') &&
285
- !trimmed.includes('{') && !trimmed.includes('}') &&
286
- !/^at\s+/.exec(trimmed) && !trimmed.includes('file://') &&
287
- !trimmed.includes('.js:') && !trimmed.includes('.ts:')) {
288
- failure.message = trimmed;
289
- i++;
290
- continue;
291
- }
292
- i++;
293
- }
294
- }
295
- /**
296
- * Detect error type from message
297
- */
298
- function detectErrorType(message) {
299
- const lower = message.toLowerCase();
300
- if (lower.includes('timeout') || lower.includes('timed out')) {
301
- return 'timeout';
302
- }
303
- if (lower.includes('enoent') || lower.includes('no such file')) {
304
- return 'file-not-found';
305
- }
306
- if (lower.includes('cannot read properties') || lower.includes('typeerror')) {
307
- return 'type-error';
308
- }
309
- if (lower.includes('expected') || lower.includes('should') || lower.includes('difference')) {
310
- return 'assertion';
311
- }
312
- if (lower.includes('cannot find module') || lower.includes('module not found')) {
313
- return 'import-error';
314
- }
315
- return 'unknown';
316
- }
317
- /**
318
- * Get guidance for a specific error type
319
- */
320
- function getErrorGuidance(errorType) {
321
- const guidanceMap = {
322
- assertion: 'Review the assertion logic and expected vs actual values',
323
- timeout: 'Increase timeout limit with t.timeout() or optimize async operations',
324
- 'file-not-found': 'Verify file path exists and permissions are correct',
325
- 'type-error': 'Check for null/undefined values before accessing properties',
326
- 'import-error': 'Verify module path and ensure dependencies are installed'
327
- };
328
- return guidanceMap[errorType];
329
- }
330
- /**
331
- * Ava-specific guidance patterns
332
- * Extends common patterns with Ava-specific timeout guidance
333
- */
334
- const AVA_GUIDANCE_PATTERNS = [
335
- ...COMMON_GUIDANCE_PATTERNS,
336
- {
337
- key: 'ava-timeout',
338
- messageMatchers: [],
339
- errorTypeMatchers: ['timeout'],
340
- guidance: 'Tests are timing out - use t.timeout() to increase limit or optimize async operations'
341
- }
342
- ];
343
- //# sourceMappingURL=ava-extractor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ava-extractor.js","sourceRoot":"","sources":["../src/ava-extractor.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- /**
2
- * ESLint Error Extractor
3
- *
4
- * Parses and formats ESLint error output for LLM consumption.
5
- *
6
- * @package @vibe-validate/extractors
7
- */
8
- import type { ErrorExtractorResult } from './types.js';
9
- /**
10
- * Format ESLint errors
11
- *
12
- * Parses ESLint output format: `file:line:col - severity message [rule-name]`
13
- *
14
- * @param output - Raw ESLint command output
15
- * @returns Structured error information with ESLint-specific guidance
16
- *
17
- * @example
18
- * ```typescript
19
- * const result = extractESLintErrors(eslintOutput);
20
- * console.log(result.summary); // "5 ESLint error(s), 2 warning(s)"
21
- * console.log(result.guidance); // "Remove or prefix unused variables with underscore"
22
- * ```
23
- */
24
- export declare function extractESLintErrors(output: string): ErrorExtractorResult;
25
- //# sourceMappingURL=eslint-extractor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eslint-extractor.d.ts","sourceRoot":"","sources":["../src/eslint-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAkB,MAAM,YAAY,CAAC;AAgDvE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAkExE"}
@@ -1,145 +0,0 @@
1
- /**
2
- * ESLint Error Extractor
3
- *
4
- * Parses and formats ESLint error output for LLM consumption.
5
- *
6
- * @package @vibe-validate/extractors
7
- */
8
- import { MAX_ERRORS_IN_ARRAY } from './result-schema.js';
9
- /**
10
- * Deduplicate ESLint errors by file:line:column
11
- *
12
- * When multiple rules report the same error at the same location,
13
- * prefer @typescript-eslint/* rules over base ESLint rules.
14
- *
15
- * @param errors - Array of parsed ESLint errors
16
- * @returns Deduplicated array of errors
17
- */
18
- function deduplicateESLintErrors(errors) {
19
- // Group errors by file:line:column
20
- const errorMap = new Map();
21
- for (const error of errors) {
22
- const key = `${error.file}:${error.line}:${error.column}`;
23
- if (!errorMap.has(key)) {
24
- errorMap.set(key, []);
25
- }
26
- const locationErrors = errorMap.get(key);
27
- if (locationErrors) {
28
- locationErrors.push(error);
29
- }
30
- }
31
- // For each location, pick the best error
32
- const deduplicated = [];
33
- for (const locationErrors of errorMap.values()) {
34
- if (locationErrors.length === 1) {
35
- deduplicated.push(locationErrors[0]);
36
- continue;
37
- }
38
- // Prefer @typescript-eslint/* rules over base ESLint rules
39
- const typescriptEslintError = locationErrors.find(e => e.code?.startsWith('@typescript-eslint/'));
40
- if (typescriptEslintError) {
41
- deduplicated.push(typescriptEslintError);
42
- }
43
- else {
44
- // No typescript-eslint rule, just take the first one
45
- deduplicated.push(locationErrors[0]);
46
- }
47
- }
48
- return deduplicated;
49
- }
50
- /**
51
- * Format ESLint errors
52
- *
53
- * Parses ESLint output format: `file:line:col - severity message [rule-name]`
54
- *
55
- * @param output - Raw ESLint command output
56
- * @returns Structured error information with ESLint-specific guidance
57
- *
58
- * @example
59
- * ```typescript
60
- * const result = extractESLintErrors(eslintOutput);
61
- * console.log(result.summary); // "5 ESLint error(s), 2 warning(s)"
62
- * console.log(result.guidance); // "Remove or prefix unused variables with underscore"
63
- * ```
64
- */
65
- export function extractESLintErrors(output) {
66
- const errors = [];
67
- const lines = output.split('\n');
68
- let currentFile = '';
69
- for (const line of lines) {
70
- // Try modern format first: file:line:col: severity message [rule-name]
71
- // eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses ESLint output (controlled linter output), not user input
72
- const modernMatch = /^(.+?):(\d+):(\d+):\s+(error|warning)\s+(.+?)\s+(\S+)$/.exec(line);
73
- if (modernMatch) {
74
- const ruleMessage = modernMatch[5].trim();
75
- const ruleName = modernMatch[6].replace(/[[\]]/g, ''); // Remove brackets if present
76
- errors.push({
77
- file: modernMatch[1].trim(),
78
- line: Number.parseInt(modernMatch[2]),
79
- column: Number.parseInt(modernMatch[3]),
80
- severity: modernMatch[4],
81
- message: `${ruleMessage} (${ruleName})`,
82
- code: ruleName
83
- });
84
- continue;
85
- }
86
- // Stylish format: spaces + line:col + spaces + severity + spaces + message + spaces + rule
87
- // eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses ESLint output (controlled linter output), not user input
88
- const stylishMatch = /^\s+(\d+):(\d+)\s+(error|warning)\s+(.+?)\s+(\S+)\s*$/.exec(line);
89
- if (stylishMatch && currentFile) {
90
- const ruleMessage = stylishMatch[4].trim();
91
- const ruleName = stylishMatch[5];
92
- errors.push({
93
- file: currentFile,
94
- line: Number.parseInt(stylishMatch[1]),
95
- column: Number.parseInt(stylishMatch[2]),
96
- severity: stylishMatch[3],
97
- message: `${ruleMessage} (${ruleName})`,
98
- code: ruleName
99
- });
100
- continue;
101
- }
102
- // Check if this is a file path line for stylish format (no colons, just a path)
103
- if (line && !line.includes(':') && !line.startsWith(' ') && !line.startsWith('\t') && (line.includes('/') || line.includes('\\'))) {
104
- // Potential file path for stylish format
105
- currentFile = line.trim();
106
- }
107
- }
108
- // Deduplicate errors (prefer @typescript-eslint/* rules over base ESLint rules)
109
- const deduplicatedErrors = deduplicateESLintErrors(errors);
110
- const errorCount = deduplicatedErrors.filter(e => e.severity === 'error').length;
111
- const warningCount = deduplicatedErrors.filter(e => e.severity === 'warning').length;
112
- // Build clean output (limit to MAX_ERRORS_IN_ARRAY for token efficiency)
113
- const errorSummary = deduplicatedErrors
114
- .slice(0, MAX_ERRORS_IN_ARRAY)
115
- .map(e => `${e.file}:${e.line}:${e.column} - ${e.message} [${e.code}]`)
116
- .join('\n');
117
- return {
118
- errors: deduplicatedErrors.slice(0, MAX_ERRORS_IN_ARRAY),
119
- summary: `${errorCount} ESLint error(s), ${warningCount} warning(s)`,
120
- totalErrors: deduplicatedErrors.length,
121
- guidance: getESLintGuidance(deduplicatedErrors),
122
- errorSummary
123
- };
124
- }
125
- /**
126
- * Generate ESLint-specific guidance based on rule violations
127
- *
128
- * @param errors - Parsed ESLint errors
129
- * @returns Actionable guidance string
130
- */
131
- function getESLintGuidance(errors) {
132
- const rules = new Set(errors.map(e => e.code));
133
- const guidance = [];
134
- if (rules.has('@typescript-eslint/no-unused-vars')) {
135
- guidance.push('Remove or prefix unused variables with underscore');
136
- }
137
- if (rules.has('no-console')) {
138
- guidance.push('Replace console.log with logger');
139
- }
140
- if (guidance.length === 0) {
141
- return 'Fix ESLint errors - run with --fix to auto-fix some issues';
142
- }
143
- return guidance.join('. ');
144
- }
145
- //# sourceMappingURL=eslint-extractor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eslint-extractor.js","sourceRoot":"","sources":["../src/eslint-extractor.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- /**
2
- * Generic Error Extractor
3
- *
4
- * Fallback extractor for unknown validation step types.
5
- * Intelligently extracts error keywords and relevant lines for LLM consumption.
6
- *
7
- * @package @vibe-validate/extractors
8
- */
9
- import type { ErrorExtractorResult } from './types.js';
10
- /**
11
- * Generic error extractor (fallback)
12
- *
13
- * Intelligently extracts error information by:
14
- * - Identifying lines with error keywords (FAILED, Error, Exception, etc.)
15
- * - Extracting file paths with line numbers (test.py:42, main.go:15)
16
- * - Capturing summary lines (X failed, Y passed)
17
- * - Removing npm/package manager noise
18
- * - Limiting to 15-20 most relevant lines for token efficiency
19
- *
20
- * @param output - Raw command output
21
- * @returns Structured error information with keyword-extracted summary
22
- *
23
- * @example
24
- * ```typescript
25
- * // Python pytest output
26
- * const result = extractGenericErrors(pytestOutput);
27
- * // errorSummary contains only: FAILED lines, AssertionError, summary
28
- *
29
- * // Go test output
30
- * const result = extractGenericErrors(goTestOutput);
31
- * // errorSummary contains only: FAIL lines, panic:, file:line references
32
- * ```
33
- */
34
- export declare function extractGenericErrors(output: string): ErrorExtractorResult;
35
- //# sourceMappingURL=generic-extractor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generic-extractor.d.ts","sourceRoot":"","sources":["../src/generic-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA0CvD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CA+DzE"}