@vibe-validate/extractors 0.17.4 → 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.
- package/dist/extractor-registry.d.ts.map +1 -1
- package/dist/extractor-registry.js +8 -8
- package/dist/extractor-registry.js.map +1 -1
- package/dist/extractors/ava/index.d.ts.map +1 -1
- package/dist/extractors/ava/index.js +15 -14
- package/dist/extractors/ava/index.js.map +1 -1
- package/dist/extractors/ava/index.test.js +30 -20
- package/dist/extractors/ava/index.test.js.map +1 -1
- package/dist/extractors/eslint/index.d.ts.map +1 -1
- package/dist/extractors/eslint/index.js +1 -1
- package/dist/extractors/eslint/index.js.map +1 -1
- package/dist/extractors/eslint/index.test.js.map +1 -1
- package/dist/extractors/generic/index.test.js.map +1 -1
- package/dist/extractors/jasmine/index.test.js.map +1 -1
- package/dist/extractors/jest/index.d.ts.map +1 -1
- package/dist/extractors/jest/index.js.map +1 -1
- package/dist/extractors/jest/index.test.js.map +1 -1
- package/dist/extractors/junit/index.d.ts.map +1 -1
- package/dist/extractors/junit/index.js +5 -5
- package/dist/extractors/junit/index.js.map +1 -1
- package/dist/extractors/junit/index.test.js.map +1 -1
- package/dist/extractors/maven-checkstyle/index.d.ts.map +1 -1
- package/dist/extractors/maven-checkstyle/index.js +1 -1
- package/dist/extractors/maven-checkstyle/index.js.map +1 -1
- package/dist/extractors/maven-checkstyle/index.test.js +2 -2
- package/dist/extractors/maven-checkstyle/index.test.js.map +1 -1
- package/dist/extractors/maven-compiler/index.d.ts.map +1 -1
- package/dist/extractors/maven-compiler/index.js +1 -1
- package/dist/extractors/maven-compiler/index.js.map +1 -1
- package/dist/extractors/maven-compiler/index.test.js +1 -1
- package/dist/extractors/maven-compiler/index.test.js.map +1 -1
- package/dist/extractors/maven-surefire/index.d.ts.map +1 -1
- package/dist/extractors/maven-surefire/index.js.map +1 -1
- package/dist/extractors/maven-surefire/index.test.js.map +1 -1
- package/dist/extractors/mocha/index.test.js.map +1 -1
- package/dist/extractors/playwright/index.test.js.map +1 -1
- package/dist/extractors/tap/index.test.js +2 -2
- package/dist/extractors/tap/index.test.js.map +1 -1
- package/dist/extractors/typescript/index.d.ts.map +1 -1
- package/dist/extractors/typescript/index.js +16 -19
- package/dist/extractors/typescript/index.js.map +1 -1
- package/dist/extractors/typescript/index.test.js.map +1 -1
- package/dist/extractors/vitest/index.d.ts.map +1 -1
- package/dist/extractors/vitest/index.js +16 -7
- package/dist/extractors/vitest/index.js.map +1 -1
- package/dist/extractors/vitest/index.test.js +38 -0
- package/dist/extractors/vitest/index.test.js.map +1 -1
- package/dist/plugin-loader.d.ts.map +1 -1
- package/dist/plugin-loader.js +1 -1
- package/dist/plugin-loader.js.map +1 -1
- package/dist/result-schema-export.d.ts.map +1 -1
- package/dist/result-schema-export.js.map +1 -1
- package/dist/result-schema.d.ts.map +1 -1
- package/dist/result-schema.js +1 -1
- package/dist/result-schema.js.map +1 -1
- package/dist/sandboxed-extractor.d.ts +1 -1
- package/dist/sandboxed-extractor.d.ts.map +1 -1
- package/dist/sandboxed-extractor.js.map +1 -1
- package/dist/scripts/generate-result-schema.js +1 -1
- package/dist/scripts/generate-result-schema.js.map +1 -1
- package/dist/smart-extractor.d.ts.map +1 -1
- package/dist/smart-extractor.js.map +1 -1
- package/dist/utils/guidance-generator.d.ts.map +1 -1
- package/dist/utils/guidance-generator.js +4 -7
- package/dist/utils/guidance-generator.js.map +1 -1
- package/dist/utils/test-framework-utils.d.ts.map +1 -1
- package/dist/utils/test-framework-utils.js.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/package.json +8 -8
- package/dist/ava-extractor.d.ts +0 -24
- package/dist/ava-extractor.d.ts.map +0 -1
- package/dist/ava-extractor.js +0 -343
- package/dist/ava-extractor.js.map +0 -1
- package/dist/eslint-extractor.d.ts +0 -25
- package/dist/eslint-extractor.d.ts.map +0 -1
- package/dist/eslint-extractor.js +0 -145
- package/dist/eslint-extractor.js.map +0 -1
- package/dist/generic-extractor.d.ts +0 -35
- package/dist/generic-extractor.d.ts.map +0 -1
- package/dist/generic-extractor.js +0 -128
- package/dist/generic-extractor.js.map +0 -1
- package/dist/jasmine-extractor.d.ts +0 -23
- package/dist/jasmine-extractor.d.ts.map +0 -1
- package/dist/jasmine-extractor.js +0 -151
- package/dist/jasmine-extractor.js.map +0 -1
- package/dist/jest-extractor.d.ts +0 -29
- package/dist/jest-extractor.d.ts.map +0 -1
- package/dist/jest-extractor.js +0 -174
- package/dist/jest-extractor.js.map +0 -1
- package/dist/junit-extractor.d.ts +0 -24
- package/dist/junit-extractor.d.ts.map +0 -1
- package/dist/junit-extractor.js +0 -193
- package/dist/junit-extractor.js.map +0 -1
- package/dist/maven-checkstyle-extractor.d.ts +0 -20
- package/dist/maven-checkstyle-extractor.d.ts.map +0 -1
- package/dist/maven-checkstyle-extractor.js +0 -208
- package/dist/maven-checkstyle-extractor.js.map +0 -1
- package/dist/maven-compiler-extractor.d.ts +0 -20
- package/dist/maven-compiler-extractor.d.ts.map +0 -1
- package/dist/maven-compiler-extractor.js +0 -218
- package/dist/maven-compiler-extractor.js.map +0 -1
- package/dist/maven-surefire-extractor.d.ts +0 -20
- package/dist/maven-surefire-extractor.d.ts.map +0 -1
- package/dist/maven-surefire-extractor.js +0 -228
- package/dist/maven-surefire-extractor.js.map +0 -1
- package/dist/mocha-extractor.d.ts +0 -23
- package/dist/mocha-extractor.d.ts.map +0 -1
- package/dist/mocha-extractor.js +0 -160
- package/dist/mocha-extractor.js.map +0 -1
- package/dist/playwright-extractor.d.ts +0 -38
- package/dist/playwright-extractor.d.ts.map +0 -1
- package/dist/playwright-extractor.js +0 -239
- package/dist/playwright-extractor.js.map +0 -1
- package/dist/sandbox.test.d.ts +0 -8
- package/dist/sandbox.test.d.ts.map +0 -1
- package/dist/sandbox.test.js +0 -395
- package/dist/sandbox.test.js.map +0 -1
- package/dist/sandboxed-extractor.test.d.ts +0 -5
- package/dist/sandboxed-extractor.test.d.ts.map +0 -1
- package/dist/sandboxed-extractor.test.js +0 -346
- package/dist/sandboxed-extractor.test.js.map +0 -1
- package/dist/tap-extractor.d.ts +0 -24
- package/dist/tap-extractor.d.ts.map +0 -1
- package/dist/tap-extractor.js +0 -217
- package/dist/tap-extractor.js.map +0 -1
- package/dist/typescript-extractor.d.ts +0 -25
- package/dist/typescript-extractor.d.ts.map +0 -1
- package/dist/typescript-extractor.js +0 -96
- package/dist/typescript-extractor.js.map +0 -1
- package/dist/vitest-extractor.d.ts +0 -38
- package/dist/vitest-extractor.d.ts.map +0 -1
- package/dist/vitest-extractor.js +0 -540
- package/dist/vitest-extractor.js.map +0 -1
package/dist/ava-extractor.js
DELETED
|
@@ -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"}
|
package/dist/eslint-extractor.js
DELETED
|
@@ -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"}
|