@vyuhlabs/dxkit 1.5.1 → 1.6.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 (257) hide show
  1. package/CHANGELOG.md +264 -0
  2. package/README.md +265 -352
  3. package/THIRD_PARTY_NOTICES.md +40 -0
  4. package/dist/analyzers/developer/detailed.d.ts +26 -0
  5. package/dist/analyzers/developer/detailed.d.ts.map +1 -0
  6. package/dist/analyzers/developer/detailed.js +193 -0
  7. package/dist/analyzers/developer/detailed.js.map +1 -0
  8. package/dist/analyzers/developer/gather.d.ts +11 -0
  9. package/dist/analyzers/developer/gather.d.ts.map +1 -0
  10. package/dist/analyzers/developer/gather.js +167 -0
  11. package/dist/analyzers/developer/gather.js.map +1 -0
  12. package/dist/analyzers/developer/index.d.ts +8 -0
  13. package/dist/analyzers/developer/index.d.ts.map +1 -0
  14. package/dist/analyzers/developer/index.js +168 -0
  15. package/dist/analyzers/developer/index.js.map +1 -0
  16. package/dist/analyzers/developer/types.d.ts +49 -0
  17. package/dist/analyzers/developer/types.d.ts.map +1 -0
  18. package/dist/analyzers/developer/types.js +6 -0
  19. package/dist/analyzers/developer/types.js.map +1 -0
  20. package/dist/analyzers/docs/shallow.d.ts +9 -0
  21. package/dist/analyzers/docs/shallow.d.ts.map +1 -0
  22. package/dist/analyzers/docs/shallow.js +8 -0
  23. package/dist/analyzers/docs/shallow.js.map +1 -0
  24. package/dist/analyzers/dx/shallow.d.ts +9 -0
  25. package/dist/analyzers/dx/shallow.d.ts.map +1 -0
  26. package/dist/analyzers/dx/shallow.js +8 -0
  27. package/dist/analyzers/dx/shallow.js.map +1 -0
  28. package/dist/analyzers/evidence.d.ts +36 -0
  29. package/dist/analyzers/evidence.d.ts.map +1 -0
  30. package/dist/analyzers/evidence.js +3 -0
  31. package/dist/analyzers/evidence.js.map +1 -0
  32. package/dist/analyzers/health/actions.d.ts +10 -0
  33. package/dist/analyzers/health/actions.d.ts.map +1 -0
  34. package/dist/analyzers/health/actions.js +284 -0
  35. package/dist/analyzers/health/actions.js.map +1 -0
  36. package/dist/analyzers/health/detailed.d.ts +26 -0
  37. package/dist/analyzers/health/detailed.d.ts.map +1 -0
  38. package/dist/analyzers/health/detailed.js +147 -0
  39. package/dist/analyzers/health/detailed.js.map +1 -0
  40. package/dist/analyzers/health.d.ts +22 -0
  41. package/dist/analyzers/health.d.ts.map +1 -0
  42. package/dist/analyzers/health.js +270 -0
  43. package/dist/analyzers/health.js.map +1 -0
  44. package/dist/analyzers/index.d.ts +3 -0
  45. package/dist/analyzers/index.d.ts.map +1 -0
  46. package/dist/analyzers/index.js +6 -0
  47. package/dist/analyzers/index.js.map +1 -0
  48. package/dist/analyzers/maintainability/shallow.d.ts +9 -0
  49. package/dist/analyzers/maintainability/shallow.d.ts.map +1 -0
  50. package/dist/analyzers/maintainability/shallow.js +8 -0
  51. package/dist/analyzers/maintainability/shallow.js.map +1 -0
  52. package/dist/analyzers/quality/actions.d.ts +5 -0
  53. package/dist/analyzers/quality/actions.d.ts.map +1 -0
  54. package/dist/analyzers/quality/actions.js +158 -0
  55. package/dist/analyzers/quality/actions.js.map +1 -0
  56. package/dist/analyzers/quality/detailed.d.ts +17 -0
  57. package/dist/analyzers/quality/detailed.d.ts.map +1 -0
  58. package/dist/analyzers/quality/detailed.js +122 -0
  59. package/dist/analyzers/quality/detailed.js.map +1 -0
  60. package/dist/analyzers/quality/gather.d.ts +38 -0
  61. package/dist/analyzers/quality/gather.d.ts.map +1 -0
  62. package/dist/analyzers/quality/gather.js +279 -0
  63. package/dist/analyzers/quality/gather.js.map +1 -0
  64. package/dist/analyzers/quality/index.d.ts +12 -0
  65. package/dist/analyzers/quality/index.d.ts.map +1 -0
  66. package/dist/analyzers/quality/index.js +281 -0
  67. package/dist/analyzers/quality/index.js.map +1 -0
  68. package/dist/analyzers/quality/shallow.d.ts +9 -0
  69. package/dist/analyzers/quality/shallow.d.ts.map +1 -0
  70. package/dist/analyzers/quality/shallow.js +8 -0
  71. package/dist/analyzers/quality/shallow.js.map +1 -0
  72. package/dist/analyzers/quality/types.d.ts +66 -0
  73. package/dist/analyzers/quality/types.d.ts.map +1 -0
  74. package/dist/analyzers/quality/types.js +3 -0
  75. package/dist/analyzers/quality/types.js.map +1 -0
  76. package/dist/analyzers/remediation.d.ts +42 -0
  77. package/dist/analyzers/remediation.d.ts.map +1 -0
  78. package/dist/analyzers/remediation.js +28 -0
  79. package/dist/analyzers/remediation.js.map +1 -0
  80. package/dist/analyzers/scoring.d.ts +32 -0
  81. package/dist/analyzers/scoring.d.ts.map +1 -0
  82. package/dist/analyzers/scoring.js +410 -0
  83. package/dist/analyzers/scoring.js.map +1 -0
  84. package/dist/analyzers/security/actions.d.ts +7 -0
  85. package/dist/analyzers/security/actions.d.ts.map +1 -0
  86. package/dist/analyzers/security/actions.js +104 -0
  87. package/dist/analyzers/security/actions.js.map +1 -0
  88. package/dist/analyzers/security/detailed.d.ts +14 -0
  89. package/dist/analyzers/security/detailed.d.ts.map +1 -0
  90. package/dist/analyzers/security/detailed.js +124 -0
  91. package/dist/analyzers/security/detailed.js.map +1 -0
  92. package/dist/analyzers/security/gather.d.ts +12 -0
  93. package/dist/analyzers/security/gather.d.ts.map +1 -0
  94. package/dist/analyzers/security/gather.js +195 -0
  95. package/dist/analyzers/security/gather.js.map +1 -0
  96. package/dist/analyzers/security/index.d.ts +8 -0
  97. package/dist/analyzers/security/index.d.ts.map +1 -0
  98. package/dist/analyzers/security/index.js +173 -0
  99. package/dist/analyzers/security/index.js.map +1 -0
  100. package/dist/analyzers/security/scoring.d.ts +29 -0
  101. package/dist/analyzers/security/scoring.d.ts.map +1 -0
  102. package/dist/analyzers/security/scoring.js +40 -0
  103. package/dist/analyzers/security/scoring.js.map +1 -0
  104. package/dist/analyzers/security/shallow.d.ts +10 -0
  105. package/dist/analyzers/security/shallow.d.ts.map +1 -0
  106. package/dist/analyzers/security/shallow.js +8 -0
  107. package/dist/analyzers/security/shallow.js.map +1 -0
  108. package/dist/analyzers/security/types.d.ts +43 -0
  109. package/dist/analyzers/security/types.d.ts.map +1 -0
  110. package/dist/analyzers/security/types.js +6 -0
  111. package/dist/analyzers/security/types.js.map +1 -0
  112. package/dist/analyzers/tests/actions.d.ts +6 -0
  113. package/dist/analyzers/tests/actions.d.ts.map +1 -0
  114. package/dist/analyzers/tests/actions.js +80 -0
  115. package/dist/analyzers/tests/actions.js.map +1 -0
  116. package/dist/analyzers/tests/detailed.d.ts +14 -0
  117. package/dist/analyzers/tests/detailed.d.ts.map +1 -0
  118. package/dist/analyzers/tests/detailed.js +121 -0
  119. package/dist/analyzers/tests/detailed.js.map +1 -0
  120. package/dist/analyzers/tests/gather.d.ts +5 -0
  121. package/dist/analyzers/tests/gather.d.ts.map +1 -0
  122. package/dist/analyzers/tests/gather.js +270 -0
  123. package/dist/analyzers/tests/gather.js.map +1 -0
  124. package/dist/analyzers/tests/import-graph.d.ts +48 -0
  125. package/dist/analyzers/tests/import-graph.d.ts.map +1 -0
  126. package/dist/analyzers/tests/import-graph.js +231 -0
  127. package/dist/analyzers/tests/import-graph.js.map +1 -0
  128. package/dist/analyzers/tests/index.d.ts +8 -0
  129. package/dist/analyzers/tests/index.d.ts.map +1 -0
  130. package/dist/analyzers/tests/index.js +247 -0
  131. package/dist/analyzers/tests/index.js.map +1 -0
  132. package/dist/analyzers/tests/scoring.d.ts +27 -0
  133. package/dist/analyzers/tests/scoring.d.ts.map +1 -0
  134. package/dist/analyzers/tests/scoring.js +38 -0
  135. package/dist/analyzers/tests/scoring.js.map +1 -0
  136. package/dist/analyzers/tests/shallow.d.ts +9 -0
  137. package/dist/analyzers/tests/shallow.d.ts.map +1 -0
  138. package/dist/analyzers/tests/shallow.js +8 -0
  139. package/dist/analyzers/tests/shallow.js.map +1 -0
  140. package/dist/analyzers/tests/types.d.ts +49 -0
  141. package/dist/analyzers/tests/types.d.ts.map +1 -0
  142. package/dist/analyzers/tests/types.js +6 -0
  143. package/dist/analyzers/tests/types.js.map +1 -0
  144. package/dist/analyzers/tools/cloc.d.ts +8 -0
  145. package/dist/analyzers/tools/cloc.d.ts.map +1 -0
  146. package/dist/analyzers/tools/cloc.js +49 -0
  147. package/dist/analyzers/tools/cloc.js.map +1 -0
  148. package/dist/analyzers/tools/coverage.d.ts +59 -0
  149. package/dist/analyzers/tools/coverage.d.ts.map +1 -0
  150. package/dist/analyzers/tools/coverage.js +280 -0
  151. package/dist/analyzers/tools/coverage.js.map +1 -0
  152. package/dist/analyzers/tools/cvss-v4-lookup.d.ts +10 -0
  153. package/dist/analyzers/tools/cvss-v4-lookup.d.ts.map +1 -0
  154. package/dist/analyzers/tools/cvss-v4-lookup.js +284 -0
  155. package/dist/analyzers/tools/cvss-v4-lookup.js.map +1 -0
  156. package/dist/analyzers/tools/cvss-v4.d.ts +24 -0
  157. package/dist/analyzers/tools/cvss-v4.d.ts.map +1 -0
  158. package/dist/analyzers/tools/cvss-v4.js +362 -0
  159. package/dist/analyzers/tools/cvss-v4.js.map +1 -0
  160. package/dist/analyzers/tools/default-exclusions.gitignore +56 -0
  161. package/dist/analyzers/tools/exclusions.d.ts +70 -0
  162. package/dist/analyzers/tools/exclusions.d.ts.map +1 -0
  163. package/dist/analyzers/tools/exclusions.js +250 -0
  164. package/dist/analyzers/tools/exclusions.js.map +1 -0
  165. package/dist/analyzers/tools/generic.d.ts +4 -0
  166. package/dist/analyzers/tools/generic.d.ts.map +1 -0
  167. package/dist/analyzers/tools/generic.js +198 -0
  168. package/dist/analyzers/tools/generic.js.map +1 -0
  169. package/dist/analyzers/tools/gitleaks.d.ts +8 -0
  170. package/dist/analyzers/tools/gitleaks.d.ts.map +1 -0
  171. package/dist/analyzers/tools/gitleaks.js +58 -0
  172. package/dist/analyzers/tools/gitleaks.js.map +1 -0
  173. package/dist/analyzers/tools/graphify.d.ts +4 -0
  174. package/dist/analyzers/tools/graphify.d.ts.map +1 -0
  175. package/dist/analyzers/tools/graphify.js +222 -0
  176. package/dist/analyzers/tools/graphify.js.map +1 -0
  177. package/dist/analyzers/tools/osv.d.ts +51 -0
  178. package/dist/analyzers/tools/osv.d.ts.map +1 -0
  179. package/dist/analyzers/tools/osv.js +188 -0
  180. package/dist/analyzers/tools/osv.js.map +1 -0
  181. package/dist/analyzers/tools/parallel.d.ts +8 -0
  182. package/dist/analyzers/tools/parallel.d.ts.map +1 -0
  183. package/dist/analyzers/tools/parallel.js +195 -0
  184. package/dist/analyzers/tools/parallel.js.map +1 -0
  185. package/dist/analyzers/tools/runner.d.ts +13 -0
  186. package/dist/analyzers/tools/runner.d.ts.map +1 -0
  187. package/dist/analyzers/tools/runner.js +109 -0
  188. package/dist/analyzers/tools/runner.js.map +1 -0
  189. package/dist/analyzers/tools/suppressions.d.ts +55 -0
  190. package/dist/analyzers/tools/suppressions.d.ts.map +1 -0
  191. package/dist/analyzers/tools/suppressions.js +203 -0
  192. package/dist/analyzers/tools/suppressions.js.map +1 -0
  193. package/dist/analyzers/tools/timing.d.ts +9 -0
  194. package/dist/analyzers/tools/timing.d.ts.map +1 -0
  195. package/dist/analyzers/tools/timing.js +29 -0
  196. package/dist/analyzers/tools/timing.js.map +1 -0
  197. package/dist/analyzers/tools/tool-registry.d.ts +86 -0
  198. package/dist/analyzers/tools/tool-registry.d.ts.map +1 -0
  199. package/dist/analyzers/tools/tool-registry.js +705 -0
  200. package/dist/analyzers/tools/tool-registry.js.map +1 -0
  201. package/dist/analyzers/types.d.ts +125 -0
  202. package/dist/analyzers/types.d.ts.map +1 -0
  203. package/dist/analyzers/types.js +11 -0
  204. package/dist/analyzers/types.js.map +1 -0
  205. package/dist/cli.d.ts.map +1 -1
  206. package/dist/cli.js +405 -0
  207. package/dist/cli.js.map +1 -1
  208. package/dist/detect.d.ts.map +1 -1
  209. package/dist/detect.js +24 -15
  210. package/dist/detect.js.map +1 -1
  211. package/dist/languages/csharp.d.ts +5 -0
  212. package/dist/languages/csharp.d.ts.map +1 -0
  213. package/dist/languages/csharp.js +265 -0
  214. package/dist/languages/csharp.js.map +1 -0
  215. package/dist/languages/go.d.ts +11 -0
  216. package/dist/languages/go.d.ts.map +1 -0
  217. package/dist/languages/go.js +321 -0
  218. package/dist/languages/go.js.map +1 -0
  219. package/dist/languages/index.d.ts +6 -0
  220. package/dist/languages/index.d.ts.map +1 -0
  221. package/dist/languages/index.js +18 -0
  222. package/dist/languages/index.js.map +1 -0
  223. package/dist/languages/python.d.ts +3 -0
  224. package/dist/languages/python.d.ts.map +1 -0
  225. package/dist/languages/python.js +284 -0
  226. package/dist/languages/python.js.map +1 -0
  227. package/dist/languages/rust.d.ts +17 -0
  228. package/dist/languages/rust.d.ts.map +1 -0
  229. package/dist/languages/rust.js +333 -0
  230. package/dist/languages/rust.js.map +1 -0
  231. package/dist/languages/types.d.ts +38 -0
  232. package/dist/languages/types.d.ts.map +1 -0
  233. package/dist/languages/types.js +3 -0
  234. package/dist/languages/types.js.map +1 -0
  235. package/dist/languages/typescript.d.ts +15 -0
  236. package/dist/languages/typescript.d.ts.map +1 -0
  237. package/dist/languages/typescript.js +353 -0
  238. package/dist/languages/typescript.js.map +1 -0
  239. package/dist/logger.d.ts +1 -0
  240. package/dist/logger.d.ts.map +1 -1
  241. package/dist/logger.js +25 -12
  242. package/dist/logger.js.map +1 -1
  243. package/dist/project-yaml.d.ts.map +1 -1
  244. package/dist/project-yaml.js +1 -0
  245. package/dist/project-yaml.js.map +1 -1
  246. package/dist/tools-cli.d.ts +2 -0
  247. package/dist/tools-cli.d.ts.map +1 -0
  248. package/dist/tools-cli.js +231 -0
  249. package/dist/tools-cli.js.map +1 -0
  250. package/dist/types.d.ts +10 -0
  251. package/dist/types.d.ts.map +1 -1
  252. package/package.json +6 -2
  253. package/templates/.claude/commands/dev-report.md +34 -4
  254. package/templates/.claude/commands/health.md +45 -2
  255. package/templates/.claude/commands/quality.md.template +38 -15
  256. package/templates/.claude/commands/test-gaps.md +36 -2
  257. package/templates/.claude/commands/vulnerabilities.md +36 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shallow.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tests/shallow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGzD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,GAAG,cAAc,CAEpE"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scoreTestsDimension = scoreTestsDimension;
