@descryy/runtime-test-runner 0.4.12 → 0.4.14

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 (278) hide show
  1. package/dist/bounded-file.d.ts +18 -0
  2. package/dist/bounded-file.d.ts.map +1 -0
  3. package/dist/bounded-file.js +77 -0
  4. package/dist/bounded-file.js.map +1 -0
  5. package/dist/child-environment.d.ts +12 -0
  6. package/dist/child-environment.d.ts.map +1 -0
  7. package/dist/child-environment.js +124 -0
  8. package/dist/child-environment.js.map +1 -0
  9. package/dist/coverage-capture.d.ts +23 -0
  10. package/dist/coverage-capture.d.ts.map +1 -0
  11. package/dist/coverage-capture.js +165 -0
  12. package/dist/coverage-capture.js.map +1 -0
  13. package/dist/executed-coverage.d.ts +45 -0
  14. package/dist/executed-coverage.d.ts.map +1 -0
  15. package/dist/executed-coverage.js +143 -0
  16. package/dist/executed-coverage.js.map +1 -0
  17. package/dist/go-cover-profile.d.ts +29 -0
  18. package/dist/go-cover-profile.d.ts.map +1 -0
  19. package/dist/go-cover-profile.js +162 -0
  20. package/dist/go-cover-profile.js.map +1 -0
  21. package/dist/go-test.d.ts +29 -2
  22. package/dist/go-test.d.ts.map +1 -1
  23. package/dist/go-test.js +149 -30
  24. package/dist/go-test.js.map +1 -1
  25. package/dist/graph-mapping.d.ts +1 -0
  26. package/dist/graph-mapping.d.ts.map +1 -1
  27. package/dist/graph-mapping.js +78 -1
  28. package/dist/graph-mapping.js.map +1 -1
  29. package/dist/index.d.ts +21 -3
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +11 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/lexers/c-family.d.ts +4 -0
  34. package/dist/lexers/c-family.d.ts.map +1 -0
  35. package/dist/lexers/c-family.js +221 -0
  36. package/dist/lexers/c-family.js.map +1 -0
  37. package/dist/lexers/chars.d.ts +7 -0
  38. package/dist/lexers/chars.d.ts.map +1 -0
  39. package/dist/lexers/chars.js +49 -0
  40. package/dist/lexers/chars.js.map +1 -0
  41. package/dist/lexers/index.d.ts +7 -0
  42. package/dist/lexers/index.d.ts.map +1 -0
  43. package/dist/lexers/index.js +5 -0
  44. package/dist/lexers/index.js.map +1 -0
  45. package/dist/lexers/python.d.ts +3 -0
  46. package/dist/lexers/python.d.ts.map +1 -0
  47. package/dist/lexers/python.js +101 -0
  48. package/dist/lexers/python.js.map +1 -0
  49. package/dist/quality/annotations.d.ts +14 -0
  50. package/dist/quality/annotations.d.ts.map +1 -0
  51. package/dist/quality/annotations.js +147 -0
  52. package/dist/quality/annotations.js.map +1 -0
  53. package/dist/quality/assertion-kinds.d.ts +18 -0
  54. package/dist/quality/assertion-kinds.d.ts.map +1 -0
  55. package/dist/quality/assertion-kinds.js +25 -0
  56. package/dist/quality/assertion-kinds.js.map +1 -0
  57. package/dist/quality/chains.d.ts +25 -0
  58. package/dist/quality/chains.d.ts.map +1 -0
  59. package/dist/quality/chains.js +129 -0
  60. package/dist/quality/chains.js.map +1 -0
  61. package/dist/quality/common.d.ts +31 -0
  62. package/dist/quality/common.d.ts.map +1 -0
  63. package/dist/quality/common.js +211 -0
  64. package/dist/quality/common.js.map +1 -0
  65. package/dist/quality/csharp-family.d.ts +9 -0
  66. package/dist/quality/csharp-family.d.ts.map +1 -0
  67. package/dist/quality/csharp-family.js +560 -0
  68. package/dist/quality/csharp-family.js.map +1 -0
  69. package/dist/quality/detect.d.ts +3 -0
  70. package/dist/quality/detect.d.ts.map +1 -0
  71. package/dist/quality/detect.js +348 -0
  72. package/dist/quality/detect.js.map +1 -0
  73. package/dist/quality/durations.d.ts +4 -0
  74. package/dist/quality/durations.d.ts.map +1 -0
  75. package/dist/quality/durations.js +177 -0
  76. package/dist/quality/durations.js.map +1 -0
  77. package/dist/quality/expressions.d.ts +7 -0
  78. package/dist/quality/expressions.d.ts.map +1 -0
  79. package/dist/quality/expressions.js +123 -0
  80. package/dist/quality/expressions.js.map +1 -0
  81. package/dist/quality/facts.d.ts +5 -0
  82. package/dist/quality/facts.d.ts.map +1 -0
  83. package/dist/quality/facts.js +183 -0
  84. package/dist/quality/facts.js.map +1 -0
  85. package/dist/quality/failure-of.d.ts +4 -0
  86. package/dist/quality/failure-of.d.ts.map +1 -0
  87. package/dist/quality/failure-of.js +233 -0
  88. package/dist/quality/failure-of.js.map +1 -0
  89. package/dist/quality/frameworks.d.ts +5 -0
  90. package/dist/quality/frameworks.d.ts.map +1 -0
  91. package/dist/quality/frameworks.js +20 -0
  92. package/dist/quality/frameworks.js.map +1 -0
  93. package/dist/quality/go-family.d.ts +6 -0
  94. package/dist/quality/go-family.d.ts.map +1 -0
  95. package/dist/quality/go-family.js +393 -0
  96. package/dist/quality/go-family.js.map +1 -0
  97. package/dist/quality/index.d.ts +10 -0
  98. package/dist/quality/index.d.ts.map +1 -0
  99. package/dist/quality/index.js +19 -0
  100. package/dist/quality/index.js.map +1 -0
  101. package/dist/quality/java-family.d.ts +12 -0
  102. package/dist/quality/java-family.d.ts.map +1 -0
  103. package/dist/quality/java-family.js +529 -0
  104. package/dist/quality/java-family.js.map +1 -0
  105. package/dist/quality/js-assertions.d.ts +11 -0
  106. package/dist/quality/js-assertions.d.ts.map +1 -0
  107. package/dist/quality/js-assertions.js +297 -0
  108. package/dist/quality/js-assertions.js.map +1 -0
  109. package/dist/quality/js-family.d.ts +3 -0
  110. package/dist/quality/js-family.d.ts.map +1 -0
  111. package/dist/quality/js-family.js +470 -0
  112. package/dist/quality/js-family.js.map +1 -0
  113. package/dist/quality/python-family.d.ts +6 -0
  114. package/dist/quality/python-family.d.ts.map +1 -0
  115. package/dist/quality/python-family.js +786 -0
  116. package/dist/quality/python-family.js.map +1 -0
  117. package/dist/quality/scope.d.ts +26 -0
  118. package/dist/quality/scope.d.ts.map +1 -0
  119. package/dist/quality/scope.js +33 -0
  120. package/dist/quality/scope.js.map +1 -0
  121. package/dist/quality/selectors.d.ts +14 -0
  122. package/dist/quality/selectors.d.ts.map +1 -0
  123. package/dist/quality/selectors.js +137 -0
  124. package/dist/quality/selectors.js.map +1 -0
  125. package/dist/quality/statuses.d.ts +7 -0
  126. package/dist/quality/statuses.d.ts.map +1 -0
  127. package/dist/quality/statuses.js +143 -0
  128. package/dist/quality/statuses.js.map +1 -0
  129. package/dist/quality/stream.d.ts +23 -0
  130. package/dist/quality/stream.d.ts.map +1 -0
  131. package/dist/quality/stream.js +194 -0
  132. package/dist/quality/stream.js.map +1 -0
  133. package/dist/quality/types.d.ts +88 -0
  134. package/dist/quality/types.d.ts.map +1 -0
  135. package/dist/quality/types.js +2 -0
  136. package/dist/quality/types.js.map +1 -0
  137. package/dist/run-timeout.d.ts +25 -0
  138. package/dist/run-timeout.d.ts.map +1 -0
  139. package/dist/run-timeout.js +52 -0
  140. package/dist/run-timeout.js.map +1 -0
  141. package/dist/runner-wrappers.d.ts +74 -0
  142. package/dist/runner-wrappers.d.ts.map +1 -0
  143. package/dist/runner-wrappers.js +604 -0
  144. package/dist/runner-wrappers.js.map +1 -0
  145. package/dist/swift-xctest.d.ts +15 -2
  146. package/dist/swift-xctest.d.ts.map +1 -1
  147. package/dist/swift-xctest.js +143 -20
  148. package/dist/swift-xctest.js.map +1 -1
  149. package/dist/test-runner-collector.d.ts +56 -6
  150. package/dist/test-runner-collector.d.ts.map +1 -1
  151. package/dist/test-runner-collector.js +265 -113
  152. package/dist/test-runner-collector.js.map +1 -1
  153. package/dist/testgen/csharp-facts.d.ts +3 -0
  154. package/dist/testgen/csharp-facts.d.ts.map +1 -0
  155. package/dist/testgen/csharp-facts.js +306 -0
  156. package/dist/testgen/csharp-facts.js.map +1 -0
  157. package/dist/testgen/csharp-profile.d.ts +14 -0
  158. package/dist/testgen/csharp-profile.d.ts.map +1 -0
  159. package/dist/testgen/csharp-profile.js +233 -0
  160. package/dist/testgen/csharp-profile.js.map +1 -0
  161. package/dist/testgen/declarations.d.ts +10 -0
  162. package/dist/testgen/declarations.d.ts.map +1 -0
  163. package/dist/testgen/declarations.js +110 -0
  164. package/dist/testgen/declarations.js.map +1 -0
  165. package/dist/testgen/facts-common.d.ts +33 -0
  166. package/dist/testgen/facts-common.d.ts.map +1 -0
  167. package/dist/testgen/facts-common.js +76 -0
  168. package/dist/testgen/facts-common.js.map +1 -0
  169. package/dist/testgen/failure.d.ts +4 -0
  170. package/dist/testgen/failure.d.ts.map +1 -0
  171. package/dist/testgen/failure.js +106 -0
  172. package/dist/testgen/failure.js.map +1 -0
  173. package/dist/testgen/frameworks.d.ts +6 -0
  174. package/dist/testgen/frameworks.d.ts.map +1 -0
  175. package/dist/testgen/frameworks.js +516 -0
  176. package/dist/testgen/frameworks.js.map +1 -0
  177. package/dist/testgen/go-facts.d.ts +11 -0
  178. package/dist/testgen/go-facts.d.ts.map +1 -0
  179. package/dist/testgen/go-facts.js +237 -0
  180. package/dist/testgen/go-facts.js.map +1 -0
  181. package/dist/testgen/go-profile.d.ts +6 -0
  182. package/dist/testgen/go-profile.d.ts.map +1 -0
  183. package/dist/testgen/go-profile.js +155 -0
  184. package/dist/testgen/go-profile.js.map +1 -0
  185. package/dist/testgen/index.d.ts +28 -0
  186. package/dist/testgen/index.d.ts.map +1 -0
  187. package/dist/testgen/index.js +21 -0
  188. package/dist/testgen/index.js.map +1 -0
  189. package/dist/testgen/java-build.d.ts +13 -0
  190. package/dist/testgen/java-build.d.ts.map +1 -0
  191. package/dist/testgen/java-build.js +250 -0
  192. package/dist/testgen/java-build.js.map +1 -0
  193. package/dist/testgen/java-facts.d.ts +3 -0
  194. package/dist/testgen/java-facts.d.ts.map +1 -0
  195. package/dist/testgen/java-facts.js +349 -0
  196. package/dist/testgen/java-facts.js.map +1 -0
  197. package/dist/testgen/java-profile.d.ts +13 -0
  198. package/dist/testgen/java-profile.d.ts.map +1 -0
  199. package/dist/testgen/java-profile.js +194 -0
  200. package/dist/testgen/java-profile.js.map +1 -0
  201. package/dist/testgen/languages.d.ts +11 -0
  202. package/dist/testgen/languages.d.ts.map +1 -0
  203. package/dist/testgen/languages.js +63 -0
  204. package/dist/testgen/languages.js.map +1 -0
  205. package/dist/testgen/lexer.d.ts +19 -0
  206. package/dist/testgen/lexer.d.ts.map +1 -0
  207. package/dist/testgen/lexer.js +257 -0
  208. package/dist/testgen/lexer.js.map +1 -0
  209. package/dist/testgen/mutant-core.d.ts +19 -0
  210. package/dist/testgen/mutant-core.d.ts.map +1 -0
  211. package/dist/testgen/mutant-core.js +39 -0
  212. package/dist/testgen/mutant-core.js.map +1 -0
  213. package/dist/testgen/mutants-lang.d.ts +6 -0
  214. package/dist/testgen/mutants-lang.d.ts.map +1 -0
  215. package/dist/testgen/mutants-lang.js +291 -0
  216. package/dist/testgen/mutants-lang.js.map +1 -0
  217. package/dist/testgen/mutants.d.ts +9 -0
  218. package/dist/testgen/mutants.d.ts.map +1 -0
  219. package/dist/testgen/mutants.js +148 -0
  220. package/dist/testgen/mutants.js.map +1 -0
  221. package/dist/testgen/paths.d.ts +32 -0
  222. package/dist/testgen/paths.d.ts.map +1 -0
  223. package/dist/testgen/paths.js +211 -0
  224. package/dist/testgen/paths.js.map +1 -0
  225. package/dist/testgen/process.d.ts +19 -0
  226. package/dist/testgen/process.d.ts.map +1 -0
  227. package/dist/testgen/process.js +89 -0
  228. package/dist/testgen/process.js.map +1 -0
  229. package/dist/testgen/profile-failure.d.ts +7 -0
  230. package/dist/testgen/profile-failure.d.ts.map +1 -0
  231. package/dist/testgen/profile-failure.js +29 -0
  232. package/dist/testgen/profile-failure.js.map +1 -0
  233. package/dist/testgen/python-facts.d.ts +11 -0
  234. package/dist/testgen/python-facts.d.ts.map +1 -0
  235. package/dist/testgen/python-facts.js +380 -0
  236. package/dist/testgen/python-facts.js.map +1 -0
  237. package/dist/testgen/python-profile.d.ts +4 -0
  238. package/dist/testgen/python-profile.d.ts.map +1 -0
  239. package/dist/testgen/python-profile.js +344 -0
  240. package/dist/testgen/python-profile.js.map +1 -0
  241. package/dist/testgen/source-facts.d.ts +30 -0
  242. package/dist/testgen/source-facts.d.ts.map +1 -0
  243. package/dist/testgen/source-facts.js +497 -0
  244. package/dist/testgen/source-facts.js.map +1 -0
  245. package/dist/testgen/stubs.d.ts +4 -0
  246. package/dist/testgen/stubs.d.ts.map +1 -0
  247. package/dist/testgen/stubs.js +66 -0
  248. package/dist/testgen/stubs.js.map +1 -0
  249. package/dist/testgen/toolchain.d.ts +23 -0
  250. package/dist/testgen/toolchain.d.ts.map +1 -0
  251. package/dist/testgen/toolchain.js +201 -0
  252. package/dist/testgen/toolchain.js.map +1 -0
  253. package/dist/testgen/types.d.ts +67 -0
  254. package/dist/testgen/types.d.ts.map +1 -0
  255. package/dist/testgen/types.js +2 -0
  256. package/dist/testgen/types.js.map +1 -0
  257. package/dist/v8-coverage.d.ts +21 -0
  258. package/dist/v8-coverage.d.ts.map +1 -0
  259. package/dist/v8-coverage.js +217 -0
  260. package/dist/v8-coverage.js.map +1 -0
  261. package/dist/vitest-reporter.d.ts +46 -13
  262. package/dist/vitest-reporter.d.ts.map +1 -1
  263. package/dist/vitest-reporter.js +119 -26
  264. package/dist/vitest-reporter.js.map +1 -1
  265. package/dist/vitest-version.d.ts +21 -0
  266. package/dist/vitest-version.d.ts.map +1 -0
  267. package/dist/vitest-version.js +98 -0
  268. package/dist/vitest-version.js.map +1 -0
  269. package/package.json +14 -8
  270. package/reporters/junit/classes/DescryJUnitListener.class +0 -0
  271. package/reporters/junit/classes/META-INF/services/org.junit.platform.launcher.TestExecutionListener +1 -0
  272. package/reporters/minitest/descry_minitest_reporter.rb +150 -0
  273. package/reporters/phpunit/DescryPhpUnitExtension.php +209 -0
  274. package/reporters/pytest/descry_pytest_plugin.py +397 -0
  275. package/reporters/rspec/descry_rspec_formatter.rb +175 -0
  276. package/reporters/xunit/bin/Release/netstandard2.0/Descry.TestLogger.deps.json +203 -0
  277. package/reporters/xunit/bin/Release/netstandard2.0/Descry.TestLogger.dll +0 -0
  278. package/reporters/xunit/bin/Release/netstandard2.0/Descry.TestLogger.pdb +0 -0
