@vibe-validate/extractors 0.14.3 → 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.
- package/dist/ava-extractor.js +4 -4
- package/dist/ava-extractor.js.map +1 -1
- package/dist/eslint-extractor.d.ts.map +1 -1
- package/dist/eslint-extractor.js +7 -6
- package/dist/eslint-extractor.js.map +1 -1
- package/dist/generic-extractor.d.ts +16 -10
- package/dist/generic-extractor.d.ts.map +1 -1
- package/dist/generic-extractor.js +106 -29
- package/dist/generic-extractor.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/jasmine-extractor.js +6 -6
- package/dist/jasmine-extractor.js.map +1 -1
- package/dist/jest-extractor.js +8 -8
- package/dist/jest-extractor.js.map +1 -1
- package/dist/junit-extractor.js +6 -6
- package/dist/junit-extractor.js.map +1 -1
- package/dist/mocha-extractor.js +6 -6
- package/dist/mocha-extractor.js.map +1 -1
- package/dist/playwright-extractor.js +5 -5
- package/dist/playwright-extractor.js.map +1 -1
- package/dist/result-schema-export.d.ts +29 -0
- package/dist/result-schema-export.d.ts.map +1 -0
- package/dist/result-schema-export.js +37 -0
- package/dist/result-schema-export.js.map +1 -0
- package/dist/result-schema.d.ts +349 -0
- package/dist/result-schema.d.ts.map +1 -0
- package/dist/result-schema.js +139 -0
- package/dist/result-schema.js.map +1 -0
- package/dist/scripts/generate-result-schema.d.ts +10 -0
- package/dist/scripts/generate-result-schema.d.ts.map +1 -0
- package/dist/scripts/generate-result-schema.js +20 -0
- package/dist/scripts/generate-result-schema.js.map +1 -0
- package/dist/smart-extractor.d.ts +13 -16
- package/dist/smart-extractor.d.ts.map +1 -1
- package/dist/smart-extractor.js +78 -53
- package/dist/smart-extractor.js.map +1 -1
- package/dist/tap-extractor.js +4 -4
- package/dist/tap-extractor.js.map +1 -1
- package/dist/types.d.ts +18 -65
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/dist/typescript-extractor.d.ts.map +1 -1
- package/dist/typescript-extractor.js +7 -6
- package/dist/typescript-extractor.js.map +1 -1
- package/dist/vitest-extractor.d.ts.map +1 -1
- package/dist/vitest-extractor.js +32 -5
- package/dist/vitest-extractor.js.map +1 -1
- package/error-extractor-result.schema.json +134 -0
- package/package.json +8 -3
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod Schema for Error Extractor Results
|
|
3
|
+
*
|
|
4
|
+
* This schema defines the structure of extractor output and enables
|
|
5
|
+
* runtime validation and JSON Schema generation for documentation.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
/**
|
|
11
|
+
* Maximum number of errors to include in errors array
|
|
12
|
+
*
|
|
13
|
+
* Limits token usage in LLM context window. Full count available in totalErrors field.
|
|
14
|
+
*/
|
|
15
|
+
export const MAX_ERRORS_IN_ARRAY = 10;
|
|
16
|
+
/**
|
|
17
|
+
* Formatted Error Schema
|
|
18
|
+
*
|
|
19
|
+
* Structured error information extracted from validation output
|
|
20
|
+
*/
|
|
21
|
+
export const FormattedErrorSchema = z.object({
|
|
22
|
+
/** File path where the error occurred */
|
|
23
|
+
file: z.string().optional(),
|
|
24
|
+
/** Line number (1-indexed) */
|
|
25
|
+
line: z.number().int().positive().optional(),
|
|
26
|
+
/** Column number (1-indexed) */
|
|
27
|
+
column: z.number().int().positive().optional(),
|
|
28
|
+
/** Error message */
|
|
29
|
+
message: z.string(),
|
|
30
|
+
/** Error code (e.g., TS2322, ESLint rule name) */
|
|
31
|
+
code: z.string().optional(),
|
|
32
|
+
/** Severity level */
|
|
33
|
+
severity: z.enum(['error', 'warning']).optional(),
|
|
34
|
+
/** Additional context (surrounding code, stack trace excerpt) */
|
|
35
|
+
context: z.string().optional(),
|
|
36
|
+
/** Guidance for fixing the error */
|
|
37
|
+
guidance: z.string().optional(),
|
|
38
|
+
});
|
|
39
|
+
/**
|
|
40
|
+
* Detection Metadata Schema
|
|
41
|
+
*
|
|
42
|
+
* Information about which extractor was selected and why
|
|
43
|
+
*/
|
|
44
|
+
export const DetectionMetadataSchema = z.object({
|
|
45
|
+
/** Which extractor was used */
|
|
46
|
+
extractor: z.string(),
|
|
47
|
+
/** Confidence in detection (0-100) */
|
|
48
|
+
confidence: z.number().min(0).max(100),
|
|
49
|
+
/** Patterns that matched */
|
|
50
|
+
patterns: z.array(z.string()),
|
|
51
|
+
/** Why this extractor was chosen */
|
|
52
|
+
reason: z.string(),
|
|
53
|
+
});
|
|
54
|
+
/**
|
|
55
|
+
* Extraction Metadata Schema
|
|
56
|
+
*
|
|
57
|
+
* Quality information about the extraction process
|
|
58
|
+
*/
|
|
59
|
+
export const ExtractionMetadataSchema = z.object({
|
|
60
|
+
/** Detection information (only included when developerFeedback: true) */
|
|
61
|
+
detection: DetectionMetadataSchema.optional(),
|
|
62
|
+
/** Extraction confidence (0-100) */
|
|
63
|
+
confidence: z.number().min(0).max(100),
|
|
64
|
+
/** Percentage of extracted errors with complete data (0-100) */
|
|
65
|
+
completeness: z.number().min(0).max(100),
|
|
66
|
+
/** Issues encountered during extraction */
|
|
67
|
+
issues: z.array(z.string()),
|
|
68
|
+
/** Suggestions for improvement (only included when developerFeedback: true) */
|
|
69
|
+
suggestions: z.array(z.string()).optional(),
|
|
70
|
+
});
|
|
71
|
+
/**
|
|
72
|
+
* Error Extractor Result Schema
|
|
73
|
+
*
|
|
74
|
+
* Complete result structure from error extraction operation
|
|
75
|
+
*
|
|
76
|
+
* Field ordering optimized for LLM consumption:
|
|
77
|
+
* - Summary and count first (high-level overview)
|
|
78
|
+
* - Structured errors (detailed breakdown)
|
|
79
|
+
* - Guidance and errorSummary (actionable context)
|
|
80
|
+
* - Metadata last (quality metrics)
|
|
81
|
+
*/
|
|
82
|
+
export const ErrorExtractorResultSchema = z.object({
|
|
83
|
+
/** Human-readable summary (e.g., "2 test failures", "5 type errors") */
|
|
84
|
+
summary: z.string(),
|
|
85
|
+
/** Total error count (may exceed errors.length if truncated to MAX_ERRORS_IN_ARRAY) */
|
|
86
|
+
totalErrors: z.number().int().nonnegative(),
|
|
87
|
+
/** Parsed and structured errors (limited to MAX_ERRORS_IN_ARRAY for token efficiency) */
|
|
88
|
+
errors: z.array(FormattedErrorSchema),
|
|
89
|
+
/** Step-specific actionable guidance for fixing errors */
|
|
90
|
+
guidance: z.string().optional(),
|
|
91
|
+
/**
|
|
92
|
+
* Formatted error summary - LLM-optimized text view of errors
|
|
93
|
+
*
|
|
94
|
+
* When errors exist: Concise file:line:column - message format
|
|
95
|
+
* When no errors: Keyword extraction from output (FAILED, Error, etc.)
|
|
96
|
+
* ANSI codes stripped, limited to first 10-20 relevant lines
|
|
97
|
+
* Provides 40x context window savings vs raw output
|
|
98
|
+
*
|
|
99
|
+
* Optional - only included when it provides value beyond structured errors array
|
|
100
|
+
*/
|
|
101
|
+
errorSummary: z.string().optional(),
|
|
102
|
+
/** Extraction quality metadata (only included when developerFeedback: true) */
|
|
103
|
+
metadata: ExtractionMetadataSchema.optional(),
|
|
104
|
+
});
|
|
105
|
+
/**
|
|
106
|
+
* Safe validation function for ErrorExtractorResult
|
|
107
|
+
*
|
|
108
|
+
* NOTE: This duplicates the pattern from @vibe-validate/core's createSafeValidator.
|
|
109
|
+
* We can't import from core here due to circular dependency (core → extractors).
|
|
110
|
+
* This is an acceptable trade-off for a foundational package.
|
|
111
|
+
*
|
|
112
|
+
* @param data - Data to validate
|
|
113
|
+
* @returns Validation result with success/error information
|
|
114
|
+
*/
|
|
115
|
+
export function safeValidateExtractorResult(data) {
|
|
116
|
+
const result = ErrorExtractorResultSchema.safeParse(data);
|
|
117
|
+
if (result.success) {
|
|
118
|
+
return { success: true, data: result.data };
|
|
119
|
+
}
|
|
120
|
+
// Extract error messages with full path
|
|
121
|
+
const errors = result.error.errors.map(err => {
|
|
122
|
+
const path = err.path.join('.');
|
|
123
|
+
return path ? `${path}: ${err.message}` : err.message;
|
|
124
|
+
});
|
|
125
|
+
return { success: false, errors };
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Strict validation function for ErrorExtractorResult
|
|
129
|
+
*
|
|
130
|
+
* Validates and throws on error.
|
|
131
|
+
*
|
|
132
|
+
* @param data - Data to validate
|
|
133
|
+
* @returns Validated result
|
|
134
|
+
* @throws {Error} If validation fails
|
|
135
|
+
*/
|
|
136
|
+
export function validateExtractorResult(data) {
|
|
137
|
+
return ErrorExtractorResultSchema.parse(data);
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=result-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-schema.js","sourceRoot":"","sources":["../src/result-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Generate JSON Schema File for Error Extractor Results
|
|
4
|
+
*
|
|
5
|
+
* Creates error-extractor-result.schema.json in the package root for use in
|
|
6
|
+
* validating documentation examples and agent integration code.
|
|
7
|
+
* This script runs during the build process.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=generate-result-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-result-schema.d.ts","sourceRoot":"","sources":["../../src/scripts/generate-result-schema.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Generate JSON Schema File for Error Extractor Results
|
|
4
|
+
*
|
|
5
|
+
* Creates error-extractor-result.schema.json in the package root for use in
|
|
6
|
+
* validating documentation examples and agent integration code.
|
|
7
|
+
* This script runs during the build process.
|
|
8
|
+
*/
|
|
9
|
+
import { writeFileSync } from 'node:fs';
|
|
10
|
+
import { fileURLToPath } from 'node:url';
|
|
11
|
+
import { dirname, join } from 'node:path';
|
|
12
|
+
import { extractorResultJsonSchema } from '../result-schema-export.js';
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = dirname(__filename);
|
|
15
|
+
const packageRoot = join(__dirname, '..', '..');
|
|
16
|
+
const schemaPath = join(packageRoot, 'error-extractor-result.schema.json');
|
|
17
|
+
// Generate and write schema file
|
|
18
|
+
writeFileSync(schemaPath, JSON.stringify(extractorResultJsonSchema, null, 2), 'utf-8');
|
|
19
|
+
console.log('✓ Generated error-extractor-result.schema.json');
|
|
20
|
+
//# sourceMappingURL=generate-result-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-result-schema.js","sourceRoot":"","sources":["../../src/scripts/generate-result-schema.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAChD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,oCAAoC,CAAC,CAAC;AAE3E,iCAAiC;AACjC,aAAa,CACX,UAAU,EACV,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE,IAAI,EAAE,CAAC,CAAC,EAClD,OAAO,CACR,CAAC;AAEF,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC"}
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @package @vibe-validate/extractors
|
|
7
7
|
*/
|
|
8
|
-
import type { ErrorExtractorResult } from './types.js';
|
|
8
|
+
import type { ErrorExtractorResult, ExtractorInput } from './types.js';
|
|
9
9
|
/**
|
|
10
10
|
* Auto-detect tool type from output patterns and extract errors
|
|
11
11
|
*
|
|
12
|
-
* Detection is 100% pattern-based
|
|
12
|
+
* Detection is 100% pattern-based from output analysis only.
|
|
13
13
|
* This ensures robust detection regardless of how users name their validation steps.
|
|
14
14
|
*
|
|
15
15
|
* Auto-detection rules (checked in order):
|
|
@@ -23,24 +23,21 @@ import type { ErrorExtractorResult } from './types.js';
|
|
|
23
23
|
* 8. **Vitest**: `×`/`❯`/`❌` symbols + `Test Files` summary
|
|
24
24
|
* 9. **Generic**: Fallback for all other formats
|
|
25
25
|
*
|
|
26
|
-
* @param
|
|
27
|
-
* @param output - Raw command output (may contain ANSI color codes)
|
|
26
|
+
* @param input - Raw command output (string) or separated streams (ExtractorInput)
|
|
28
27
|
* @returns Structured error information from appropriate extractor
|
|
29
28
|
*
|
|
30
29
|
* @example
|
|
31
30
|
* ```typescript
|
|
32
|
-
* //
|
|
33
|
-
* const result1 = autoDetectAndExtract(
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* const result3 = autoDetectAndExtract('Check', vitestOutput);
|
|
42
|
-
* // Uses extractVitestErrors
|
|
31
|
+
* // Legacy usage (string)
|
|
32
|
+
* const result1 = autoDetectAndExtract(tscOutput);
|
|
33
|
+
*
|
|
34
|
+
* // New usage (separated streams)
|
|
35
|
+
* const result2 = autoDetectAndExtract({
|
|
36
|
+
* stdout: stdoutString,
|
|
37
|
+
* stderr: stderrString,
|
|
38
|
+
* combined: combinedString
|
|
39
|
+
* });
|
|
43
40
|
* ```
|
|
44
41
|
*/
|
|
45
|
-
export declare function autoDetectAndExtract(
|
|
42
|
+
export declare function autoDetectAndExtract(input: string | ExtractorInput): ErrorExtractorResult;
|
|
46
43
|
//# sourceMappingURL=smart-extractor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smart-extractor.d.ts","sourceRoot":"","sources":["../src/smart-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"smart-extractor.d.ts","sourceRoot":"","sources":["../src/smart-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAYvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,oBAAoB,CAmKzF"}
|
package/dist/smart-extractor.js
CHANGED
|
@@ -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
|
|
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):
|
|
@@ -32,27 +32,28 @@ import { stripAnsiCodes } from './utils.js';
|
|
|
32
32
|
* 8. **Vitest**: `×`/`❯`/`❌` symbols + `Test Files` summary
|
|
33
33
|
* 9. **Generic**: Fallback for all other formats
|
|
34
34
|
*
|
|
35
|
-
* @param
|
|
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
|
-
* //
|
|
42
|
-
* const result1 = autoDetectAndExtract(
|
|
43
|
-
* // Uses extractTypeScriptErrors
|
|
40
|
+
* // Legacy usage (string)
|
|
41
|
+
* const result1 = autoDetectAndExtract(tscOutput);
|
|
44
42
|
*
|
|
45
|
-
* //
|
|
46
|
-
* const result2 = autoDetectAndExtract(
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
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
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)
|
|
55
|
-
export function autoDetectAndExtract(
|
|
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;
|
|
56
57
|
// CRITICAL: Strip ANSI codes centrally before routing to extractors
|
|
57
58
|
//
|
|
58
59
|
// Design Decision: Central stripping (DRY & fail-safe)
|
|
@@ -66,13 +67,13 @@ export function autoDetectAndExtract(context, output) {
|
|
|
66
67
|
// - Impossible to forget (enforced for all extractors)
|
|
67
68
|
// - Consistent behavior across all extraction paths
|
|
68
69
|
// - Easier to maintain and test
|
|
69
|
-
const
|
|
70
|
+
const errorSummary = stripAnsiCodes(output);
|
|
70
71
|
// TypeScript detection: Check for TypeScript compiler error patterns
|
|
71
72
|
// - "error TS####:" (error code like TS2322, TS2345)
|
|
72
73
|
// - Format: file.ts(line,col): error TS####:
|
|
73
|
-
const hasTypeScriptMarkers = /error TS\d+:/.exec(
|
|
74
|
+
const hasTypeScriptMarkers = /error TS\d+:/.exec(errorSummary);
|
|
74
75
|
if (hasTypeScriptMarkers) {
|
|
75
|
-
const result = extractTypeScriptErrors(
|
|
76
|
+
const result = extractTypeScriptErrors(errorSummary);
|
|
76
77
|
return addDetectionMetadata(result, 'typescript', 95, ['error TS#### pattern'], 'TypeScript compiler error format detected');
|
|
77
78
|
}
|
|
78
79
|
// ESLint detection: Check for ESLint-specific patterns
|
|
@@ -80,28 +81,52 @@ export function autoDetectAndExtract(context, output) {
|
|
|
80
81
|
// - File paths with line:col followed by error/warning (with optional colon)
|
|
81
82
|
const hasESLintMarkers =
|
|
82
83
|
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Boolean OR for pattern matching, not nullish check
|
|
83
|
-
/✖ \d+ problems?/.exec(
|
|
84
|
+
/✖ \d+ problems?/.exec(errorSummary) ||
|
|
84
85
|
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects ESLint output format (controlled linter output), limited input size
|
|
85
|
-
/\d+:\d+:?\s+(error|warning)\s+/.exec(
|
|
86
|
+
/\d+:\d+:?\s+(error|warning)\s+/.exec(errorSummary);
|
|
86
87
|
if (hasESLintMarkers) {
|
|
87
|
-
const result = extractESLintErrors(
|
|
88
|
+
const result = extractESLintErrors(errorSummary);
|
|
88
89
|
const patterns = [];
|
|
89
|
-
if (/✖ \d+ problems?/.exec(
|
|
90
|
+
if (/✖ \d+ problems?/.exec(errorSummary))
|
|
90
91
|
patterns.push('✖ X problems summary');
|
|
91
92
|
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects ESLint output format (controlled linter output), limited input size
|
|
92
|
-
if (/\d+:\d+:?\s+(error|warning)\s+/.exec(
|
|
93
|
+
if (/\d+:\d+:?\s+(error|warning)\s+/.exec(errorSummary))
|
|
93
94
|
patterns.push('line:col error/warning format');
|
|
94
95
|
return addDetectionMetadata(result, 'eslint', 90, patterns, 'ESLint error format detected');
|
|
95
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
|
+
}
|
|
96
121
|
// Auto-detect JUnit XML format
|
|
97
122
|
// Must have both <?xml at start of line AND <testsuite tag (not just mentioned in text)
|
|
98
|
-
if (/^<\?xml\s+/m.exec(
|
|
99
|
-
const result = extractJUnitErrors(
|
|
123
|
+
if (/^<\?xml\s+/m.exec(errorSummary) && errorSummary.includes('<testsuite')) {
|
|
124
|
+
const result = extractJUnitErrors(errorSummary);
|
|
100
125
|
return addDetectionMetadata(result, 'junit', 100, ['<?xml header', '<testsuite> tag'], 'JUnit XML format detected');
|
|
101
126
|
}
|
|
102
127
|
// Auto-detect Jasmine format (distinctive "Failures:" header)
|
|
103
|
-
if (
|
|
104
|
-
const result = extractJasmineErrors(
|
|
128
|
+
if (errorSummary.includes('Failures:') && /^\d+\)\s+/m.exec(errorSummary)) {
|
|
129
|
+
const result = extractJasmineErrors(errorSummary);
|
|
105
130
|
return addDetectionMetadata(result, 'jasmine', 85, ['Failures: header', 'numbered test list'], 'Jasmine test output format detected');
|
|
106
131
|
}
|
|
107
132
|
// Jest detection: Check output for Jest-specific patterns
|
|
@@ -110,29 +135,29 @@ export function autoDetectAndExtract(context, output) {
|
|
|
110
135
|
// - "Test Suites:" summary line (Jest-specific, Vitest uses "Test Files")
|
|
111
136
|
// Jest patterns are highly distinctive (confidence 90) vs Mocha's generic patterns (confidence 80)
|
|
112
137
|
// Mocha's "passing"/"failing" patterns can appear in Jest test names, causing misdetection
|
|
113
|
-
const hasJestMarkers =
|
|
114
|
-
|
|
138
|
+
const hasJestMarkers = errorSummary.includes('●') ||
|
|
139
|
+
errorSummary.includes('Test Suites:');
|
|
115
140
|
if (hasJestMarkers) {
|
|
116
|
-
const result = extractJestErrors(
|
|
141
|
+
const result = extractJestErrors(errorSummary);
|
|
117
142
|
const patterns = [];
|
|
118
|
-
if (
|
|
143
|
+
if (errorSummary.includes('●'))
|
|
119
144
|
patterns.push('● bullet marker');
|
|
120
|
-
if (
|
|
145
|
+
if (errorSummary.includes('Test Suites:'))
|
|
121
146
|
patterns.push('Test Suites: summary');
|
|
122
147
|
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects Jest test framework output format (controlled test framework output), not user input
|
|
123
|
-
if (/^\s*FAIL\s+/m.exec(
|
|
148
|
+
if (/^\s*FAIL\s+/m.exec(errorSummary))
|
|
124
149
|
patterns.push('FAIL marker');
|
|
125
150
|
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects Jest test framework output format (controlled test framework output), not user input
|
|
126
|
-
if (/^\s*PASS\s+/m.exec(
|
|
151
|
+
if (/^\s*PASS\s+/m.exec(errorSummary))
|
|
127
152
|
patterns.push('PASS marker');
|
|
128
153
|
return addDetectionMetadata(result, 'jest', 90, patterns, 'Jest test output format detected');
|
|
129
154
|
}
|
|
130
155
|
// Auto-detect Mocha format (distinctive "X passing"/"X failing" pattern)
|
|
131
156
|
// NOTE: Checked AFTER Jest because "passing"/"failing" can appear in Jest test names
|
|
132
|
-
if ((
|
|
157
|
+
if ((errorSummary.includes(' passing') || errorSummary.includes(' failing')) &&
|
|
133
158
|
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects Mocha test framework output format (controlled test framework output), not user input
|
|
134
|
-
/\s+\d+\)\s+/.exec(
|
|
135
|
-
const result = extractMochaErrors(
|
|
159
|
+
/\s+\d+\)\s+/.exec(errorSummary)) {
|
|
160
|
+
const result = extractMochaErrors(errorSummary);
|
|
136
161
|
return addDetectionMetadata(result, 'mocha', 80, ['passing/failing summary', 'numbered failures'], 'Mocha test output format detected');
|
|
137
162
|
}
|
|
138
163
|
// Playwright detection: Check for Playwright-specific patterns
|
|
@@ -141,21 +166,21 @@ export function autoDetectAndExtract(context, output) {
|
|
|
141
166
|
// - ✘ symbol followed by .spec.ts file path
|
|
142
167
|
// IMPORTANT: Require .spec.ts with › separator OR ✘ + .spec.ts (not just mentioned in text)
|
|
143
168
|
// Must check BEFORE Vitest to avoid misdetection (.spec.ts vs .test.ts)
|
|
144
|
-
const hasPlaywrightMarkers = (
|
|
169
|
+
const hasPlaywrightMarkers = (errorSummary.includes('.spec.ts') &&
|
|
145
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.
|
|
146
|
-
(/\d+\)\s+.*\.spec\.ts:\d+:\d+\s+›/.exec(
|
|
171
|
+
(/\d+\)\s+.*\.spec\.ts:\d+:\d+\s+›/.exec(errorSummary) ||
|
|
147
172
|
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects Playwright test framework output format (controlled test framework output), not user input
|
|
148
|
-
/✘.*\.spec\.ts/.exec(
|
|
173
|
+
/✘.*\.spec\.ts/.exec(errorSummary)));
|
|
149
174
|
if (hasPlaywrightMarkers) {
|
|
150
|
-
const result = extractPlaywrightErrors(
|
|
175
|
+
const result = extractPlaywrightErrors(errorSummary);
|
|
151
176
|
const patterns = [];
|
|
152
|
-
if (
|
|
177
|
+
if (errorSummary.includes('.spec.ts'))
|
|
153
178
|
patterns.push('.spec.ts files');
|
|
154
179
|
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects Playwright test framework output format (controlled test framework output), not user input
|
|
155
|
-
if (/\d+\)\s+.*\.spec\.ts:\d+:\d+\s+›/.exec(
|
|
180
|
+
if (/\d+\)\s+.*\.spec\.ts:\d+:\d+\s+›/.exec(errorSummary))
|
|
156
181
|
patterns.push('numbered failures with › separator');
|
|
157
182
|
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only detects Playwright test framework output format (controlled test framework output), not user input
|
|
158
|
-
if (/✘.*\.spec\.ts/.exec(
|
|
183
|
+
if (/✘.*\.spec\.ts/.exec(errorSummary))
|
|
159
184
|
patterns.push('✘ failure with .spec.ts file');
|
|
160
185
|
return addDetectionMetadata(result, 'playwright', 95, patterns, 'Playwright test output format detected');
|
|
161
186
|
}
|
|
@@ -169,28 +194,28 @@ export function autoDetectAndExtract(context, output) {
|
|
|
169
194
|
// NOTE: Both Vitest and Jest use ✓ (check mark), so we don't check for it alone
|
|
170
195
|
// IMPORTANT: Require MULTIPLE patterns together to avoid false positives
|
|
171
196
|
// (e.g., ❯ can appear in Jest stack traces from source code comments)
|
|
172
|
-
const hasVitestMarkers = (
|
|
197
|
+
const hasVitestMarkers = (errorSummary.includes('×') || errorSummary.includes(' ❯ ') || errorSummary.includes('❌')) &&
|
|
173
198
|
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Boolean OR for pattern matching, not nullish check
|
|
174
|
-
(
|
|
199
|
+
(errorSummary.includes('Test Files') || /FAIL\s+\d+\s+test\s+(file|case)/i.exec(errorSummary) || errorSummary.includes('.test.ts'));
|
|
175
200
|
if (hasVitestMarkers) {
|
|
176
|
-
const result = extractVitestErrors(
|
|
201
|
+
const result = extractVitestErrors(errorSummary);
|
|
177
202
|
const patterns = [];
|
|
178
|
-
if (
|
|
203
|
+
if (errorSummary.includes('×'))
|
|
179
204
|
patterns.push('× symbol (U+00D7)');
|
|
180
|
-
if (
|
|
205
|
+
if (errorSummary.includes('❌'))
|
|
181
206
|
patterns.push('❌ cross mark');
|
|
182
|
-
if (
|
|
207
|
+
if (errorSummary.includes(' ❯ '))
|
|
183
208
|
patterns.push('❯ arrow marker');
|
|
184
|
-
if (
|
|
209
|
+
if (errorSummary.includes('Test Files'))
|
|
185
210
|
patterns.push('Test Files summary');
|
|
186
|
-
if (
|
|
211
|
+
if (errorSummary.includes('.test.ts'))
|
|
187
212
|
patterns.push('.test.ts files');
|
|
188
|
-
if (/FAIL\s+\d+\s+test\s+(file|case)/i.exec(
|
|
213
|
+
if (/FAIL\s+\d+\s+test\s+(file|case)/i.exec(errorSummary))
|
|
189
214
|
patterns.push('FAIL N test files/cases pattern');
|
|
190
215
|
return addDetectionMetadata(result, 'vitest', 90, patterns, 'Vitest test output format detected');
|
|
191
216
|
}
|
|
192
217
|
// No specific pattern detected - use generic extractor
|
|
193
|
-
const result = extractGenericErrors(
|
|
218
|
+
const result = extractGenericErrors(errorSummary);
|
|
194
219
|
return addDetectionMetadata(result, 'generic', 50, ['no specific patterns'], 'No specific tool detected, using generic extractor');
|
|
195
220
|
}
|
|
196
221
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smart-extractor.js","sourceRoot":"","sources":["../src/smart-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C
|
|
1
|
+
{"version":3,"file":"smart-extractor.js","sourceRoot":"","sources":["../src/smart-extractor.ts"],"names":[],"mappings":"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"}
|
package/dist/tap-extractor.js
CHANGED
|
@@ -27,8 +27,8 @@ export function extractTAPErrors(output) {
|
|
|
27
27
|
return {
|
|
28
28
|
summary: '0 test(s) failed',
|
|
29
29
|
errors: [],
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
totalErrors: 0,
|
|
31
|
+
errorSummary: '',
|
|
32
32
|
guidance: '',
|
|
33
33
|
metadata: {
|
|
34
34
|
confidence: 100,
|
|
@@ -70,8 +70,8 @@ export function extractTAPErrors(output) {
|
|
|
70
70
|
return {
|
|
71
71
|
summary,
|
|
72
72
|
errors,
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
totalErrors: failures.length,
|
|
74
|
+
errorSummary: formatCleanOutput(errors),
|
|
75
75
|
guidance,
|
|
76
76
|
metadata
|
|
77
77
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tap-extractor.js","sourceRoot":"","sources":["../src/tap-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,gEAAgE;IAEhE,uBAAuB;IACvB,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,kBAAkB;YAC3B,MAAM,EAAE,EAAE;YACV,
|
|
1
|
+
{"version":3,"file":"tap-extractor.js","sourceRoot":"","sources":["../src/tap-extractor.ts"],"names":[],"mappings":"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"}
|