4
+ const scoring_1 = require("../scoring");
5
+ function scoreTestsDimension(m) {
6
+ return (0, scoring_1.scoreTest)(m);
7
+ }
8
+ //# sourceMappingURL=shallow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shallow.js","sourceRoot":"","sources":["../../../src/analyzers/tests/shallow.ts"],"names":[],"mappings":";;AASA,kDAEC;AAJD,wCAAuC;AAEvC,SAAgB,mBAAmB,CAAC,CAAgB;IAClD,OAAO,IAAA,mBAAS,EAAC,CAAC,CAAC,CAAC;AACtB,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Test gap analyzer types.
3
+ */
4
+ export type RiskTier = 'critical' | 'high' | 'medium' | 'low';
5
+ export interface TestFile {
6
+ path: string;
7
+ status: 'active' | 'commented-out' | 'empty' | 'schema-only';
8
+ framework: string | null;
9
+ }
10
+ export interface SourceFile {
11
+ path: string;
12
+ lines: number;
13
+ type: 'controller' | 'service' | 'interceptor' | 'model' | 'repository' | 'other';
14
+ risk: RiskTier;
15
+ hasMatchingTest: boolean;
16
+ }
17
+ /** Where the `effectiveCoverage` number came from. */
18
+ export type CoverageSource = 'filename-match' | 'import-graph' | 'istanbul-summary' | 'istanbul-final' | 'coverage-py' | 'go' | 'cobertura' | 'lcov';
19
+ export interface TestGapsReport {
20
+ repo: string;
21
+ analyzedAt: string;
22
+ commitSha: string;
23
+ branch: string;
24
+ summary: {
25
+ testFiles: number;
26
+ activeTestFiles: number;
27
+ commentedOutFiles: number;
28
+ /**
29
+ * Headline coverage 0-100. When `coverageSource` is `filename-match`, this
30
+ * is the share of source files with a name-matched test. Otherwise it's
31
+ * the line-coverage percentage read from the artifact.
32
+ */
33
+ effectiveCoverage: number;
34
+ /** Which signal produced `effectiveCoverage`. */
35
+ coverageSource: CoverageSource;
36
+ /** Project-relative path of the artifact, when one was used. */
37
+ coverageSourceFile?: string;
38
+ sourceFiles: number;
39
+ untestedCritical: number;
40
+ untestedHigh: number;
41
+ untestedMedium: number;
42
+ untestedLow: number;
43
+ };
44
+ testFiles: TestFile[];
45
+ gaps: SourceFile[];
46
+ toolsUsed: string[];
47
+ toolsUnavailable: string[];
48
+ }
49
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tests/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE9D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,eAAe,GAAG,OAAO,GAAG,aAAa,CAAC;IAC7D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,CAAC;IAClF,IAAI,EAAE,QAAQ,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,sDAAsD;AACtD,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,cAAc,GACd,kBAAkB,GAClB,gBAAgB,GAChB,aAAa,GACb,IAAI,GACJ,WAAW,GACX,MAAM,CAAC;AAEX,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;QAC1B;;;;WAIG;QACH,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iDAAiD;QACjD,cAAc,EAAE,cAAc,CAAC;QAC/B,gEAAgE;QAChE,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Test gap analyzer types.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analyzers/tests/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * cloc integration -- exact line counts per language.
3
+ * Layer 2 (optional): available via `npx cloc` or system install.
4
+ */
5
+ import { HealthMetrics } from '../types';
6
+ /** Gather metrics from cloc --json. */
7
+ export declare function gatherClocMetrics(cwd: string): Partial<HealthMetrics>;
8
+ //# sourceMappingURL=cloc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloc.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/cloc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAYzC,uCAAuC;AACvC,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAkBrE"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gatherClocMetrics = gatherClocMetrics;
4
+ const runner_1 = require("./runner");
5
+ const exclusions_1 = require("./exclusions");
6
+ const SKIP_KEYS = new Set(['header', 'SUM']);
7
+ /** Gather metrics from cloc --json. */
8
+ function gatherClocMetrics(cwd) {
9
+ // --timeout 0 disables per-file timeout (suppresses warning that breaks JSON parse)
10
+ // cloc uses basename matching for --exclude-dir, so use dir names without slashes
11
+ const excludeDirs = (0, exclusions_1.getClocExcludeDirs)(cwd);
12
+ const flags = `--json --timeout 0 --exclude-dir=${excludeDirs}`;
13
+ // Try system cloc first (faster), then npx as fallback
14
+ const result = (0, runner_1.runJSON)(`cloc . ${flags} 2>/dev/null`, cwd, 180000);
15
+ if (!result || !result.SUM) {
16
+ const fallback = (0, runner_1.runJSON)(`npx cloc . ${flags} 2>/dev/null`, cwd, 180000);
17
+ if (!fallback || !fallback.SUM) {
18
+ return { toolsUnavailable: ['cloc'] };
19
+ }
20
+ return parseClocResult(fallback);
21
+ }
22
+ return parseClocResult(result);
23
+ }
24
+ function parseClocResult(result) {
25
+ const clocLanguages = [];
26
+ for (const [key, value] of Object.entries(result)) {
27
+ if (SKIP_KEYS.has(key))
28
+ continue;
29
+ const lang = value;
30
+ if (typeof lang.nFiles !== 'number')
31
+ continue;
32
+ clocLanguages.push({
33
+ language: key,
34
+ files: lang.nFiles,
35
+ code: lang.code,
36
+ comment: lang.comment,
37
+ blank: lang.blank,
38
+ });
39
+ }
40
+ // Sort by code lines descending
41
+ clocLanguages.sort((a, b) => b.code - a.code);
42
+ return {
43
+ sourceFiles: result.SUM.nFiles,
44
+ totalLines: result.SUM.code + result.SUM.comment + result.SUM.blank,
45
+ clocLanguages,
46
+ toolsUsed: ['cloc'],
47
+ };
48
+ }
49
+ //# sourceMappingURL=cloc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloc.js","sourceRoot":"","sources":["../../../src/analyzers/tools/cloc.ts"],"names":[],"mappings":";;AAiBA,8CAkBC;AA9BD,qCAAmC;AACnC,6CAAkD;AAQlD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAE7C,uCAAuC;AACvC,SAAgB,iBAAiB,CAAC,GAAW;IAC3C,oFAAoF;IACpF,kFAAkF;IAClF,MAAM,WAAW,GAAG,IAAA,+BAAkB,EAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,oCAAoC,WAAW,EAAE,CAAC;IAEhE,uDAAuD;IACvD,MAAM,MAAM,GAAG,IAAA,gBAAO,EAAa,UAAU,KAAK,cAAc,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAE/E,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAA,gBAAO,EAAa,cAAc,KAAK,cAAc,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACrF,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC/B,OAAO,EAAE,gBAAgB,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,CAAC;QACD,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,eAAe,CAAC,MAAkB;IACzC,MAAM,aAAa,GAAmC,EAAE,CAAC;IAEzD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QACjC,MAAM,IAAI,GAAG,KAAyE,CAAC;QACvF,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;YAAE,SAAS;QAC9C,aAAa,CAAC,IAAI,CAAC;YACjB,QAAQ,EAAE,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;IACL,CAAC;IAED,gCAAgC;IAChC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAE9C,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM;QAC9B,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK;QACnE,aAAa;QACb,SAAS,EAAE,CAAC,MAAM,CAAC;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Coverage artifact import.
3
+ *
4
+ * Detects and parses coverage reports produced by the project's test runner
5
+ * so dxkit can report line-level truth instead of fabricating coverage from
6
+ * filename matches.
7
+ *
8
+ * Supported formats (first match wins, in order):
9
+ * 1. Istanbul summary — `coverage/coverage-summary.json` (nyc, c8, vitest)
10
+ * 2. Istanbul detailed — `coverage/coverage-final.json`
11
+ * 3. coverage.py JSON — `coverage.json` (Python)
12
+ * 4. Go coverprofile — `coverage.out` / `cover.out`
13
+ *
14
+ * Returns a normalized `Coverage` object or `null` when no artifact exists
15
+ * or the file is unparseable. Callers (tests analyzer) should treat a null
16
+ * return as "fall back to filename matching."
17
+ */
18
+ export type CoverageSource = 'istanbul-summary' | 'istanbul-final' | 'coverage-py' | 'go' | 'cobertura' | 'lcov';
19
+ export interface FileCoverage {
20
+ /** Project-relative path (normalized to forward slashes). */
21
+ path: string;
22
+ /** Covered lines or statements. */
23
+ covered: number;
24
+ /** Total lines or statements considered. */
25
+ total: number;
26
+ /** covered / total * 100, rounded to one decimal place. */
27
+ pct: number;
28
+ }
29
+ export interface Coverage {
30
+ /** Which artifact we read. */
31
+ source: CoverageSource;
32
+ /** Project-relative path of the artifact. */
33
+ sourceFile: string;
34
+ /** Overall line coverage 0-100, rounded to one decimal. */
35
+ linePercent: number;
36
+ /** Per-file coverage, keyed by project-relative path. */
37
+ files: Map<string, FileCoverage>;
38
+ }
39
+ /**
40
+ * Locate and parse a coverage artifact for the given repo root.
41
+ * Returns null when nothing is found or parsing fails.
42
+ */
43
+ export declare function loadCoverage(cwd: string): Coverage | null;
44
+ /** Istanbul coverage-summary.json: `{ "total": {...}, "/abs/path": {...} }`. */
45
+ export declare function parseIstanbulSummary(raw: string, sourceFile: string, cwd: string): Coverage;
46
+ /** Istanbul coverage-final.json: `{ "/abs/path": { s: { "0": 1, "1": 0, ... }, statementMap: {...} } }`. */
47
+ export declare function parseIstanbulFinal(raw: string, sourceFile: string, cwd: string): Coverage;
48
+ /** coverage.py JSON: `{ "totals": {...}, "files": { "path": { summary: {...} } } }`. */
49
+ export declare function parseCoveragePy(raw: string, sourceFile: string, cwd: string): Coverage;
50
+ /**
51
+ * Go coverprofile:
52
+ * mode: set
53
+ * pkg/path/file.go:5.2,10.1 3 1
54
+ *
55
+ * Each line: file:startLine.col,endLine.col numStatements count.
56
+ * A block is covered iff count > 0.
57
+ */
58
+ export declare function parseGoCoverProfile(raw: string, sourceFile: string, cwd: string): Coverage;
59
+ //# sourceMappingURL=coverage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,gBAAgB,GAChB,aAAa,GACb,IAAI,GACJ,WAAW,GACX,MAAM,CAAC;AAEX,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,QAAQ;IACvB,8BAA8B;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAkCzD;AAID,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CA6B3F;AAMD,4GAA4G;AAC5G,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CA6BzF;AAOD,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAsCtF;AAiBD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAwC1F"}
@@ -0,0 +1,280 @@
1
+ "use strict";
2
+ /**
3
+ * Coverage artifact import.
4
+ *
5
+ * Detects and parses coverage reports produced by the project's test runner
6
+ * so dxkit can report line-level truth instead of fabricating coverage from
7
+ * filename matches.
8
+ *
9
+ * Supported formats (first match wins, in order):
10
+ * 1. Istanbul summary — `coverage/coverage-summary.json` (nyc, c8, vitest)
11
+ * 2. Istanbul detailed — `coverage/coverage-final.json`
12
+ * 3. coverage.py JSON — `coverage.json` (Python)
13
+ * 4. Go coverprofile — `coverage.out` / `cover.out`
14
+ *
15
+ * Returns a normalized `Coverage` object or `null` when no artifact exists
16
+ * or the file is unparseable. Callers (tests analyzer) should treat a null
17
+ * return as "fall back to filename matching."
18
+ */
19
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
26
+ }) : (function(o, m, k, k2) {
27
+ if (k2 === undefined) k2 = k;
28
+ o[k2] = m[k];
29
+ }));
30
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
31
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
32
+ }) : function(o, v) {
33
+ o["default"] = v;
34
+ });
35
+ var __importStar = (this && this.__importStar) || (function () {
36
+ var ownKeys = function(o) {
37
+ ownKeys = Object.getOwnPropertyNames || function (o) {
38
+ var ar = [];
39
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
40
+ return ar;
41
+ };
42
+ return ownKeys(o);
43
+ };
44
+ return function (mod) {
45
+ if (mod && mod.__esModule) return mod;
46
+ var result = {};
47
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
48
+ __setModuleDefault(result, mod);
49
+ return result;
50
+ };
51
+ })();
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.loadCoverage = loadCoverage;
54
+ exports.parseIstanbulSummary = parseIstanbulSummary;
55
+ exports.parseIstanbulFinal = parseIstanbulFinal;
56
+ exports.parseCoveragePy = parseCoveragePy;
57
+ exports.parseGoCoverProfile = parseGoCoverProfile;
58
+ const fs = __importStar(require("fs"));
59
+ const path = __importStar(require("path"));
60
+ /**
61
+ * Locate and parse a coverage artifact for the given repo root.
62
+ * Returns null when nothing is found or parsing fails.
63
+ */
64
+ function loadCoverage(cwd) {
65
+ const candidates = [
66
+ { source: 'istanbul-summary', file: 'coverage/coverage-summary.json' },
67
+ { source: 'istanbul-final', file: 'coverage/coverage-final.json' },
68
+ { source: 'coverage-py', file: 'coverage.json' },
69
+ { source: 'go', file: 'coverage.out' },
70
+ { source: 'go', file: 'cover.out' },
71
+ ];
72
+ for (const c of candidates) {
73
+ const abs = path.join(cwd, c.file);
74
+ let raw;
75
+ try {
76
+ raw = fs.readFileSync(abs, 'utf-8');
77
+ }
78
+ catch {
79
+ continue;
80
+ }
81
+ try {
82
+ switch (c.source) {
83
+ case 'istanbul-summary':
84
+ return parseIstanbulSummary(raw, c.file, cwd);
85
+ case 'istanbul-final':
86
+ return parseIstanbulFinal(raw, c.file, cwd);
87
+ case 'coverage-py':
88
+ return parseCoveragePy(raw, c.file, cwd);
89
+ case 'go':
90
+ return parseGoCoverProfile(raw, c.file, cwd);
91
+ }
92
+ }
93
+ catch {
94
+ // Try the next candidate on parse failure.
95
+ continue;
96
+ }
97
+ }
98
+ return null;
99
+ }
100
+ // ─── Parsers ────────────────────────────────────────────────────────────────
101
+ /** Istanbul coverage-summary.json: `{ "total": {...}, "/abs/path": {...} }`. */
102
+ function parseIstanbulSummary(raw, sourceFile, cwd) {
103
+ const data = JSON.parse(raw);
104
+ const files = new Map();
105
+ let totalCovered = 0;
106
+ let totalLines = 0;
107
+ for (const [key, entry] of Object.entries(data)) {
108
+ if (key === 'total')
109
+ continue;
110
+ const lines = entry?.lines;
111
+ if (!lines || typeof lines.covered !== 'number' || typeof lines.total !== 'number')
112
+ continue;
113
+ const rel = toRelative(key, cwd);
114
+ const fc = {
115
+ path: rel,
116
+ covered: lines.covered,
117
+ total: lines.total,
118
+ pct: round1(lines.total > 0 ? (lines.covered / lines.total) * 100 : 0),
119
+ };
120
+ files.set(rel, fc);
121
+ totalCovered += lines.covered;
122
+ totalLines += lines.total;
123
+ }
124
+ const total = data.total?.lines;
125
+ const linePercent = total && typeof total.pct === 'number'
126
+ ? round1(total.pct)
127
+ : round1(totalLines > 0 ? (totalCovered / totalLines) * 100 : 0);
128
+ return { source: 'istanbul-summary', sourceFile, linePercent, files };
129
+ }
130
+ /** Istanbul coverage-final.json: `{ "/abs/path": { s: { "0": 1, "1": 0, ... }, statementMap: {...} } }`. */
131
+ function parseIstanbulFinal(raw, sourceFile, cwd) {
132
+ const data = JSON.parse(raw);
133
+ const files = new Map();
134
+ let totalCovered = 0;
135
+ let totalStatements = 0;
136
+ for (const [key, entry] of Object.entries(data)) {
137
+ const s = entry?.s;
138
+ if (!s || typeof s !== 'object')
139
+ continue;
140
+ const counts = Object.values(s);
141
+ const total = counts.length;
142
+ const covered = counts.filter((n) => typeof n === 'number' && n > 0).length;
143
+ const rel = toRelative(entry.path || key, cwd);
144
+ files.set(rel, {
145
+ path: rel,
146
+ covered,
147
+ total,
148
+ pct: round1(total > 0 ? (covered / total) * 100 : 0),
149
+ });
150
+ totalCovered += covered;
151
+ totalStatements += total;
152
+ }
153
+ return {
154
+ source: 'istanbul-final',
155
+ sourceFile,
156
+ linePercent: round1(totalStatements > 0 ? (totalCovered / totalStatements) * 100 : 0),
157
+ files,
158
+ };
159
+ }
160
+ /** coverage.py JSON: `{ "totals": {...}, "files": { "path": { summary: {...} } } }`. */
161
+ function parseCoveragePy(raw, sourceFile, cwd) {
162
+ const data = JSON.parse(raw);
163
+ const files = new Map();
164
+ let totalCovered = 0;
165
+ let totalStatements = 0;
166
+ for (const [key, entry] of Object.entries(data.files ?? {})) {
167
+ const summary = entry?.summary;
168
+ if (!summary)
169
+ continue;
170
+ const total = typeof summary.num_statements === 'number' ? summary.num_statements : 0;
171
+ const missing = typeof summary.missing_lines === 'number' ? summary.missing_lines : 0;
172
+ const covered = typeof summary.covered_lines === 'number'
173
+ ? summary.covered_lines
174
+ : Math.max(0, total - missing);
175
+ const rel = toRelative(key, cwd);
176
+ files.set(rel, {
177
+ path: rel,
178
+ covered,
179
+ total,
180
+ pct: round1(typeof summary.percent_covered === 'number'
181
+ ? summary.percent_covered
182
+ : total > 0
183
+ ? (covered / total) * 100
184
+ : 0),
185
+ });
186
+ totalCovered += covered;
187
+ totalStatements += total;
188
+ }
189
+ const linePercent = typeof data.totals?.percent_covered === 'number'
190
+ ? round1(data.totals.percent_covered)
191
+ : round1(totalStatements > 0 ? (totalCovered / totalStatements) * 100 : 0);
192
+ return { source: 'coverage-py', sourceFile, linePercent, files };
193
+ }
194
+ /**
195
+ * Go coverprofile:
196
+ * mode: set
197
+ * pkg/path/file.go:5.2,10.1 3 1
198
+ *
199
+ * Each line: file:startLine.col,endLine.col numStatements count.
200
+ * A block is covered iff count > 0.
201
+ */
202
+ function parseGoCoverProfile(raw, sourceFile, cwd) {
203
+ const perFile = new Map();
204
+ let totalCovered = 0;
205
+ let totalStatements = 0;
206
+ for (const line of raw.split('\n')) {
207
+ if (!line || line.startsWith('mode:'))
208
+ continue;
209
+ // file:startLine.col,endLine.col numStatements count
210
+ const m = line.match(/^(.+):\d+\.\d+,\d+\.\d+\s+(\d+)\s+(\d+)$/);
211
+ if (!m)
212
+ continue;
213
+ const file = m[1];
214
+ const stmts = parseInt(m[2], 10);
215
+ const count = parseInt(m[3], 10);
216
+ const bucket = perFile.get(file) ?? { covered: 0, total: 0 };
217
+ bucket.total += stmts;
218
+ if (count > 0)
219
+ bucket.covered += stmts;
220
+ perFile.set(file, bucket);
221
+ totalStatements += stmts;
222
+ if (count > 0)
223
+ totalCovered += stmts;
224
+ }
225
+ const files = new Map();
226
+ for (const [key, { covered, total }] of perFile) {
227
+ // Go coverprofile uses module-relative paths (e.g. github.com/user/repo/pkg/foo.go).
228
+ // Strip the module prefix if it resolves to a real file in cwd.
229
+ const rel = resolveGoPath(key, cwd);
230
+ files.set(rel, {
231
+ path: rel,
232
+ covered,
233
+ total,
234
+ pct: round1(total > 0 ? (covered / total) * 100 : 0),
235
+ });
236
+ }
237
+ return {
238
+ source: 'go',
239
+ sourceFile,
240
+ linePercent: round1(totalStatements > 0 ? (totalCovered / totalStatements) * 100 : 0),
241
+ files,
242
+ };
243
+ }
244
+ // ─── Helpers ────────────────────────────────────────────────────────────────
245
+ function round1(n) {
246
+ return Math.round(n * 10) / 10;
247
+ }
248
+ /** Turn an absolute or prefixed coverage path into a project-relative path. */
249
+ function toRelative(p, cwd) {
250
+ let out = p.replace(/\\/g, '/');
251
+ const cwdNorm = cwd.replace(/\\/g, '/');
252
+ if (out.startsWith(cwdNorm + '/')) {
253
+ out = out.slice(cwdNorm.length + 1);
254
+ }
255
+ else if (out === cwdNorm) {
256
+ out = '';
257
+ }
258
+ if (out.startsWith('./'))
259
+ out = out.slice(2);
260
+ return out;
261
+ }
262
+ /**
263
+ * Go coverprofile paths look like `github.com/user/repo/pkg/foo.go`. If that
264
+ * file doesn't exist at cwd, try stripping leading segments until we find one
265
+ * that does. Fall back to the original string if nothing resolves.
266
+ */
267
+ function resolveGoPath(p, cwd) {
268
+ const norm = p.replace(/\\/g, '/');
269
+ // Already relative and exists?
270
+ if (fs.existsSync(path.join(cwd, norm)))
271
+ return norm;
272
+ const parts = norm.split('/');
273
+ for (let i = 1; i < parts.length; i++) {
274
+ const candidate = parts.slice(i).join('/');
275
+ if (fs.existsSync(path.join(cwd, candidate)))
276
+ return candidate;
277
+ }
278
+ return norm;
279
+ }
280
+ //# sourceMappingURL=coverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../src/analyzers/tools/coverage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * CVSS v4.0 MacroVector → base score lookup table.
3
+ * 270 entries, one per valid macrovector.
4
+ *
5
+ * Source: https://github.com/FIRSTdotorg/cvss-v4-calculator/blob/main/cvss_lookup.js
6
+ * Copyright FIRST, Red Hat, and contributors. SPDX-License-Identifier: BSD-2-Clause.
7
+ * See THIRD_PARTY_NOTICES.md for attribution.
8
+ */
9
+ export declare const CVSS_V4_LOOKUP: Record<string, number>;
10
+ //# sourceMappingURL=cvss-v4-lookup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cvss-v4-lookup.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/cvss-v4-lookup.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA+QjD,CAAC"}