@vibe-validate/extractors 0.17.0-rc3 → 0.17.0

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 (159) hide show
  1. package/dist/extractor-registry.d.ts +103 -0
  2. package/dist/extractor-registry.d.ts.map +1 -0
  3. package/dist/extractor-registry.js +278 -0
  4. package/dist/extractor-registry.js.map +1 -0
  5. package/dist/extractors/ava/index.d.ts +23 -0
  6. package/dist/extractors/ava/index.d.ts.map +1 -0
  7. package/dist/extractors/ava/index.js +507 -0
  8. package/dist/extractors/ava/index.js.map +1 -0
  9. package/dist/extractors/ava/index.test.d.ts +7 -0
  10. package/dist/extractors/ava/index.test.d.ts.map +1 -0
  11. package/dist/extractors/ava/index.test.js +408 -0
  12. package/dist/extractors/ava/index.test.js.map +1 -0
  13. package/dist/extractors/eslint/index.d.ts +18 -0
  14. package/dist/extractors/eslint/index.d.ts.map +1 -0
  15. package/dist/extractors/eslint/index.js +206 -0
  16. package/dist/extractors/eslint/index.js.map +1 -0
  17. package/dist/extractors/eslint/index.test.d.ts +9 -0
  18. package/dist/extractors/eslint/index.test.d.ts.map +1 -0
  19. package/dist/extractors/eslint/index.test.js +191 -0
  20. package/dist/extractors/eslint/index.test.js.map +1 -0
  21. package/dist/extractors/generic/index.d.ts +30 -0
  22. package/dist/extractors/generic/index.d.ts.map +1 -0
  23. package/dist/extractors/generic/index.js +140 -0
  24. package/dist/extractors/generic/index.js.map +1 -0
  25. package/dist/extractors/generic/index.test.d.ts +7 -0
  26. package/dist/extractors/generic/index.test.d.ts.map +1 -0
  27. package/dist/extractors/generic/index.test.js +61 -0
  28. package/dist/extractors/generic/index.test.js.map +1 -0
  29. package/dist/extractors/jasmine/index.d.ts +17 -0
  30. package/dist/extractors/jasmine/index.d.ts.map +1 -0
  31. package/dist/extractors/jasmine/index.js +254 -0
  32. package/dist/extractors/jasmine/index.js.map +1 -0
  33. package/dist/extractors/jasmine/index.test.d.ts +7 -0
  34. package/dist/extractors/jasmine/index.test.d.ts.map +1 -0
  35. package/dist/extractors/jasmine/index.test.js +345 -0
  36. package/dist/extractors/jasmine/index.test.js.map +1 -0
  37. package/dist/extractors/jest/index.d.ts +17 -0
  38. package/dist/extractors/jest/index.d.ts.map +1 -0
  39. package/dist/extractors/jest/index.js +278 -0
  40. package/dist/extractors/jest/index.js.map +1 -0
  41. package/dist/extractors/jest/index.test.d.ts +9 -0
  42. package/dist/extractors/jest/index.test.d.ts.map +1 -0
  43. package/dist/extractors/jest/index.test.js +353 -0
  44. package/dist/extractors/jest/index.test.js.map +1 -0
  45. package/dist/extractors/junit/index.d.ts +18 -0
  46. package/dist/extractors/junit/index.d.ts.map +1 -0
  47. package/dist/extractors/junit/index.js +259 -0
  48. package/dist/extractors/junit/index.js.map +1 -0
  49. package/dist/extractors/junit/index.test.d.ts +7 -0
  50. package/dist/extractors/junit/index.test.d.ts.map +1 -0
  51. package/dist/extractors/junit/index.test.js +341 -0
  52. package/dist/extractors/junit/index.test.js.map +1 -0
  53. package/dist/extractors/maven-checkstyle/index.d.ts +23 -0
  54. package/dist/extractors/maven-checkstyle/index.d.ts.map +1 -0
  55. package/dist/extractors/maven-checkstyle/index.js +263 -0
  56. package/dist/extractors/maven-checkstyle/index.js.map +1 -0
  57. package/dist/extractors/maven-checkstyle/index.test.d.ts +2 -0
  58. package/dist/extractors/maven-checkstyle/index.test.d.ts.map +1 -0
  59. package/dist/extractors/maven-checkstyle/index.test.js +197 -0
  60. package/dist/extractors/maven-checkstyle/index.test.js.map +1 -0
  61. package/dist/extractors/maven-compiler/index.d.ts +23 -0
  62. package/dist/extractors/maven-compiler/index.d.ts.map +1 -0
  63. package/dist/extractors/maven-compiler/index.js +271 -0
  64. package/dist/extractors/maven-compiler/index.js.map +1 -0
  65. package/dist/extractors/maven-compiler/index.test.d.ts +2 -0
  66. package/dist/extractors/maven-compiler/index.test.d.ts.map +1 -0
  67. package/dist/extractors/maven-compiler/index.test.js +189 -0
  68. package/dist/extractors/maven-compiler/index.test.js.map +1 -0
  69. package/dist/extractors/maven-surefire/index.d.ts +23 -0
  70. package/dist/extractors/maven-surefire/index.d.ts.map +1 -0
  71. package/dist/extractors/maven-surefire/index.js +292 -0
  72. package/dist/extractors/maven-surefire/index.js.map +1 -0
  73. package/dist/extractors/maven-surefire/index.test.d.ts +2 -0
  74. package/dist/extractors/maven-surefire/index.test.d.ts.map +1 -0
  75. package/dist/extractors/maven-surefire/index.test.js +169 -0
  76. package/dist/extractors/maven-surefire/index.test.js.map +1 -0
  77. package/dist/extractors/mocha/index.d.ts +17 -0
  78. package/dist/extractors/mocha/index.d.ts.map +1 -0
  79. package/dist/extractors/mocha/index.js +241 -0
  80. package/dist/extractors/mocha/index.js.map +1 -0
  81. package/dist/extractors/mocha/index.test.d.ts +7 -0
  82. package/dist/extractors/mocha/index.test.d.ts.map +1 -0
  83. package/dist/extractors/mocha/index.test.js +300 -0
  84. package/dist/extractors/mocha/index.test.js.map +1 -0
  85. package/dist/extractors/playwright/index.d.ts +17 -0
  86. package/dist/extractors/playwright/index.d.ts.map +1 -0
  87. package/dist/extractors/playwright/index.js +320 -0
  88. package/dist/extractors/playwright/index.js.map +1 -0
  89. package/dist/extractors/playwright/index.test.d.ts +7 -0
  90. package/dist/extractors/playwright/index.test.d.ts.map +1 -0
  91. package/dist/extractors/playwright/index.test.js +274 -0
  92. package/dist/extractors/playwright/index.test.js.map +1 -0
  93. package/dist/extractors/tap/index.d.ts +23 -0
  94. package/dist/extractors/tap/index.d.ts.map +1 -0
  95. package/dist/extractors/tap/index.js +352 -0
  96. package/dist/extractors/tap/index.js.map +1 -0
  97. package/dist/extractors/tap/index.test.d.ts +7 -0
  98. package/dist/extractors/tap/index.test.d.ts.map +1 -0
  99. package/dist/extractors/tap/index.test.js +100 -0
  100. package/dist/extractors/tap/index.test.js.map +1 -0
  101. package/dist/extractors/typescript/index.d.ts +17 -0
  102. package/dist/extractors/typescript/index.d.ts.map +1 -0
  103. package/dist/extractors/typescript/index.js +150 -0
  104. package/dist/extractors/typescript/index.js.map +1 -0
  105. package/dist/extractors/typescript/index.test.d.ts +9 -0
  106. package/dist/extractors/typescript/index.test.d.ts.map +1 -0
  107. package/dist/extractors/typescript/index.test.js +177 -0
  108. package/dist/extractors/typescript/index.test.js.map +1 -0
  109. package/dist/extractors/vitest/index.d.ts +17 -0
  110. package/dist/extractors/vitest/index.d.ts.map +1 -0
  111. package/dist/extractors/vitest/index.js +564 -0
  112. package/dist/extractors/vitest/index.js.map +1 -0
  113. package/dist/extractors/vitest/index.test.d.ts +9 -0
  114. package/dist/extractors/vitest/index.test.d.ts.map +1 -0
  115. package/dist/extractors/vitest/index.test.js +373 -0
  116. package/dist/extractors/vitest/index.test.js.map +1 -0
  117. package/dist/index.d.ts +27 -13
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +27 -13
  120. package/dist/index.js.map +1 -1
  121. package/dist/maven-compiler-extractor.d.ts +20 -0
  122. package/dist/maven-compiler-extractor.d.ts.map +1 -0
  123. package/dist/maven-compiler-extractor.js +218 -0
  124. package/dist/maven-compiler-extractor.js.map +1 -0
  125. package/dist/maven-utils.d.ts +24 -0
  126. package/dist/maven-utils.d.ts.map +1 -0
  127. package/dist/maven-utils.js +36 -0
  128. package/dist/maven-utils.js.map +1 -0
  129. package/dist/plugin-loader.d.ts +82 -0
  130. package/dist/plugin-loader.d.ts.map +1 -0
  131. package/dist/plugin-loader.js +201 -0
  132. package/dist/plugin-loader.js.map +1 -0
  133. package/dist/result-schema.d.ts +59 -9
  134. package/dist/result-schema.d.ts.map +1 -1
  135. package/dist/result-schema.js +3 -19
  136. package/dist/result-schema.js.map +1 -1
  137. package/dist/sandbox.d.ts +161 -0
  138. package/dist/sandbox.d.ts.map +1 -0
  139. package/dist/sandbox.js +254 -0
  140. package/dist/sandbox.js.map +1 -0
  141. package/dist/sandbox.test.d.ts +8 -0
  142. package/dist/sandbox.test.d.ts.map +1 -0
  143. package/dist/sandbox.test.js +395 -0
  144. package/dist/sandbox.test.js.map +1 -0
  145. package/dist/sandboxed-extractor.d.ts +46 -0
  146. package/dist/sandboxed-extractor.d.ts.map +1 -0
  147. package/dist/sandboxed-extractor.js +172 -0
  148. package/dist/sandboxed-extractor.js.map +1 -0
  149. package/dist/sandboxed-extractor.test.d.ts +5 -0
  150. package/dist/sandboxed-extractor.test.d.ts.map +1 -0
  151. package/dist/sandboxed-extractor.test.js +346 -0
  152. package/dist/sandboxed-extractor.test.js.map +1 -0
  153. package/dist/smart-extractor.d.ts +22 -10
  154. package/dist/smart-extractor.d.ts.map +1 -1
  155. package/dist/smart-extractor.js +116 -186
  156. package/dist/smart-extractor.js.map +1 -1
  157. package/dist/types.d.ts +94 -0
  158. package/dist/types.d.ts.map +1 -1
  159. package/package.json +3 -2