@@ -0,0 +1,123 @@
1
+ import { EXISTENCE, negate, STRONG, STRONG_VALUE, strongerOf, strongStatus, WEAK, weakerOf } from "./assertion-kinds.js";
2
+ import { isStatusSubject, statusFromTokens } from "./statuses.js";
3
+ import { isIdent, isPunct, splitTopLevel } from "./stream.js";
4
+ const NULL_LITERALS = new Set(["null", "nil", "None", "undefined", "nullptr"]);
5
+ export function isNullLiteralRange(stream, from, last) {
6
+ let start = from;
7
+ let end = last;
8
+ while (end > start && isPunct(stream, start, "(") && stream.match[start] === end) {
9
+ start += 1;
10
+ end -= 1;
11
+ }
12
+ const token = stream.toks[start];
13
+ return start === end && token !== undefined && token.kind === "identifier" && NULL_LITERALS.has(token.text);
14
+ }
15
+ export function isNullComparison(stream, fromIndex, lastIndex) {
16
+ let from = fromIndex;
17
+ let last = lastIndex;
18
+ while (last > from && isPunct(stream, from, "(") && stream.match[from] === last) {
19
+ from += 1;
20
+ last -= 1;
21
+ }
22
+ for (let index = from + 1; index < last; index += 1) {
23
+ const token = stream.toks[index];
24
+ if (token.kind === "punctuator" && (token.text === "(" || token.text === "[" || token.text === "{") && stream.match[index] > index) {
25
+ index = stream.match[index];
26
+ continue;
27
+ }
28
+ const equality = token.kind === "punctuator" && (token.text === "==" || token.text === "===" || token.text === "!=" || token.text === "!==");
29
+ const identity = token.kind === "identifier" && token.text === "is";
30
+ if (!equality && !identity)
31
+ continue;
32
+ const rightFrom = identity && isIdent(stream, index + 1, "not") ? index + 2 : index + 1;
33
+ return isNullLiteralRange(stream, from, index - 1) || isNullLiteralRange(stream, rightFrom, last);
34
+ }
35
+ return false;
36
+ }
37
+ const EXISTENCE_PREDICATES = new Set(["isPresent", "exists", "isNotNull", "isNotEmpty"]);
38
+ const DEPTH_LIMIT = 48;
39
+ export function classifyNegatedBooleanExpression(stream, from, last) {
40
+ if (isNullComparison(stream, from, last))
41
+ return WEAK;
42
+ return negate(classifyBooleanExpression(stream, from, last));
43
+ }
44
+ export function classifyBooleanExpression(stream, fromIndex, lastIndex, depth = 0) {
45
+ if (depth > DEPTH_LIMIT)
46
+ return STRONG;
47
+ let from = fromIndex;
48
+ let last = lastIndex;
49
+ while (last > from && isPunct(stream, from, "(") && stream.match[from] === last) {
50
+ from += 1;
51
+ last -= 1;
52
+ }
53
+ if (last < from)
54
+ return WEAK;
55
+ const alternatives = splitTopLevel(stream, from, last, "||");
56
+ if (alternatives.length > 1)
57
+ return alternatives.map((part) => classifyBooleanExpression(stream, part[0], part[1], depth + 1)).reduce(weakerOf);
58
+ const conjuncts = splitTopLevel(stream, from, last, "&&");
59
+ if (conjuncts.length > 1)
60
+ return conjuncts.map((part) => classifyBooleanExpression(stream, part[0], part[1], depth + 1)).reduce(strongerOf);
61
+ if (isPunct(stream, from, "!") && from < last) {
62
+ if (isNullComparison(stream, from + 1, last))
63
+ return WEAK;
64
+ return negate(classifyBooleanExpression(stream, from + 1, last, depth + 1));
65
+ }
66
+ for (let index = from + 1; index < last; index += 1) {
67
+ const token = stream.toks[index];
68
+ if (token.kind === "punctuator" && (token.text === "(" || token.text === "[" || token.text === "{") && stream.match[index] > index) {
69
+ index = stream.match[index];
70
+ continue;
71
+ }
72
+ if (token.kind === "punctuator" && (token.text === "==" || token.text === "===" || token.text === "!=" || token.text === "!==" || token.text === "<" || token.text === ">" || token.text === "<=" || token.text === ">=")) {
73
+ if (token.text === "!=" || token.text === "!==")
74
+ return isNullLiteralRange(stream, from, index - 1) || isNullLiteralRange(stream, index + 1, last) ? WEAK : STRONG_VALUE;
75
+ if (token.text === "==" || token.text === "===") {
76
+ if (isStatusSubject(stream, from, index - 1)) {
77
+ const value = statusFromTokens(stream, index + 1, last);
78
+ if (value !== null)
79
+ return strongStatus(value);
80
+ }
81
+ if (isStatusSubject(stream, index + 1, last)) {
82
+ const value = statusFromTokens(stream, from, index - 1);
83
+ if (value !== null)
84
+ return strongStatus(value);
85
+ }
86
+ }
87
+ return STRONG_VALUE;
88
+ }
89
+ if (token.kind === "identifier" && token.text === "instanceof")
90
+ return STRONG_VALUE;
91
+ }
92
+ const head = stream.toks[from];
93
+ if (head.kind !== "identifier")
94
+ return STRONG;
95
+ let cursor = from;
96
+ let lastName = head.text;
97
+ let hasCall = false;
98
+ while (cursor <= last) {
99
+ const token = stream.toks[cursor];
100
+ if (token.kind === "identifier") {
101
+ lastName = token.text;
102
+ cursor += 1;
103
+ if (isPunct(stream, cursor, "(") && stream.match[cursor] > cursor) {
104
+ hasCall = true;
105
+ cursor = stream.match[cursor] + 1;
106
+ }
107
+ if (isPunct(stream, cursor, "."))
108
+ cursor += 1;
109
+ else
110
+ break;
111
+ }
112
+ else
113
+ break;
114
+ }
115
+ if (cursor <= last)
116
+ return STRONG;
117
+ if (!hasCall)
118
+ return WEAK;
119
+ if (EXISTENCE_PREDICATES.has(lastName))
120
+ return EXISTENCE;
121
+ return STRONG;
122
+ }
123
+ //# sourceMappingURL=expressions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../src/quality/expressions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { QualityRange, TestSourceFacts, Unsupported } from "./types.ts";
2
+ export declare const MAX_SOURCE_BYTES: number;
3
+ export declare function factsForUnguarded(source: string, range: QualityRange, framework: string | null): TestSourceFacts | Unsupported;
4
+ export declare function factsFor(source: string, range: QualityRange, framework: string | null): TestSourceFacts | Unsupported;
5
+ //# sourceMappingURL=facts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../src/quality/facts.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAqC,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEhH,eAAO,MAAM,gBAAgB,QAAkB,CAAC;AAmGhD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,eAAe,GAAG,WAAW,CAsC9H;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,eAAe,GAAG,WAAW,CAOrH"}
@@ -0,0 +1,183 @@
1
+ import { tokenizeCFamily, tokenizeJavaScript, tokenizePython } from "../lexers/index.js";
2
+ import { extractCSharp } from "./csharp-family.js";
3
+ import { QUALITY_FRAMEWORKS, isQualityFramework, languageOf } from "./frameworks.js";
4
+ import { extractGo } from "./go-family.js";
5
+ import { extractJava } from "./java-family.js";
6
+ import { extractJavaScript } from "./js-family.js";
7
+ import { extractPython } from "./python-family.js";
8
+ import { emptyFacts, finishFacts, newCollector } from "./scope.js";
9
+ import { buildStream, findRangeEnd, findRangeStart } from "./stream.js";
10
+ export const MAX_SOURCE_BYTES = 4 * 1024 * 1024;
11
+ const STREAM_CACHE_LIMIT = 3;
12
+ const STREAM_CACHE_MAX_CHARACTERS = 1024 * 1024;
13
+ const streamCache = new Map();
14
+ function streamFor(source, language) {
15
+ if (source.length > STREAM_CACHE_MAX_CHARACTERS)
16
+ return buildStream(source, tokensFor(source, language));
17
+ const key = `${language}\u0000${source}`;
18
+ const cached = streamCache.get(key);
19
+ if (cached !== undefined) {
20
+ streamCache.delete(key);
21
+ streamCache.set(key, cached);
22
+ return cached;
23
+ }
24
+ const built = buildStream(source, tokensFor(source, language));
25
+ streamCache.set(key, built);
26
+ if (streamCache.size > STREAM_CACHE_LIMIT)
27
+ streamCache.delete(streamCache.keys().next().value);
28
+ return built;
29
+ }
30
+ function tokensFor(source, language) {
31
+ if (language === "python")
32
+ return tokenizePython(source);
33
+ if (language === "javascript")
34
+ return tokenizeJavaScript(source);
35
+ return tokenizeCFamily(source, language === "csharp" ? "csharp" : language === "go" ? "go" : "java");
36
+ }
37
+ function sniffLanguage(source) {
38
+ if (/^\s*package\s+\w+\s*$/m.test(source) && (/\bfunc\s+(?:\(\s*\w+\s+\*?\w+\s*\)\s*)?(?:Test|Benchmark|Example)\w*\s*\(/.test(source) || /^\s*import\s+(?:\(|")/m.test(source)))
39
+ return "go";
40
+ if ((/^\s*using\s+[\w.]+\s*;/m.test(source) && /\bnamespace\b|\[\s*(?:Fact|Theory|Test|TestMethod|TestCase|TestClass)\b/.test(source)) || (/^\s*\[\s*(?:Fact|Theory|Test|TestMethod|TestCase|SetUp|TestInitialize)\b[^\]]*\]/m.test(source) && /\b(?:void|Task)\s+\w+\s*\(/.test(source)))
41
+ return "csharp";
42
+ if (/^\s*package\s+[\w.]+\s*;/m.test(source) || /^\s*import\s+(?:static\s+)?(?:org|java|javax|io|com)\.[\w.*]+\s*;/m.test(source) || (/^\s*@(?:Test|ParameterizedTest|RepeatedTest|BeforeEach|AfterEach|BeforeAll|AfterAll)\b/m.test(source) && /\bvoid\s+\w+\s*\(/.test(source)))
43
+ return "java";
44
+ if (/^\s*(?:import|from)\s+[\w.]+/m.test(source) && /\bdef\s+\w+\s*\(|^\s*class\s+\w+/m.test(source) && !/^\s*(?:import|export)\s.*\bfrom\s+['"]/m.test(source) && !/\brequire\(/.test(source))
45
+ return "python";
46
+ return "javascript";
47
+ }
48
+ function stringValues(stream) {
49
+ const values = new Set();
50
+ for (const token of stream.toks) {
51
+ if (token.kind !== "string")
52
+ continue;
53
+ const text = token.text;
54
+ if (text.length >= 2)
55
+ values.add(text.slice(1, -1));
56
+ }
57
+ return values;
58
+ }
59
+ function identifiersOf(stream) {
60
+ const names = new Set();
61
+ for (const token of stream.toks)
62
+ if (token.kind === "identifier")
63
+ names.add(token.text);
64
+ return names;
65
+ }
66
+ function inferFramework(language, stream) {
67
+ const names = identifiersOf(stream);
68
+ if (language === "javascript") {
69
+ const modules = stringValues(stream);
70
+ const found = new Set();
71
+ for (const module of modules) {
72
+ if (module === "vitest" || module.startsWith("vitest/"))
73
+ found.add("vitest");
74
+ else if (module === "@playwright/test")
75
+ found.add("playwright");
76
+ else if (module === "@jest/globals")
77
+ found.add("jest");
78
+ else if (module === "node:test")
79
+ found.add("node:test");
80
+ else if (module === "mocha" || module === "chai" || module === "cypress")
81
+ found.add("mocha");
82
+ }
83
+ if (found.size === 0) {
84
+ if (names.has("jest") && !names.has("vi"))
85
+ found.add("jest");
86
+ else if (names.has("vi") && !names.has("jest"))
87
+ found.add("vitest");
88
+ }
89
+ if (found.size === 1)
90
+ return [...found][0];
91
+ if (found.size > 1)
92
+ return { unsupported: `the JavaScript test framework is ambiguous (${[...found].sort().join(", ")}); pass the framework explicitly` };
93
+ return { unsupported: "no test framework could be identified from the imports of this JavaScript source; pass the framework explicitly" };
94
+ }
95
+ if (language === "python") {
96
+ if (names.has("pytest"))
97
+ return "pytest";
98
+ if (names.has("unittest") || names.has("TestCase"))
99
+ return "unittest";
100
+ return { unsupported: "no pytest or unittest marker found in this Python source; pass the framework explicitly" };
101
+ }
102
+ if (language === "java") {
103
+ if (names.has("junit") || names.has("jupiter"))
104
+ return "junit";
105
+ return { unsupported: "no JUnit import found in this Java source; pass the framework explicitly" };
106
+ }
107
+ if (language === "go") {
108
+ if (names.has("testing"))
109
+ return "go";
110
+ return { unsupported: 'this Go source does not import "testing"; pass the framework explicitly' };
111
+ }
112
+ if (names.has("Xunit") || names.has("NUnit") || names.has("VisualStudio") || names.has("Fact") || names.has("TestMethod"))
113
+ return "xunit";
114
+ return { unsupported: "no xUnit, NUnit or MSTest marker found in this C# source; pass the framework explicitly" };
115
+ }
116
+ function validRange(range) {
117
+ return (typeof range === "object" &&
118
+ range !== null &&
119
+ Number.isInteger(range.startLine) &&
120
+ Number.isInteger(range.endLine) &&
121
+ range.startLine >= 1 &&
122
+ range.endLine >= range.startLine);
123
+ }
124
+ export function factsForUnguarded(source, range, framework) {
125
+ if (typeof source !== "string")
126
+ return { unsupported: "the test source is not text" };
127
+ if (!validRange(range))
128
+ return { unsupported: "the line range is not a pair of integers with 1 <= startLine <= endLine" };
129
+ if (framework !== null && typeof framework !== "string")
130
+ return { unsupported: "the framework name is not text" };
131
+ if (framework !== null && !isQualityFramework(framework)) {
132
+ return { unsupported: `test framework "${framework}" is not covered by the test-quality catalog (covered: ${QUALITY_FRAMEWORKS.join(", ")})` };
133
+ }
134
+ if (source.length > MAX_SOURCE_BYTES)
135
+ return { unsupported: `the test source is larger than ${MAX_SOURCE_BYTES} characters` };
136
+ const text = source.charCodeAt(0) === 0xfeff ? source.slice(1) : source;
137
+ let resolved;
138
+ let language;
139
+ if (framework !== null) {
140
+ resolved = framework;
141
+ language = languageOf(resolved);
142
+ }
143
+ else {
144
+ language = sniffLanguage(text);
145
+ }
146
+ const stream = streamFor(text, language);
147
+ if (framework === null) {
148
+ const inferred = inferFramework(language, stream);
149
+ if (typeof inferred !== "string")
150
+ return inferred;
151
+ resolved = inferred;
152
+ }
153
+ else {
154
+ resolved = framework;
155
+ }
156
+ if (stream.toks.length === 0)
157
+ return emptyFacts(resolved);
158
+ const first = findRangeStart(stream, range.startLine);
159
+ const last = Math.min(findRangeEnd(stream, range.endLine), stream.toks.length - 1);
160
+ const out = newCollector();
161
+ const scope = { stream, first, last, startLine: range.startLine, endLine: range.endLine, framework: resolved, out };
162
+ if (language === "javascript")
163
+ extractJavaScript(scope);
164
+ else if (language === "python")
165
+ extractPython(scope);
166
+ else if (language === "java")
167
+ extractJava(scope);
168
+ else if (language === "go")
169
+ extractGo(scope);
170
+ else
171
+ extractCSharp(scope);
172
+ return finishFacts(resolved, out);
173
+ }
174
+ export function factsFor(source, range, framework) {
175
+ try {
176
+ return factsForUnguarded(source, range, framework);
177
+ }
178
+ catch (error) {
179
+ const reason = error instanceof Error ? error.message : String(error);
180
+ return { unsupported: `the test source could not be analysed (${reason.slice(0, 200)})` };
181
+ }
182
+ }
183
+ //# sourceMappingURL=facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.js","sourceRoot":"","sources":["../../src/quality/facts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FailureLocation, NormalisedFailure } from "./types.ts";
2
+ export declare function firstFrame(source: string): FailureLocation | null;
3
+ export declare function failureOf(error: unknown): NormalisedFailure;
4
+ //# sourceMappingURL=failure-of.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-of.d.ts","sourceRoot":"","sources":["../../src/quality/failure-of.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA0ElF,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CA8BjE;AA6FD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CA4B3D"}
@@ -0,0 +1,233 @@
1
+ import { classifyFailure, failureMessage } from "../testgen/failure.js";
2
+ const MESSAGE_LIMIT = 2048;
3
+ const SCAN_LIMIT = 64 * 1024;
4
+ const LINE_LIMIT = 4000;
5
+ const COLOUR_SEQUENCE = new RegExp(`${String.fromCharCode(27)}\\[[0-9;?]*[ -/]*[@-~]`, "g");
6
+ function isBag(value) {
7
+ return typeof value === "object" && value !== null && !Array.isArray(value);
8
+ }
9
+ function field(bag, key) {
10
+ try {
11
+ return bag[key];
12
+ }
13
+ catch {
14
+ return undefined;
15
+ }
16
+ }
17
+ function text(value) {
18
+ return typeof value === "string" && value.trim() !== "" ? value : null;
19
+ }
20
+ function strip(value) {
21
+ return value.slice(0, SCAN_LIMIT).replace(COLOUR_SEQUENCE, "");
22
+ }
23
+ function cap(value) {
24
+ const trimmed = value.trim();
25
+ return trimmed.length <= MESSAGE_LIMIT ? trimmed : `${trimmed.slice(0, MESSAGE_LIMIT - 1)}…`;
26
+ }
27
+ function safeStringify(value) {
28
+ const seen = new WeakSet();
29
+ try {
30
+ const json = JSON.stringify(value, (_key, item) => {
31
+ if (typeof item === "bigint")
32
+ return `${item}n`;
33
+ if (typeof item === "function")
34
+ return `[Function ${item.name}]`;
35
+ if (typeof item === "symbol")
36
+ return item.toString();
37
+ if (typeof item === "object" && item !== null) {
38
+ if (seen.has(item))
39
+ return "[Circular]";
40
+ seen.add(item);
41
+ }
42
+ return item;
43
+ });
44
+ if (json !== undefined)
45
+ return cap(json);
46
+ }
47
+ catch {
48
+ return cap(String(Object.prototype.toString.call(value)));
49
+ }
50
+ try {
51
+ return cap(String(value));
52
+ }
53
+ catch {
54
+ return "[unprintable value]";
55
+ }
56
+ }
57
+ const NOISE_PATH = /(?:^|[\\/])(?:node_modules|site-packages|dist-packages)(?:[\\/]|$)|^node:|^<frozen|[\\/]go[\\/]src[\\/]|[\\/]usr[\\/]local[\\/]go[\\/]|\/usr\/lib\/python/;
58
+ const JAVA_FRAMEWORK_FRAME = /^(?:org\.junit|junit\.framework|java\.|javax\.|jdk\.|sun\.|com\.sun\.|org\.mockito|org\.assertj|org\.hamcrest|org\.apache\.maven|org\.gradle|org\.testng|kotlin\.)/;
59
+ function location(file, line) {
60
+ const cleaned = file.replace(/^file:\/\//, "");
61
+ if (cleaned === "" || NOISE_PATH.test(cleaned) || !Number.isInteger(line) || line < 1)
62
+ return null;
63
+ return { file: cleaned, line };
64
+ }
65
+ const JS_FRAME = /\bat (?:[^\n]*? \()?((?:file:\/\/)?[^()\s]+?):(\d+):\d+\)?\s*$/;
66
+ const PYTHON_FRAME = /File "([^"]+)", line (\d+)/;
67
+ const PYTEST_SHORT = /^(\S+\.py):(\d+):/;
68
+ const JAVA_FRAME = /\bat ([\w.$<>]+)\(([\w$-]+\.(?:java|kt|scala|groovy)):(\d+)\)/;
69
+ const GO_FRAME = /(?:^|[\s\t(])((?:[\w.~\\/-]*[\\/])?[\w.-]+\.go):(\d+)(?::\d+)?(?::|\s|$)/;
70
+ const CSHARP_FRAME = /\bin (.+?):line (\d+)/;
71
+ export function firstFrame(source) {
72
+ const lines = strip(source).split("\n", LINE_LIMIT);
73
+ for (const raw of lines) {
74
+ const line = raw.trimEnd();
75
+ let found = null;
76
+ const js = JS_FRAME.exec(line);
77
+ if (js !== null)
78
+ found = location(js[1], Number(js[2]));
79
+ if (found === null) {
80
+ const python = PYTHON_FRAME.exec(line);
81
+ if (python !== null)
82
+ found = location(python[1], Number(python[2]));
83
+ }
84
+ if (found === null) {
85
+ const short = PYTEST_SHORT.exec(line.trim());
86
+ if (short !== null)
87
+ found = location(short[1], Number(short[2]));
88
+ }
89
+ if (found === null) {
90
+ const java = JAVA_FRAME.exec(line);
91
+ if (java !== null && !JAVA_FRAMEWORK_FRAME.test(java[1]))
92
+ found = location(java[2], Number(java[3]));
93
+ }
94
+ if (found === null) {
95
+ const csharp = CSHARP_FRAME.exec(line);
96
+ if (csharp !== null)
97
+ found = location(csharp[1], Number(csharp[2]));
98
+ }
99
+ if (found === null) {
100
+ const go = GO_FRAME.exec(line);
101
+ if (go !== null)
102
+ found = location(go[1], Number(go[2]));
103
+ }
104
+ if (found !== null)
105
+ return found;
106
+ }
107
+ return null;
108
+ }
109
+ const ASSERTION_MARKERS = /\bAssertion(?:Failed)?(?:Error|Exception)\b|\bComparisonFailure\b|\bMultipleFailuresError\b|\bAssertFailedException\b|Xunit\.Sdk\.\w+Exception|\bAssert\.\w+\(\) Failure|\bAssert\.\w*Exception\b|Error Trace:|(?:^|\n)\s*E?\s*assert\s|\b[Ee]xpected:\s*<[^>\n]*>\s*but was:\s*<[^>\n]*>|Expected:[^\n]*\n\s*But was:/;
110
+ const GO_COMPARISON = /\b(?:got|want|expected|actual)\b/i;
111
+ const GO_TIMEOUT = /panic: test timed out|test timed out after/;
112
+ const TIMEOUT_MARKERS = /\btime[ds]? ?out\b|\bTimeout\b|deadline exceeded|\bTimeoutException\b/i;
113
+ const PANIC_MARKERS = /(?:^|\n)\s*panic:|\bgoroutine \d+ \[/;
114
+ function gather(error) {
115
+ const messages = [];
116
+ const stacks = [];
117
+ let recognised = false;
118
+ const push = (target, value) => {
119
+ const candidate = text(value);
120
+ if (candidate !== null) {
121
+ recognised = true;
122
+ target.push(strip(candidate));
123
+ }
124
+ };
125
+ const failureType = text(field(error, "failureType"));
126
+ const code = text(field(error, "code"));
127
+ if (failureType !== null || code !== null)
128
+ recognised = true;
129
+ push(messages, field(error, "message"));
130
+ const cause = field(error, "cause");
131
+ if (isBag(cause)) {
132
+ push(messages, field(cause, "message"));
133
+ push(stacks, field(cause, "stack"));
134
+ push(messages, field(cause, "stack"));
135
+ }
136
+ else if (typeof cause === "string")
137
+ push(messages, cause);
138
+ const errors = field(error, "errors");
139
+ if (Array.isArray(errors)) {
140
+ for (const entry of errors.slice(0, 5)) {
141
+ if (!isBag(entry))
142
+ continue;
143
+ push(messages, field(entry, "message"));
144
+ push(stacks, field(entry, "stack"));
145
+ }
146
+ }
147
+ const lines = field(error, "messages");
148
+ if (Array.isArray(lines)) {
149
+ for (const entry of lines.slice(0, 5)) {
150
+ push(messages, entry);
151
+ push(stacks, entry);
152
+ }
153
+ }
154
+ push(stacks, field(error, "stack"));
155
+ push(stacks, field(error, "trace"));
156
+ push(stacks, field(error, "output"));
157
+ const goStyle = failureType === "test" && typeof cause === "string";
158
+ return { messages, stacks, failureType, code, recognised, goStyle, source: error };
159
+ }
160
+ function decide(gathered, structuralAssertion) {
161
+ const body = gathered.messages.join("\n");
162
+ const everything = `${body}\n${gathered.stacks.join("\n")}`;
163
+ if (structuralAssertion)
164
+ return "assertion";
165
+ if (gathered.failureType !== null && /timeout/i.test(gathered.failureType))
166
+ return "timeout";
167
+ if (GO_TIMEOUT.test(everything))
168
+ return "timeout";
169
+ if (ASSERTION_MARKERS.test(everything))
170
+ return "assertion";
171
+ if (gathered.goStyle && GO_COMPARISON.test(body) && !PANIC_MARKERS.test(body))
172
+ return "assertion";
173
+ if (TIMEOUT_MARKERS.test(body))
174
+ return "timeout";
175
+ return gathered.recognised ? "error" : "unknown";
176
+ }
177
+ function fallbackMessage(source) {
178
+ try {
179
+ return cap(failureMessage(source));
180
+ }
181
+ catch {
182
+ return "the failure payload could not be read";
183
+ }
184
+ }
185
+ function messageOf(gathered) {
186
+ const first = gathered.messages[0];
187
+ if (first === undefined)
188
+ return fallbackMessage(gathered.source);
189
+ const lines = [];
190
+ for (const line of first.split("\n", LINE_LIMIT)) {
191
+ if (/^\s+at\s/.test(line))
192
+ break;
193
+ lines.push(line.trimEnd());
194
+ }
195
+ const body = lines.join("\n").trim();
196
+ return cap(body === "" ? first : body);
197
+ }
198
+ export function failureOf(error) {
199
+ try {
200
+ if (typeof error === "string") {
201
+ const cleaned = strip(error);
202
+ if (cleaned.trim() === "")
203
+ return { kind: "unknown", message: "", location: null };
204
+ const gathered = { messages: [cleaned], stacks: [cleaned], failureType: null, code: null, recognised: false, goStyle: false, source: {} };
205
+ const kind = decide(gathered, false);
206
+ return { kind, message: messageOf(gathered), location: firstFrame(cleaned) };
207
+ }
208
+ if (!isBag(error))
209
+ return { kind: "unknown", message: safeStringify(error), location: null };
210
+ const gathered = gather(error);
211
+ if (!gathered.recognised)
212
+ return { kind: "unknown", message: safeStringify(error), location: null };
213
+ let structural = false;
214
+ try {
215
+ structural = classifyFailure(error) === "assertion";
216
+ }
217
+ catch {
218
+ structural = false;
219
+ }
220
+ const kind = decide(gathered, structural);
221
+ let located = null;
222
+ for (const source of [...gathered.stacks, ...gathered.messages]) {
223
+ located = firstFrame(source);
224
+ if (located !== null)
225
+ break;
226
+ }
227
+ return { kind, message: messageOf(gathered), location: located };
228
+ }
229
+ catch {
230
+ return { kind: "unknown", message: "the failure payload could not be read", location: null };
231
+ }
232
+ }
233
+ //# sourceMappingURL=failure-of.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-of.js","sourceRoot":"","sources":["../../src/quality/failure-of.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { QualityFramework, QualityLanguage } from "./types.ts";
2
+ export declare const QUALITY_FRAMEWORKS: readonly QualityFramework[];
3
+ export declare function isQualityFramework(name: string): name is QualityFramework;
4
+ export declare function languageOf(framework: QualityFramework): QualityLanguage;
5
+ //# sourceMappingURL=frameworks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frameworks.d.ts","sourceRoot":"","sources":["../../src/quality/frameworks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpE,eAAO,MAAM,kBAAkB,EAAE,SAAS,gBAAgB,EAAyG,CAAC;AAepK,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,gBAAgB,CAEzE;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,gBAAgB,GAAG,eAAe,CAEvE"}
@@ -0,0 +1,20 @@
1
+ export const QUALITY_FRAMEWORKS = ["node:test", "jest", "vitest", "mocha", "playwright", "pytest", "unittest", "junit", "go", "xunit"];
2
+ const LANGUAGE_OF = {
3
+ "node:test": "javascript",
4
+ jest: "javascript",
5
+ vitest: "javascript",
6
+ mocha: "javascript",
7
+ playwright: "javascript",
8
+ pytest: "python",
9
+ unittest: "python",
10
+ junit: "java",
11
+ go: "go",
12
+ xunit: "csharp",
13
+ };
14
+ export function isQualityFramework(name) {
15
+ return QUALITY_FRAMEWORKS.includes(name);
16
+ }
17
+ export function languageOf(framework) {
18
+ return LANGUAGE_OF[framework];
19
+ }
20
+ //# sourceMappingURL=frameworks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frameworks.js","sourceRoot":"","sources":["../../src/quality/frameworks.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAgC,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAEpK,MAAM,WAAW,GAAwD;IACvE,WAAW,EAAE,YAAY;IACzB,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,YAAY;IACnB,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,MAAM;IACb,EAAE,EAAE,IAAI;IACR,KAAK,EAAE,QAAQ;CAChB,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAQ,kBAAwC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,SAA2B;IACpD,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC"}