@@ -0,0 +1,341 @@
1
+ /**
2
+ * JUnit XML Error Extractor Plugin Tests
3
+ *
4
+ * @package @vibe-validate/extractors
5
+ */
6
+ import { describe, it, expect } from 'vitest';
7
+ import junitPlugin from './index.js';
8
+ const { detect, extract } = junitPlugin;
9
+ describe('JUnit Plugin', () => {
10
+ describe('Detection', () => {
11
+ it('should detect JUnit XML with failures (high confidence)', () => {
12
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
13
+ <testsuites>
14
+ <testsuite name="test.ts">
15
+ <testcase name="test">
16
+ <failure message="error" type="Error">
17
+ ❯ test.ts:10:20
18
+ </failure>
19
+ </testcase>
20
+ </testsuite>
21
+ </testsuites>`;
22
+ const result = detect(input);
23
+ expect(result.confidence).toBe(90);
24
+ expect(result.patterns).toContain('<testsuite>');
25
+ expect(result.patterns).toContain('<failure>');
26
+ expect(result.reason).toContain('JUnit XML format with test failures detected');
27
+ });
28
+ it('should detect JUnit XML without failures (lower confidence)', () => {
29
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
30
+ <testsuites tests="5" failures="0">
31
+ <testsuite name="test.ts" tests="5" failures="0">
32
+ <testcase name="test 1" time="0.001"></testcase>
33
+ </testsuite>
34
+ </testsuites>`;
35
+ const result = detect(input);
36
+ expect(result.confidence).toBe(85);
37
+ expect(result.patterns).toContain('<testsuite>');
38
+ });
39
+ it('should not detect non-JUnit output', () => {
40
+ const input = 'Regular test output without XML';
41
+ const result = detect(input);
42
+ expect(result.confidence).toBe(0);
43
+ });
44
+ });
45
+ describe('Basic Extraction', () => {
46
+ it('should extract single test failure from JUnit XML', () => {
47
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
48
+ <testsuites name="vitest tests" tests="1" failures="1" errors="0" time="0.002">
49
+ <testsuite name="test/calculator.test.ts" tests="1" failures="1" errors="0" skipped="0" time="0.002">
50
+ <testcase classname="test/calculator.test.ts" name="Calculator &gt; should add numbers" time="0.001">
51
+ <failure message="expected 4 to be 5 // Object.is equality" type="AssertionError">
52
+ AssertionError: expected 4 to be 5 // Object.is equality
53
+
54
+ - Expected
55
+ + Received
56
+
57
+ - 5
58
+ + 4
59
+
60
+ ❯ test/calculator.test.ts:10:21
61
+ </failure>
62
+ </testcase>
63
+ </testsuite>
64
+ </testsuites>`;
65
+ const result = extract(input);
66
+ expect(result.summary).toBe('1 test(s) failed');
67
+ expect(result.errors).toHaveLength(1);
68
+ expect(result.errors[0]).toMatchObject({
69
+ file: 'test/calculator.test.ts',
70
+ line: 10,
71
+ message: 'expected 4 to be 5 // Object.is equality',
72
+ });
73
+ // Context should contain test hierarchy
74
+ expect(result.errors[0].context).toBeTruthy();
75
+ });
76
+ it('should extract multiple test failures', () => {
77
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
78
+ <testsuites name="vitest tests" tests="3" failures="2" errors="0" time="0.006">
79
+ <testsuite name="test/math.test.ts" tests="3" failures="2" errors="0" skipped="0" time="0.006">
80
+ <testcase classname="test/math.test.ts" name="Math &gt; should multiply" time="0.002">
81
+ <failure message="expected 6 to be 8 // Object.is equality" type="AssertionError">
82
+ AssertionError: expected 6 to be 8 // Object.is equality
83
+ ❯ test/math.test.ts:15:20
84
+ </failure>
85
+ </testcase>
86
+ <testcase classname="test/math.test.ts" name="Math &gt; should divide" time="0.001">
87
+ </testcase>
88
+ <testcase classname="test/math.test.ts" name="Math &gt; should subtract" time="0.003">
89
+ <failure message="expected -1 to be 0 // Object.is equality" type="AssertionError">
90
+ AssertionError: expected -1 to be 0 // Object.is equality
91
+ ❯ test/math.test.ts:25:22
92
+ </failure>
93
+ </testcase>
94
+ </testsuite>
95
+ </testsuites>`;
96
+ const result = extract(input);
97
+ expect(result.summary).toBe('2 test(s) failed');
98
+ expect(result.errors).toHaveLength(2);
99
+ expect(result.errors[0].file).toBe('test/math.test.ts');
100
+ expect(result.errors[1].file).toBe('test/math.test.ts');
101
+ });
102
+ });
103
+ describe('Error Type Detection', () => {
104
+ it('should detect AssertionError', () => {
105
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
106
+ <testsuites>
107
+ <testsuite name="test.ts">
108
+ <testcase name="test">
109
+ <failure message="assertion failed" type="AssertionError">
110
+ ❯ test.ts:10:20
111
+ </failure>
112
+ </testcase>
113
+ </testsuite>
114
+ </testsuites>`;
115
+ const result = extract(input);
116
+ expect(result.errors[0].message).toContain('assertion failed');
117
+ expect(result.guidance).toContain('assertion');
118
+ });
119
+ it('should detect TypeError', () => {
120
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
121
+ <testsuites>
122
+ <testsuite name="test.ts">
123
+ <testcase name="test">
124
+ <failure message="Cannot read properties of null" type="TypeError">
125
+ TypeError: Cannot read properties of null (reading 'foo')
126
+ ❯ test.ts:38:18
127
+ </failure>
128
+ </testcase>
129
+ </testsuite>
130
+ </testsuites>`;
131
+ const result = extract(input);
132
+ expect(result.errors[0].message).toContain('Cannot read properties of null');
133
+ expect(result.guidance).toContain('null/undefined');
134
+ });
135
+ it('should detect ENOENT errors', () => {
136
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
137
+ <testsuites>
138
+ <testsuite name="test.ts">
139
+ <testcase name="test">
140
+ <failure message="ENOENT: no such file or directory" type="Error">
141
+ Error: ENOENT: no such file or directory, open '/nonexistent/file.txt'
142
+ ❯ test.ts:30:7
143
+ </failure>
144
+ </testcase>
145
+ </testsuite>
146
+ </testsuites>`;
147
+ const result = extract(input);
148
+ expect(result.errors[0].message).toContain('ENOENT');
149
+ expect(result.guidance).toContain('file paths');
150
+ });
151
+ it('should detect timeout errors', () => {
152
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
153
+ <testsuites>
154
+ <testsuite name="test.ts">
155
+ <testcase name="test">
156
+ <failure message="Test timed out in 100ms." type="Error">
157
+ Error: Test timed out in 100ms.
158
+ If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
159
+ ❯ test.ts:43:5
160
+ </failure>
161
+ </testcase>
162
+ </testsuite>
163
+ </testsuites>`;
164
+ const result = extract(input);
165
+ expect(result.errors[0].message).toContain('Test timed out');
166
+ expect(result.guidance).toContain('timeout');
167
+ });
168
+ });
169
+ describe('Location Extraction', () => {
170
+ it('should extract file:line format', () => {
171
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
172
+ <testsuites>
173
+ <testsuite name="src/utils.test.ts">
174
+ <testcase classname="src/utils.test.ts" name="test">
175
+ <failure message="error" type="Error">
176
+ ❯ src/utils.test.ts:42:15
177
+ </failure>
178
+ </testcase>
179
+ </testsuite>
180
+ </testsuites>`;
181
+ const result = extract(input);
182
+ expect(result.errors[0].file).toBe('src/utils.test.ts');
183
+ expect(result.errors[0].line).toBe(42);
184
+ });
185
+ it('should handle file:line:column format', () => {
186
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
187
+ <testsuites>
188
+ <testsuite name="test.ts">
189
+ <testcase classname="test.ts" name="test">
190
+ <failure message="error" type="Error">
191
+ ❯ packages/core/test/runner.test.ts:128:30
192
+ </failure>
193
+ </testcase>
194
+ </testsuite>
195
+ </testsuites>`;
196
+ const result = extract(input);
197
+ expect(result.errors[0].file).toBe('packages/core/test/runner.test.ts');
198
+ expect(result.errors[0].line).toBe(128);
199
+ });
200
+ });
201
+ describe('Test Hierarchy', () => {
202
+ it('should preserve test hierarchy in context', () => {
203
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
204
+ <testsuites>
205
+ <testsuite name="test.ts">
206
+ <testcase name="Suite &gt; Nested &gt; Deep &gt; test name">
207
+ <failure message="error" type="Error">
208
+ ❯ test.ts:10:20
209
+ </failure>
210
+ </testcase>
211
+ </testsuite>
212
+ </testsuites>`;
213
+ const result = extract(input);
214
+ expect(result.errors[0].context).toContain('Suite > Nested > Deep > test name');
215
+ });
216
+ it('should decode HTML entities in test names', () => {
217
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
218
+ <testsuites>
219
+ <testsuite name="test.ts">
220
+ <testcase name="Test with &quot;quotes&quot; &amp; symbols &gt; nested">
221
+ <failure message="error" type="Error">
222
+ ❯ test.ts:10:20
223
+ </failure>
224
+ </testcase>
225
+ </testsuite>
226
+ </testsuites>`;
227
+ const result = extract(input);
228
+ expect(result.errors[0].context).toContain('"quotes"');
229
+ expect(result.errors[0].context).toContain('& symbols >');
230
+ });
231
+ });
232
+ describe('Edge Cases', () => {
233
+ it('should handle empty JUnit XML', () => {
234
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
235
+ <testsuites></testsuites>`;
236
+ const result = extract(input);
237
+ expect(result.summary).toBe('0 test(s) failed');
238
+ expect(result.errors).toHaveLength(0);
239
+ });
240
+ it('should handle all passing tests', () => {
241
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
242
+ <testsuites tests="5" failures="0">
243
+ <testsuite name="test.ts" tests="5" failures="0">
244
+ <testcase name="test 1" time="0.001"></testcase>
245
+ <testcase name="test 2" time="0.001"></testcase>
246
+ </testsuite>
247
+ </testsuites>`;
248
+ const result = extract(input);
249
+ expect(result.summary).toBe('0 test(s) failed');
250
+ expect(result.errors).toHaveLength(0);
251
+ });
252
+ it('should handle invalid XML gracefully', () => {
253
+ const input = 'Not valid XML';
254
+ const result = extract(input);
255
+ expect(result.summary).toContain('Unable to parse JUnit XML');
256
+ expect(result.errors).toHaveLength(0);
257
+ });
258
+ it('should handle missing location in failure', () => {
259
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
260
+ <testsuites>
261
+ <testsuite name="test.ts">
262
+ <testcase classname="test.ts" name="test">
263
+ <failure message="error without location" type="Error">
264
+ Error: Something went wrong
265
+ </failure>
266
+ </testcase>
267
+ </testsuite>
268
+ </testsuites>`;
269
+ const result = extract(input);
270
+ expect(result.errors[0].file).toBe('test.ts');
271
+ expect(result.errors[0].message).toContain('error without location');
272
+ });
273
+ });
274
+ describe('Guidance Generation', () => {
275
+ it('should provide assertion error guidance', () => {
276
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
277
+ <testsuites>
278
+ <testsuite name="test.ts">
279
+ <testcase name="test">
280
+ <failure message="expected 4 to be 5" type="AssertionError">
281
+ ❯ test.ts:10:20
282
+ </failure>
283
+ </testcase>
284
+ </testsuite>
285
+ </testsuites>`;
286
+ const result = extract(input);
287
+ expect(result.guidance).toContain('assertion');
288
+ });
289
+ it('should provide timeout guidance', () => {
290
+ const input = `<?xml version="1.0" encoding="UTF-8" ?>
291
+ <testsuites>
292
+ <testsuite name="test.ts">
293
+ <testcase name="test">
294
+ <failure message="Test timed out" type="Error">
295
+ ❯ test.ts:10:20
296
+ </failure>
297
+ </testcase>
298
+ </testsuite>
299
+ </testsuites>`;
300
+ const result = extract(input);
301
+ expect(result.guidance).toContain('timeout');
302
+ });
303
+ });
304
+ describe('Sample Test Cases', () => {
305
+ it('should include samples that validate the plugin', () => {
306
+ expect(junitPlugin.samples).toBeDefined();
307
+ expect(junitPlugin.samples).toHaveLength(2);
308
+ // Validate single failure sample
309
+ const singleFailureSample = junitPlugin.samples[0];
310
+ if (!singleFailureSample.input) {
311
+ throw new Error('Sample input is required');
312
+ }
313
+ const singleResult = extract(singleFailureSample.input);
314
+ expect(singleResult.totalErrors).toBe(singleFailureSample.expected.totalErrors);
315
+ // Validate multiple failures sample
316
+ const multipleFailureSample = junitPlugin.samples[1];
317
+ if (!multipleFailureSample.input) {
318
+ throw new Error('Sample input is required');
319
+ }
320
+ const multipleResult = extract(multipleFailureSample.input);
321
+ expect(multipleResult.totalErrors).toBe(multipleFailureSample.expected.totalErrors);
322
+ });
323
+ });
324
+ describe('Plugin Metadata', () => {
325
+ it('should have correct metadata', () => {
326
+ expect(junitPlugin.metadata.name).toBe('junit');
327
+ expect(junitPlugin.metadata.version).toBe('1.0.0');
328
+ expect(junitPlugin.metadata.tags).toBeDefined();
329
+ expect(junitPlugin.metadata.tags).toContain('junit');
330
+ expect(junitPlugin.metadata.tags).toContain('vitest');
331
+ });
332
+ it('should have correct priority', () => {
333
+ expect(junitPlugin.priority).toBe(90);
334
+ });
335
+ it('should have correct hints', () => {
336
+ expect(junitPlugin.hints).toBeDefined();
337
+ expect(junitPlugin.hints?.required).toContain('<testsuite');
338
+ });
339
+ });
340
+ });
341
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/extractors/junit/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Maven Checkstyle Extractor Plugin
3
+ *
4
+ * Extracts style violations from Maven Checkstyle plugin output.
5
+ * Supports both output formats generated by maven-checkstyle-plugin.
6
+ *
7
+ * @package @vibe-validate/extractors
8
+ */
9
+ import type { ExtractorPlugin, DetectionResult, ErrorExtractorResult } from '../../types.js';
10
+ /**
11
+ * Detects if output is from Maven Checkstyle
12
+ */
13
+ export declare function detectMavenCheckstyle(output: string): DetectionResult;
14
+ /**
15
+ * Extracts Checkstyle violations from Maven output
16
+ */
17
+ export declare function extractMavenCheckstyle(output: string, command?: string): ErrorExtractorResult;
18
+ /**
19
+ * Maven Checkstyle Extractor Plugin
20
+ */
21
+ declare const mavenCheckstyleExtractor: ExtractorPlugin;
22
+ export default mavenCheckstyleExtractor;
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extractors/maven-checkstyle/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,oBAAoB,EAErB,MAAM,gBAAgB,CAAC;AAoCxB;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CA+CrE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,oBAAoB,CAmGtB;AAwCD;;GAEG;AACH,QAAA,MAAM,wBAAwB,EAAE,eAoE/B,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Maven Checkstyle Extractor Plugin
3
+ *
4
+ * Extracts style violations from Maven Checkstyle plugin output.
5
+ * Supports both output formats generated by maven-checkstyle-plugin.
6
+ *
7
+ * @package @vibe-validate/extractors
8
+ */
9
+ import { MAX_ERRORS_IN_ARRAY } from '../../result-schema.js';
10
+ import { extractRelativePath } from '../../maven-utils.js';
11
+ const CHECKSTYLE_PATTERNS = {
12
+ // Format 1: [WARN] /absolute/path:line:col: message [Rule]
13
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: Maven Checkstyle output is structured, limited line length
14
+ warnFormat: /^\[WARN\]\s+([^:]+):(\d+):(\d+):\s+(.+?)\s+\[(\w+)\]$/,
15
+ // Format 2: [WARNING] relative/path:[line,col] (category) Rule: message
16
+ // eslint-disable-next-line sonarjs/slow-regex -- Safe: Maven Checkstyle output is structured, limited line length
17
+ warningFormat: /^\[WARNING\]\s+([^:]+):\[(\d+)(?:,(\d+))?\]\s+\((\w+)\)\s+(\w+):\s+(.+)$/,
18
+ // Summary line: "You have N Checkstyle violations"
19
+ summary: /You have (\d+) Checkstyle violations/,
20
+ };
21
+ /**
22
+ * Detects if output is from Maven Checkstyle
23
+ */
24
+ export function detectMavenCheckstyle(output) {
25
+ const lines = output.split('\n');
26
+ let score = 0;
27
+ const foundPatterns = [];
28
+ // Look for Checkstyle-specific markers
29
+ let hasViolationFormat = false;
30
+ for (const line of lines) {
31
+ if (line.includes('maven-checkstyle-plugin')) {
32
+ score += 40;
33
+ foundPatterns.push('maven-checkstyle-plugin reference');
34
+ }
35
+ if (line.includes('Starting audit')) {
36
+ score += 20;
37
+ foundPatterns.push('Checkstyle audit start marker');
38
+ }
39
+ if (line.includes('Audit done')) {
40
+ score += 20;
41
+ foundPatterns.push('Checkstyle audit complete marker');
42
+ }
43
+ if (CHECKSTYLE_PATTERNS.summary.test(line)) {
44
+ score += 30;
45
+ foundPatterns.push('Checkstyle violation summary');
46
+ }
47
+ if (!hasViolationFormat && (CHECKSTYLE_PATTERNS.warnFormat.test(line) || CHECKSTYLE_PATTERNS.warningFormat.test(line))) {
48
+ score += 10;
49
+ foundPatterns.push('Checkstyle violation format');
50
+ hasViolationFormat = true; // Only count once, but don't break - keep looking for other markers
51
+ }
52
+ }
53
+ // Determine reason based on score
54
+ let reason;
55
+ if (score >= 70) {
56
+ reason = 'Maven Checkstyle plugin output detected';
57
+ }
58
+ else if (score >= 40) {
59
+ reason = 'Possible Maven Checkstyle output';
60
+ }
61
+ else {
62
+ reason = 'Not Maven Checkstyle output';
63
+ }
64
+ return {
65
+ confidence: Math.min(score, 100),
66
+ patterns: foundPatterns,
67
+ reason,
68
+ };
69
+ }
70
+ /**
71
+ * Extracts Checkstyle violations from Maven output
72
+ */
73
+ export function extractMavenCheckstyle(output, command) {
74
+ const detection = detectMavenCheckstyle(output);
75
+ if (detection.confidence < 40) {
76
+ return {
77
+ summary: 'Not Maven Checkstyle output',
78
+ totalErrors: 0,
79
+ errors: [],
80
+ metadata: {
81
+ detection: {
82
+ extractor: 'maven-checkstyle',
83
+ confidence: detection.confidence,
84
+ patterns: detection.patterns,
85
+ reason: detection.reason,
86
+ },
87
+ confidence: detection.confidence,
88
+ completeness: 100,
89
+ issues: [],
90
+ },
91
+ };
92
+ }
93
+ const violations = [];
94
+ const lines = output.split('\n');
95
+ for (const line of lines) {
96
+ // Try Format 1: [WARN] /path:line:col: message [Rule]
97
+ const warnMatch = CHECKSTYLE_PATTERNS.warnFormat.exec(line);
98
+ if (warnMatch) {
99
+ const [, filePath, lineStr, colStr, message, rule] = warnMatch;
100
+ violations.push({
101
+ file: extractRelativePath(filePath),
102
+ line: Number.parseInt(lineStr, 10),
103
+ column: Number.parseInt(colStr, 10),
104
+ message: message.trim(),
105
+ rule: rule.trim(),
106
+ });
107
+ continue;
108
+ }
109
+ // Try Format 2: [WARNING] path:[line,col] (category) Rule: message
110
+ const warningMatch = CHECKSTYLE_PATTERNS.warningFormat.exec(line);
111
+ if (warningMatch) {
112
+ const [, filePath, lineStr, colStr, category, rule, message] = warningMatch;
113
+ violations.push({
114
+ file: filePath.trim(),
115
+ line: Number.parseInt(lineStr, 10),
116
+ column: colStr ? Number.parseInt(colStr, 10) : undefined,
117
+ message: message.trim(),
118
+ rule: rule.trim(),
119
+ category: category.trim(),
120
+ });
121
+ }
122
+ }
123
+ // Remove duplicates (both formats report same violations)
124
+ const uniqueViolations = deduplicateViolations(violations);
125
+ // Convert to FormattedError format
126
+ const errors = uniqueViolations.slice(0, MAX_ERRORS_IN_ARRAY).map((v) => ({
127
+ file: v.file,
128
+ line: v.line,
129
+ column: v.column,
130
+ message: `${v.message} [${v.rule}]`,
131
+ }));
132
+ // Group by file for summary
133
+ const fileGroups = groupByFile(uniqueViolations);
134
+ const summary = `${uniqueViolations.length} Checkstyle violation(s) in ${fileGroups.size} file(s)`;
135
+ // Generate guidance
136
+ const guidance = uniqueViolations.length > 0
137
+ ? `Fix Checkstyle violations. Run ${command ?? 'mvn checkstyle:check'} to see all details.`
138
+ : undefined;
139
+ // Create error summary
140
+ const errorSummary = errors.length > 0
141
+ ? errors.map((e, i) => `[Error ${i + 1}/${errors.length}] ${e.file}:${e.line}\n${e.message}`).join('\n\n')
142
+ : undefined;
143
+ return {
144
+ summary,
145
+ totalErrors: uniqueViolations.length,
146
+ errors,
147
+ guidance,
148
+ errorSummary,
149
+ metadata: {
150
+ detection: {
151
+ extractor: 'maven-checkstyle',
152
+ confidence: detection.confidence,
153
+ patterns: detection.patterns,
154
+ reason: detection.reason,
155
+ },
156
+ confidence: 100,
157
+ completeness: 100,
158
+ issues: [],
159
+ },
160
+ };
161
+ }
162
+ /**
163
+ * Deduplicate violations (both formats report same violations)
164
+ */
165
+ function deduplicateViolations(violations) {
166
+ const seen = new Set();
167
+ const unique = [];
168
+ for (const v of violations) {
169
+ const key = `${v.file}:${v.line}:${v.column}:${v.rule}`;
170
+ if (!seen.has(key)) {
171
+ seen.add(key);
172
+ unique.push(v);
173
+ }
174
+ }
175
+ return unique;
176
+ }
177
+ /**
178
+ * Group violations by file
179
+ */
180
+ function groupByFile(violations) {
181
+ const groups = new Map();
182
+ for (const violation of violations) {
183
+ const file = violation.file || 'unknown';
184
+ if (!groups.has(file)) {
185
+ groups.set(file, []);
186
+ }
187
+ const group = groups.get(file);
188
+ if (group) {
189
+ group.push(violation);
190
+ }
191
+ }
192
+ return groups;
193
+ }
194
+ /**
195
+ * Maven Checkstyle Extractor Plugin
196
+ */
197
+ const mavenCheckstyleExtractor = {
198
+ metadata: {
199
+ name: 'maven-checkstyle',
200
+ version: '1.0.0',
201
+ author: 'Jeff Dutton <jeff@duckcreek.com>',
202
+ description: 'Extracts style violations from Maven Checkstyle plugin output',
203
+ repository: 'https://github.com/jdutton/vibe-validate',
204
+ tags: ['maven', 'java', 'checkstyle', 'style', 'linting'],
205
+ },
206
+ hints: {
207
+ required: ['[WARN]', '[INFO]'],
208
+ anyOf: ['maven-checkstyle-plugin', 'Starting audit', 'Checkstyle violations'],
209
+ },
210
+ priority: 60,
211
+ detect: detectMavenCheckstyle,
212
+ extract: extractMavenCheckstyle,
213
+ samples: [
214
+ {
215
+ name: 'basic-warn-format',
216
+ description: 'Format 1 violations with absolute paths',
217
+ input: `[INFO] Starting audit...
218
+ [WARN] /project/src/main/java/com/example/Foo.java:10:5: Missing Javadoc comment. [JavadocVariable]
219
+ [WARN] /project/src/main/java/com/example/Foo.java:15:1: '{' should be on previous line. [LeftCurly]
220
+ Audit done.`,
221
+ expected: {
222
+ totalErrors: 2,
223
+ errors: [
224
+ {
225
+ file: 'src/main/java/com/example/Foo.java',
226
+ line: 10,
227
+ column: 5,
228
+ message: 'Missing Javadoc comment. [JavadocVariable]',
229
+ },
230
+ ],
231
+ },
232
+ },
233
+ {
234
+ name: 'basic-warning-format',
235
+ description: 'Format 2 violations with relative paths',
236
+ input: `[INFO] Starting audit...
237
+ [WARNING] src/main/java/com/example/Foo.java:[10,5] (javadoc) JavadocVariable: Missing a Javadoc comment.
238
+ [WARNING] src/main/java/com/example/Foo.java:[15,1] (blocks) LeftCurly: '{' at column 1 should be on the previous line.
239
+ Audit done.`,
240
+ expected: {
241
+ totalErrors: 2,
242
+ errors: [
243
+ {
244
+ message: 'Missing a Javadoc comment. [JavadocVariable]',
245
+ file: 'src/main/java/com/example/Foo.java',
246
+ line: 10,
247
+ column: 5,
248
+ },
249
+ ],
250
+ },
251
+ },
252
+ {
253
+ name: 'real-world-output',
254
+ description: 'Real Maven Checkstyle output from test data',
255
+ inputFile: './samples/maven-checkstyle-violations.txt',
256
+ expected: {
257
+ totalErrors: 16,
258
+ },
259
+ },
260
+ ],
261
+ };
262
+ export default mavenCheckstyleExtractor;
263
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extractors/maven-checkstyle/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/extractors/maven-checkstyle/index.test.ts"],"names":[],"mappings":""}