@vyuhlabs/dxkit 2.4.6 → 2.4.7

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 (345) hide show
  1. package/CHANGELOG.md +885 -0
  2. package/README.md +131 -26
  3. package/dist/analysis-result.d.ts +112 -0
  4. package/dist/analysis-result.d.ts.map +1 -0
  5. package/dist/analysis-result.js +52 -0
  6. package/dist/analysis-result.js.map +1 -0
  7. package/dist/analyzers/bom/detailed.d.ts.map +1 -1
  8. package/dist/analyzers/bom/detailed.js +19 -0
  9. package/dist/analyzers/bom/detailed.js.map +1 -1
  10. package/dist/analyzers/bom/gather.d.ts +27 -26
  11. package/dist/analyzers/bom/gather.d.ts.map +1 -1
  12. package/dist/analyzers/bom/gather.js +26 -87
  13. package/dist/analyzers/bom/gather.js.map +1 -1
  14. package/dist/analyzers/bom/index.d.ts +0 -7
  15. package/dist/analyzers/bom/index.d.ts.map +1 -1
  16. package/dist/analyzers/bom/index.js +98 -48
  17. package/dist/analyzers/bom/index.js.map +1 -1
  18. package/dist/analyzers/bom/types.d.ts +11 -13
  19. package/dist/analyzers/bom/types.d.ts.map +1 -1
  20. package/dist/analyzers/cache.d.ts +95 -0
  21. package/dist/analyzers/cache.d.ts.map +1 -0
  22. package/dist/analyzers/cache.js +309 -0
  23. package/dist/analyzers/cache.js.map +1 -0
  24. package/dist/analyzers/coverage-runner.d.ts +56 -0
  25. package/dist/analyzers/coverage-runner.d.ts.map +1 -0
  26. package/dist/analyzers/coverage-runner.js +72 -0
  27. package/dist/analyzers/coverage-runner.js.map +1 -0
  28. package/dist/analyzers/dashboard/index.d.ts +24 -0
  29. package/dist/analyzers/dashboard/index.d.ts.map +1 -0
  30. package/dist/analyzers/dashboard/index.js +666 -0
  31. package/dist/analyzers/dashboard/index.js.map +1 -0
  32. package/dist/analyzers/developer/gather.d.ts.map +1 -1
  33. package/dist/analyzers/developer/gather.js +205 -37
  34. package/dist/analyzers/developer/gather.js.map +1 -1
  35. package/dist/analyzers/developer/index.d.ts +1 -1
  36. package/dist/analyzers/developer/index.d.ts.map +1 -1
  37. package/dist/analyzers/developer/index.js +19 -8
  38. package/dist/analyzers/developer/index.js.map +1 -1
  39. package/dist/analyzers/dispatcher.d.ts +37 -0
  40. package/dist/analyzers/dispatcher.d.ts.map +1 -1
  41. package/dist/analyzers/dispatcher.js +56 -9
  42. package/dist/analyzers/dispatcher.js.map +1 -1
  43. package/dist/analyzers/docs/shallow.d.ts +17 -5
  44. package/dist/analyzers/docs/shallow.d.ts.map +1 -1
  45. package/dist/analyzers/docs/shallow.js +65 -2
  46. package/dist/analyzers/docs/shallow.js.map +1 -1
  47. package/dist/analyzers/dx/shallow.d.ts +17 -5
  48. package/dist/analyzers/dx/shallow.d.ts.map +1 -1
  49. package/dist/analyzers/dx/shallow.js +66 -2
  50. package/dist/analyzers/dx/shallow.js.map +1 -1
  51. package/dist/analyzers/health/actions.d.ts +1 -1
  52. package/dist/analyzers/health/actions.d.ts.map +1 -1
  53. package/dist/analyzers/health/actions.js +27 -9
  54. package/dist/analyzers/health/actions.js.map +1 -1
  55. package/dist/analyzers/health/detailed.d.ts +2 -1
  56. package/dist/analyzers/health/detailed.d.ts.map +1 -1
  57. package/dist/analyzers/health/detailed.js +11 -7
  58. package/dist/analyzers/health/detailed.js.map +1 -1
  59. package/dist/analyzers/health.d.ts +27 -0
  60. package/dist/analyzers/health.d.ts.map +1 -1
  61. package/dist/analyzers/health.js +271 -33
  62. package/dist/analyzers/health.js.map +1 -1
  63. package/dist/analyzers/licenses/gather.d.ts +35 -8
  64. package/dist/analyzers/licenses/gather.d.ts.map +1 -1
  65. package/dist/analyzers/licenses/gather.js +70 -13
  66. package/dist/analyzers/licenses/gather.js.map +1 -1
  67. package/dist/analyzers/licenses/index.d.ts +1 -1
  68. package/dist/analyzers/licenses/index.d.ts.map +1 -1
  69. package/dist/analyzers/licenses/index.js +52 -11
  70. package/dist/analyzers/licenses/index.js.map +1 -1
  71. package/dist/analyzers/licenses/types.d.ts +15 -0
  72. package/dist/analyzers/licenses/types.d.ts.map +1 -1
  73. package/dist/analyzers/maintainability/shallow.d.ts +17 -5
  74. package/dist/analyzers/maintainability/shallow.d.ts.map +1 -1
  75. package/dist/analyzers/maintainability/shallow.js +80 -2
  76. package/dist/analyzers/maintainability/shallow.js.map +1 -1
  77. package/dist/analyzers/quality/detailed.d.ts.map +1 -1
  78. package/dist/analyzers/quality/detailed.js +4 -6
  79. package/dist/analyzers/quality/detailed.js.map +1 -1
  80. package/dist/analyzers/quality/gather.d.ts +1 -14
  81. package/dist/analyzers/quality/gather.d.ts.map +1 -1
  82. package/dist/analyzers/quality/gather.js +48 -137
  83. package/dist/analyzers/quality/gather.js.map +1 -1
  84. package/dist/analyzers/quality/index.d.ts +9 -2
  85. package/dist/analyzers/quality/index.d.ts.map +1 -1
  86. package/dist/analyzers/quality/index.js +189 -117
  87. package/dist/analyzers/quality/index.js.map +1 -1
  88. package/dist/analyzers/quality/shallow.d.ts +50 -5
  89. package/dist/analyzers/quality/shallow.d.ts.map +1 -1
  90. package/dist/analyzers/quality/shallow.js +155 -2
  91. package/dist/analyzers/quality/shallow.js.map +1 -1
  92. package/dist/analyzers/quality/types.d.ts +14 -0
  93. package/dist/analyzers/quality/types.d.ts.map +1 -1
  94. package/dist/analyzers/security/actions.d.ts +11 -4
  95. package/dist/analyzers/security/actions.d.ts.map +1 -1
  96. package/dist/analyzers/security/actions.js +87 -37
  97. package/dist/analyzers/security/actions.js.map +1 -1
  98. package/dist/analyzers/security/aggregator.d.ts +236 -0
  99. package/dist/analyzers/security/aggregator.d.ts.map +1 -0
  100. package/dist/analyzers/security/aggregator.js +347 -0
  101. package/dist/analyzers/security/aggregator.js.map +1 -0
  102. package/dist/analyzers/security/detailed.d.ts +2 -2
  103. package/dist/analyzers/security/detailed.d.ts.map +1 -1
  104. package/dist/analyzers/security/detailed.js +10 -9
  105. package/dist/analyzers/security/detailed.js.map +1 -1
  106. package/dist/analyzers/security/gather.d.ts +103 -1
  107. package/dist/analyzers/security/gather.d.ts.map +1 -1
  108. package/dist/analyzers/security/gather.js +281 -9
  109. package/dist/analyzers/security/gather.js.map +1 -1
  110. package/dist/analyzers/security/index.d.ts +15 -0
  111. package/dist/analyzers/security/index.d.ts.map +1 -1
  112. package/dist/analyzers/security/index.js +463 -50
  113. package/dist/analyzers/security/index.js.map +1 -1
  114. package/dist/analyzers/security/shallow.d.ts +50 -6
  115. package/dist/analyzers/security/shallow.d.ts.map +1 -1
  116. package/dist/analyzers/security/shallow.js +154 -2
  117. package/dist/analyzers/security/shallow.js.map +1 -1
  118. package/dist/analyzers/security/types.d.ts +51 -0
  119. package/dist/analyzers/security/types.d.ts.map +1 -1
  120. package/dist/analyzers/tests/detailed.d.ts.map +1 -1
  121. package/dist/analyzers/tests/detailed.js +2 -3
  122. package/dist/analyzers/tests/detailed.js.map +1 -1
  123. package/dist/analyzers/tests/gather.d.ts +2 -1
  124. package/dist/analyzers/tests/gather.d.ts.map +1 -1
  125. package/dist/analyzers/tests/gather.js +98 -69
  126. package/dist/analyzers/tests/gather.js.map +1 -1
  127. package/dist/analyzers/tests/index.d.ts +11 -2
  128. package/dist/analyzers/tests/index.d.ts.map +1 -1
  129. package/dist/analyzers/tests/index.js +83 -18
  130. package/dist/analyzers/tests/index.js.map +1 -1
  131. package/dist/analyzers/tests/shallow.d.ts +19 -5
  132. package/dist/analyzers/tests/shallow.d.ts.map +1 -1
  133. package/dist/analyzers/tests/shallow.js +89 -2
  134. package/dist/analyzers/tests/shallow.js.map +1 -1
  135. package/dist/analyzers/tests/types.d.ts +41 -1
  136. package/dist/analyzers/tests/types.d.ts.map +1 -1
  137. package/dist/analyzers/tools/autogen-header.d.ts +8 -0
  138. package/dist/analyzers/tools/autogen-header.d.ts.map +1 -0
  139. package/dist/analyzers/tools/autogen-header.js +107 -0
  140. package/dist/analyzers/tools/autogen-header.js.map +1 -0
  141. package/dist/analyzers/tools/cloc.d.ts.map +1 -1
  142. package/dist/analyzers/tools/cloc.js +36 -5
  143. package/dist/analyzers/tools/cloc.js.map +1 -1
  144. package/dist/analyzers/tools/debug-statements.d.ts +17 -0
  145. package/dist/analyzers/tools/debug-statements.d.ts.map +1 -0
  146. package/dist/analyzers/tools/debug-statements.js +58 -0
  147. package/dist/analyzers/tools/debug-statements.js.map +1 -0
  148. package/dist/analyzers/tools/default-exclusions.gitignore +28 -0
  149. package/dist/analyzers/tools/exclusions.d.ts +33 -6
  150. package/dist/analyzers/tools/exclusions.d.ts.map +1 -1
  151. package/dist/analyzers/tools/exclusions.js +95 -26
  152. package/dist/analyzers/tools/exclusions.js.map +1 -1
  153. package/dist/analyzers/tools/generic.d.ts +17 -2
  154. package/dist/analyzers/tools/generic.d.ts.map +1 -1
  155. package/dist/analyzers/tools/generic.js +206 -109
  156. package/dist/analyzers/tools/generic.js.map +1 -1
  157. package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
  158. package/dist/analyzers/tools/gitleaks.js +48 -1
  159. package/dist/analyzers/tools/gitleaks.js.map +1 -1
  160. package/dist/analyzers/tools/graphify.d.ts +30 -2
  161. package/dist/analyzers/tools/graphify.d.ts.map +1 -1
  162. package/dist/analyzers/tools/graphify.js +131 -15
  163. package/dist/analyzers/tools/graphify.js.map +1 -1
  164. package/dist/analyzers/tools/jscpd.d.ts +12 -2
  165. package/dist/analyzers/tools/jscpd.d.ts.map +1 -1
  166. package/dist/analyzers/tools/jscpd.js +129 -6
  167. package/dist/analyzers/tools/jscpd.js.map +1 -1
  168. package/dist/analyzers/tools/minified-detection.d.ts +9 -0
  169. package/dist/analyzers/tools/minified-detection.d.ts.map +1 -0
  170. package/dist/analyzers/tools/minified-detection.js +147 -0
  171. package/dist/analyzers/tools/minified-detection.js.map +1 -0
  172. package/dist/analyzers/tools/nuget-package-reference.d.ts +131 -0
  173. package/dist/analyzers/tools/nuget-package-reference.d.ts.map +1 -0
  174. package/dist/analyzers/tools/nuget-package-reference.js +175 -0
  175. package/dist/analyzers/tools/nuget-package-reference.js.map +1 -0
  176. package/dist/analyzers/tools/osv-scanner-deps.d.ts +3 -2
  177. package/dist/analyzers/tools/osv-scanner-deps.d.ts.map +1 -1
  178. package/dist/analyzers/tools/osv-scanner-deps.js +32 -14
  179. package/dist/analyzers/tools/osv-scanner-deps.js.map +1 -1
  180. package/dist/analyzers/tools/osv.d.ts +36 -0
  181. package/dist/analyzers/tools/osv.d.ts.map +1 -1
  182. package/dist/analyzers/tools/osv.js +26 -0
  183. package/dist/analyzers/tools/osv.js.map +1 -1
  184. package/dist/analyzers/tools/parallel.d.ts +1 -1
  185. package/dist/analyzers/tools/parallel.d.ts.map +1 -1
  186. package/dist/analyzers/tools/parallel.js +2 -2
  187. package/dist/analyzers/tools/parallel.js.map +1 -1
  188. package/dist/analyzers/tools/risk-score.d.ts +7 -0
  189. package/dist/analyzers/tools/risk-score.d.ts.map +1 -1
  190. package/dist/analyzers/tools/risk-score.js +9 -2
  191. package/dist/analyzers/tools/risk-score.js.map +1 -1
  192. package/dist/analyzers/tools/run-tests-helper.d.ts +43 -0
  193. package/dist/analyzers/tools/run-tests-helper.d.ts.map +1 -0
  194. package/dist/analyzers/tools/run-tests-helper.js +156 -0
  195. package/dist/analyzers/tools/run-tests-helper.js.map +1 -0
  196. package/dist/analyzers/tools/runner.d.ts.map +1 -1
  197. package/dist/analyzers/tools/runner.js +75 -12
  198. package/dist/analyzers/tools/runner.js.map +1 -1
  199. package/dist/analyzers/tools/semgrep.d.ts +39 -2
  200. package/dist/analyzers/tools/semgrep.d.ts.map +1 -1
  201. package/dist/analyzers/tools/semgrep.js +131 -9
  202. package/dist/analyzers/tools/semgrep.js.map +1 -1
  203. package/dist/analyzers/tools/timing.d.ts +17 -3
  204. package/dist/analyzers/tools/timing.d.ts.map +1 -1
  205. package/dist/analyzers/tools/timing.js +36 -14
  206. package/dist/analyzers/tools/timing.js.map +1 -1
  207. package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
  208. package/dist/analyzers/tools/tool-registry.js +11 -1
  209. package/dist/analyzers/tools/tool-registry.js.map +1 -1
  210. package/dist/analyzers/tools/tools-unavailable-prose.d.ts +18 -0
  211. package/dist/analyzers/tools/tools-unavailable-prose.d.ts.map +1 -0
  212. package/dist/analyzers/tools/tools-unavailable-prose.js +69 -0
  213. package/dist/analyzers/tools/tools-unavailable-prose.js.map +1 -0
  214. package/dist/analyzers/tools/upgrade-plan-resolver.d.ts.map +1 -1
  215. package/dist/analyzers/tools/upgrade-plan-resolver.js +7 -0
  216. package/dist/analyzers/tools/upgrade-plan-resolver.js.map +1 -1
  217. package/dist/analyzers/tools/vendored-advisor.d.ts +43 -0
  218. package/dist/analyzers/tools/vendored-advisor.d.ts.map +1 -0
  219. package/dist/analyzers/tools/vendored-advisor.js +107 -0
  220. package/dist/analyzers/tools/vendored-advisor.js.map +1 -0
  221. package/dist/analyzers/tools/walk-paths.d.ts +78 -0
  222. package/dist/analyzers/tools/walk-paths.d.ts.map +1 -0
  223. package/dist/analyzers/tools/walk-paths.js +150 -0
  224. package/dist/analyzers/tools/walk-paths.js.map +1 -0
  225. package/dist/analyzers/tools/walk-source-files.d.ts +70 -0
  226. package/dist/analyzers/tools/walk-source-files.d.ts.map +1 -0
  227. package/dist/analyzers/tools/walk-source-files.js +369 -0
  228. package/dist/analyzers/tools/walk-source-files.js.map +1 -0
  229. package/dist/analyzers/types.d.ts +204 -4
  230. package/dist/analyzers/types.d.ts.map +1 -1
  231. package/dist/analyzers/xlsx/bom.d.ts.map +1 -1
  232. package/dist/analyzers/xlsx/bom.js +8 -1
  233. package/dist/analyzers/xlsx/bom.js.map +1 -1
  234. package/dist/cli.d.ts.map +1 -1
  235. package/dist/cli.js +557 -189
  236. package/dist/cli.js.map +1 -1
  237. package/dist/detect.d.ts.map +1 -1
  238. package/dist/detect.js +24 -7
  239. package/dist/detect.js.map +1 -1
  240. package/dist/doctor.d.ts.map +1 -1
  241. package/dist/doctor.js +103 -53
  242. package/dist/doctor.js.map +1 -1
  243. package/dist/languages/capabilities/provider.d.ts +130 -1
  244. package/dist/languages/capabilities/provider.d.ts.map +1 -1
  245. package/dist/languages/capabilities/types.d.ts +68 -7
  246. package/dist/languages/capabilities/types.d.ts.map +1 -1
  247. package/dist/languages/csharp.d.ts +15 -1
  248. package/dist/languages/csharp.d.ts.map +1 -1
  249. package/dist/languages/csharp.js +624 -146
  250. package/dist/languages/csharp.js.map +1 -1
  251. package/dist/languages/go.d.ts.map +1 -1
  252. package/dist/languages/go.js +89 -11
  253. package/dist/languages/go.js.map +1 -1
  254. package/dist/languages/index.d.ts +131 -2
  255. package/dist/languages/index.d.ts.map +1 -1
  256. package/dist/languages/index.js +206 -0
  257. package/dist/languages/index.js.map +1 -1
  258. package/dist/languages/java.d.ts.map +1 -1
  259. package/dist/languages/java.js +113 -26
  260. package/dist/languages/java.js.map +1 -1
  261. package/dist/languages/kotlin.d.ts.map +1 -1
  262. package/dist/languages/kotlin.js +132 -26
  263. package/dist/languages/kotlin.js.map +1 -1
  264. package/dist/languages/python.d.ts.map +1 -1
  265. package/dist/languages/python.js +149 -44
  266. package/dist/languages/python.js.map +1 -1
  267. package/dist/languages/ruby.d.ts +39 -1
  268. package/dist/languages/ruby.d.ts.map +1 -1
  269. package/dist/languages/ruby.js +178 -44
  270. package/dist/languages/ruby.js.map +1 -1
  271. package/dist/languages/rust.d.ts.map +1 -1
  272. package/dist/languages/rust.js +103 -16
  273. package/dist/languages/rust.js.map +1 -1
  274. package/dist/languages/types.d.ts +228 -5
  275. package/dist/languages/types.d.ts.map +1 -1
  276. package/dist/languages/typescript.d.ts.map +1 -1
  277. package/dist/languages/typescript.js +201 -14
  278. package/dist/languages/typescript.js.map +1 -1
  279. package/dist/scoring/dimensions/documentation.d.ts +53 -0
  280. package/dist/scoring/dimensions/documentation.d.ts.map +1 -0
  281. package/dist/scoring/dimensions/documentation.js +106 -0
  282. package/dist/scoring/dimensions/documentation.js.map +1 -0
  283. package/dist/scoring/dimensions/dx.d.ts +53 -0
  284. package/dist/scoring/dimensions/dx.d.ts.map +1 -0
  285. package/dist/scoring/dimensions/dx.js +105 -0
  286. package/dist/scoring/dimensions/dx.js.map +1 -0
  287. package/dist/scoring/dimensions/maintainability.d.ts +53 -0
  288. package/dist/scoring/dimensions/maintainability.d.ts.map +1 -0
  289. package/dist/scoring/dimensions/maintainability.js +101 -0
  290. package/dist/scoring/dimensions/maintainability.js.map +1 -0
  291. package/dist/scoring/dimensions/quality.d.ts +108 -0
  292. package/dist/scoring/dimensions/quality.d.ts.map +1 -0
  293. package/dist/scoring/dimensions/quality.js +174 -0
  294. package/dist/scoring/dimensions/quality.js.map +1 -0
  295. package/dist/scoring/dimensions/security.d.ts +84 -0
  296. package/dist/scoring/dimensions/security.d.ts.map +1 -0
  297. package/dist/scoring/dimensions/security.js +135 -0
  298. package/dist/scoring/dimensions/security.js.map +1 -0
  299. package/dist/scoring/dimensions/testing.d.ts +56 -0
  300. package/dist/scoring/dimensions/testing.d.ts.map +1 -0
  301. package/dist/scoring/dimensions/testing.js +98 -0
  302. package/dist/scoring/dimensions/testing.js.map +1 -0
  303. package/dist/scoring/evaluator.d.ts +27 -0
  304. package/dist/scoring/evaluator.d.ts.map +1 -0
  305. package/dist/scoring/evaluator.js +124 -0
  306. package/dist/scoring/evaluator.js.map +1 -0
  307. package/dist/scoring/format.d.ts +34 -0
  308. package/dist/scoring/format.d.ts.map +1 -0
  309. package/dist/scoring/format.js +63 -0
  310. package/dist/scoring/format.js.map +1 -0
  311. package/dist/scoring/index.d.ts +37 -0
  312. package/dist/scoring/index.d.ts.map +1 -0
  313. package/dist/scoring/index.js +57 -0
  314. package/dist/scoring/index.js.map +1 -0
  315. package/dist/scoring/overall.d.ts +54 -0
  316. package/dist/scoring/overall.d.ts.map +1 -0
  317. package/dist/scoring/overall.js +76 -0
  318. package/dist/scoring/overall.js.map +1 -0
  319. package/dist/scoring/result.d.ts +111 -0
  320. package/dist/scoring/result.d.ts.map +1 -0
  321. package/dist/scoring/result.js +14 -0
  322. package/dist/scoring/result.js.map +1 -0
  323. package/dist/scoring/spec.d.ts +76 -0
  324. package/dist/scoring/spec.d.ts.map +1 -0
  325. package/dist/scoring/spec.js +22 -0
  326. package/dist/scoring/spec.js.map +1 -0
  327. package/dist/scoring/thresholds.d.ts +56 -0
  328. package/dist/scoring/thresholds.d.ts.map +1 -0
  329. package/dist/scoring/thresholds.js +75 -0
  330. package/dist/scoring/thresholds.js.map +1 -0
  331. package/dist/tools-cli.d.ts.map +1 -1
  332. package/dist/tools-cli.js +21 -2
  333. package/dist/tools-cli.js.map +1 -1
  334. package/dist/types.d.ts +16 -0
  335. package/dist/types.d.ts.map +1 -1
  336. package/package.json +1 -1
  337. package/templates/.claude/commands/dashboard.md +17 -9
  338. package/dist/analyzers/scoring.d.ts +0 -49
  339. package/dist/analyzers/scoring.d.ts.map +0 -1
  340. package/dist/analyzers/scoring.js +0 -422
  341. package/dist/analyzers/scoring.js.map +0 -1
  342. package/dist/analyzers/security/scoring.d.ts +0 -29
  343. package/dist/analyzers/security/scoring.d.ts.map +0 -1
  344. package/dist/analyzers/security/scoring.js +0 -40
  345. package/dist/analyzers/security/scoring.js.map +0 -1
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ /**
3
+ * Canonical depth-unlimited path walker for language packs.
4
+ *
5
+ * Every pack that needs to discover its manifest files (`.csproj` /
6
+ * `.sln` for C#, `pyproject.toml` / `setup.py` for Python,
7
+ * `build.gradle.kts` for Kotlin, `pom.xml` for Java, `Gemfile` for
8
+ * Ruby, etc.) routes through `walkPaths`. ONE walker — no per-pack
9
+ * recursive readdir reimplementations, no hardcoded depth caps that
10
+ * silently miss deep monorepo structures.
11
+ *
12
+ * Why a separate primitive from `walk-source-files.ts`:
13
+ *
14
+ * - `walkSourceFiles` resolves auto-generated patterns + test
15
+ * patterns + default extensions from the language registry
16
+ * (`LANGUAGES.flatMap(...)`). Language pack modules that need
17
+ * manifest discovery during their own initialization can't import
18
+ * that — circular dependency, partially-loaded registry entries
19
+ * surface as `undefined`-property reads at module-eval time.
20
+ *
21
+ * - This walker is the foundational layer: pure FS traversal +
22
+ * `isExcludedPath` (gitignore + bundled defaults) + extension
23
+ * filter. No LANGUAGES touch, no autogen/test heuristics. Safe to
24
+ * call from any pack at any point in the load order.
25
+ *
26
+ * Behavioral contract:
27
+ *
28
+ * - **Depth-unlimited.** The single largest class of latent bugs
29
+ * the previous per-pack walkers shipped: `maxDepth = 2/3/4/5`
30
+ * caps chosen by each pack author based on their idea of "deep
31
+ * enough." Real customer monorepos routinely exceed every one of
32
+ * those values (dpl-studio: 6–9). This walker walks the whole
33
+ * tree minus exclusions, period.
34
+ *
35
+ * - **Exclusion-aware.** Honors the bundled exclusion list
36
+ * (`node_modules`, `bin`, `obj`, `vendor`, `dist`, `target`, …)
37
+ * plus the project's `.gitignore` + `.dxkit-ignore` via the
38
+ * canonical `isExcludedPath`. Same answer the rest of dxkit
39
+ * uses.
40
+ *
41
+ * - **Dot-directory pruning.** `.git`, `.vscode`, `.idea`,
42
+ * `.dxkit`, etc. are universally skipped even when not in
43
+ * `.gitignore`.
44
+ *
45
+ * - **POSIX paths, relative to cwd, sorted.** Deterministic for
46
+ * test fixtures and snapshot comparisons.
47
+ */
48
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
49
+ if (k2 === undefined) k2 = k;
50
+ var desc = Object.getOwnPropertyDescriptor(m, k);
51
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
52
+ desc = { enumerable: true, get: function() { return m[k]; } };
53
+ }
54
+ Object.defineProperty(o, k2, desc);
55
+ }) : (function(o, m, k, k2) {
56
+ if (k2 === undefined) k2 = k;
57
+ o[k2] = m[k];
58
+ }));
59
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
60
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
61
+ }) : function(o, v) {
62
+ o["default"] = v;
63
+ });
64
+ var __importStar = (this && this.__importStar) || (function () {
65
+ var ownKeys = function(o) {
66
+ ownKeys = Object.getOwnPropertyNames || function (o) {
67
+ var ar = [];
68
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
69
+ return ar;
70
+ };
71
+ return ownKeys(o);
72
+ };
73
+ return function (mod) {
74
+ if (mod && mod.__esModule) return mod;
75
+ var result = {};
76
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
77
+ __setModuleDefault(result, mod);
78
+ return result;
79
+ };
80
+ })();
81
+ Object.defineProperty(exports, "__esModule", { value: true });
82
+ exports.clearWalkPathsCache = clearWalkPathsCache;
83
+ exports.walkPaths = walkPaths;
84
+ const fs = __importStar(require("fs"));
85
+ const path = __importStar(require("path"));
86
+ const exclusions_1 = require("./exclusions");
87
+ // Memoization keyed by `(cwd, opts-fingerprint)`. Mirrors
88
+ // `walk-source-files`'s cache pattern so repeat callers within one
89
+ // process pay the walk cost once.
90
+ const walkCache = new Map();
91
+ function clearWalkPathsCache() {
92
+ walkCache.clear();
93
+ }
94
+ /**
95
+ * Walk the tree rooted at `cwd` and return every file matching the
96
+ * extension or basename filter, depth-unlimited, exclusion-aware.
97
+ * Returns POSIX-style relative paths, sorted. Never throws —
98
+ * unreadable directories are skipped and the partial result is
99
+ * returned.
100
+ */
101
+ function walkPaths(cwd, opts) {
102
+ const respectIgnore = opts.respectIgnore ?? true;
103
+ const extensions = new Set(opts.extensions.map((e) => (e.startsWith('.') ? e : `.${e}`)));
104
+ const basenames = new Set(opts.basenames ?? []);
105
+ const cacheKey = `${cwd}\0${[...extensions].sort().join(',')}\0${[...basenames].sort().join(',')}\0${respectIgnore}`;
106
+ const hit = walkCache.get(cacheKey);
107
+ if (hit)
108
+ return hit;
109
+ const out = [];
110
+ walkDir(cwd, '', { extensions, basenames, respectIgnore }, out);
111
+ out.sort();
112
+ walkCache.set(cacheKey, out);
113
+ return out;
114
+ }
115
+ function walkDir(cwd, relDir, opts, out) {
116
+ const absDir = relDir ? path.join(cwd, relDir) : cwd;
117
+ let entries;
118
+ try {
119
+ entries = fs.readdirSync(absDir, { withFileTypes: true });
120
+ }
121
+ catch {
122
+ return;
123
+ }
124
+ for (const ent of entries) {
125
+ const relPath = relDir ? `${relDir}/${ent.name}` : ent.name;
126
+ if (ent.isDirectory()) {
127
+ // Always skip dot-directories — universal noise (.git, .vscode,
128
+ // .idea, .dxkit, .ci, …). Many aren't in `.gitignore` but no
129
+ // sane manifest discovery wants them.
130
+ if (ent.name.startsWith('.'))
131
+ continue;
132
+ // Bundled excludes (node_modules, bin, obj, vendor, target,
133
+ // dist, …) + project `.gitignore`/`.dxkit-ignore`.
134
+ if (opts.respectIgnore && (0, exclusions_1.isExcludedPath)(cwd, relPath))
135
+ continue;
136
+ walkDir(cwd, relPath, opts, out);
137
+ continue;
138
+ }
139
+ if (!ent.isFile())
140
+ continue;
141
+ const ext = path.extname(ent.name);
142
+ const matches = opts.extensions.has(ext) || opts.basenames.has(ent.name);
143
+ if (!matches)
144
+ continue;
145
+ if (opts.respectIgnore && (0, exclusions_1.isExcludedPath)(cwd, relPath))
146
+ continue;
147
+ out.push(relPath);
148
+ }
149
+ }
150
+ //# sourceMappingURL=walk-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk-paths.js","sourceRoot":"","sources":["../../../src/analyzers/tools/walk-paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import type { LanguageId } from '../../types';
2
+ export interface WalkOpts {
3
+ /** Restrict to specific extensions (e.g. `['.ts', '.tsx']`). Default:
4
+ * union across every registered language pack. */
5
+ extensions?: string[];
6
+ /** Include test files? Default: false. Test files are matched by
7
+ * `allTestFilePatterns()` — basename globs (`*.test.ts`) and
8
+ * path-anchored patterns (`tests/*.rs`). */
9
+ includeTests?: boolean;
10
+ /** Include auto-generated files (basename glob + 2KB header marker)?
11
+ * Default: false. Matches the post-D028 canonical "counted source
12
+ * file" predicate. */
13
+ includeAutogen?: boolean;
14
+ /** Apply `.gitignore` + `.dxkit-ignore` + bundled defaults? Default:
15
+ * true. Set false only for paths that genuinely need a raw FS view. */
16
+ respectIgnore?: boolean;
17
+ /** Restrict to one language pack's `sourceExtensions`. Default: all. */
18
+ packId?: LanguageId;
19
+ }
20
+ export declare function clearWalkCache(): void;
21
+ /**
22
+ * Walk the source tree rooted at `cwd` and return relative POSIX paths
23
+ * (no leading `./`) sorted for determinism. Returns `[]` for non-
24
+ * existent or non-directory roots — never throws.
25
+ */
26
+ export declare function walkSourceFiles(cwd: string, opts?: WalkOpts): string[];
27
+ export interface CountOpts {
28
+ /** 'files' = count of files with ≥1 match. 'lines' = total match
29
+ * count across all lines. Default: 'lines'. */
30
+ mode?: 'files' | 'lines';
31
+ /** Skip lines whose match falls on a comment line. Default: false.
32
+ * D074 closure — pre-fix, line-counters matched a commented-out
33
+ * occurrence of a target call the same as a live one and inflated
34
+ * counts 2x+ on commented-code-heavy codebases (platform: 1578
35
+ * reported / 733 active for the JS print-statement family).
36
+ *
37
+ * Per-file comment marker chosen by extension:
38
+ * .ts/.tsx/.js/.jsx/.go/.rs/.java/.kt/.kts/.cs/.cpp/.c/.h/.hpp/.swift -> slash-style
39
+ * .py/.rb/.sh/.yml/.yaml/.toml -> hash-style
40
+ * Files with no known mapping are scanned as-is (no comment filter). */
41
+ skipComments?: boolean;
42
+ /** Return top-N (by match count) offender list. Default: 0 (skip). */
43
+ perFileTopN?: number;
44
+ }
45
+ export interface CountResult {
46
+ /** Sum of matches across all walked files. */
47
+ lines: number;
48
+ /** Count of files with ≥1 match. */
49
+ files: number;
50
+ /** Top-N offenders. Empty unless `perFileTopN > 0`. */
51
+ perFile: Array<{
52
+ file: string;
53
+ count: number;
54
+ }>;
55
+ }
56
+ /**
57
+ * Read each file once, scan in-process. Pass `patterns` as compiled
58
+ * regexes for repeated use, or as strings (compiled here with global
59
+ * flag). Each line is tested against the alternation; multiple
60
+ * patterns are unioned via `RegExp` `|` — pass them pre-merged for
61
+ * best performance.
62
+ */
63
+ export declare function countLineMatches(cwd: string, files: string[], patterns: RegExp[] | string[], opts?: CountOpts): CountResult;
64
+ export type CommentSyntax = 'slash' | 'hash' | 'none';
65
+ export declare function commentSyntaxFor(relPath: string): CommentSyntax;
66
+ export declare function isCommentLine(rawLine: string, syntax: CommentSyntax): boolean;
67
+ /** Surface the pack-aware `sourceExtensions` for a given packId. Used
68
+ * when callers want to walk one pack's files but bypass the registry. */
69
+ export declare function packSourceExtensions(packId: LanguageId): string[];
70
+ //# sourceMappingURL=walk-source-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk-source-files.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/walk-source-files.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,MAAM,WAAW,QAAQ;IACvB;uDACmD;IACnD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;iDAE6C;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;2BAEuB;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;4EACwE;IACxE,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,wEAAwE;IACxE,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAeD,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,QAAa,GAAG,MAAM,EAAE,CAe1E;AAoJD,MAAM,WAAW,SAAS;IACxB;oDACgD;IAChD,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAEzB;;;;;;;;;6EASyE;IACzE,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAC7B,IAAI,GAAE,SAAc,GACnB,WAAW,CAqDb;AAmBD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAqC/D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAQ7E;AAID;0EAC0E;AAC1E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,CAEjE"}
@@ -0,0 +1,369 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.clearWalkCache = clearWalkCache;
37
+ exports.walkSourceFiles = walkSourceFiles;
38
+ exports.countLineMatches = countLineMatches;
39
+ exports.commentSyntaxFor = commentSyntaxFor;
40
+ exports.isCommentLine = isCommentLine;
41
+ exports.packSourceExtensions = packSourceExtensions;
42
+ /**
43
+ * G_v4_7 (2.4.7) — canonical source-file walker + line-match counter.
44
+ *
45
+ * Every consumer that needs "the list of source files in this repo"
46
+ * routes through `walkSourceFiles`. Every consumer that needs "how
47
+ * many lines match pattern P across source files" routes through
48
+ * `countLineMatches`. ONE walker, ONE counter — replaces the four
49
+ * site-specific implementations that were drifting (D075, D079).
50
+ *
51
+ * NEVER shells out. Pre-fix `grep -rEf <pat> --include=*.js .` on
52
+ * web-client produced 67MB of stdout (matched minified .js content)
53
+ * and silently failed with ENOBUFS — `run()`'s 64MB ceiling truncated
54
+ * to empty string, `consoleLogCount` reported 0 when reality was ~1370
55
+ * (D082/D083). Walking the curated set in JS and scanning each file's
56
+ * lines in-process eliminates the maxBuffer ceiling entirely.
57
+ *
58
+ * Filter pipeline (per file encountered):
59
+ * 1. Directory prune at entry: `isExcludedPath(cwd, relDir)` → never descend.
60
+ * 2. Extension filter (default `allSourceExtensions()`).
61
+ * 3. Path-pattern filter: `isExcludedPath(cwd, relPath)`.
62
+ * 4. Autogen basename glob (`*.designer.cs`, `*.pb.go`, …).
63
+ * 5. Autogen header marker (first 2KB).
64
+ * 6. Test-file filter (skip unless `includeTests: true`).
65
+ * 7. Pack scoping (when `opts.packId` set).
66
+ */
67
+ const fs = __importStar(require("fs"));
68
+ const path = __importStar(require("path"));
69
+ const exclusions_1 = require("./exclusions");
70
+ const autogen_header_1 = require("./autogen-header");
71
+ const minified_detection_1 = require("./minified-detection");
72
+ const languages_1 = require("../../languages");
73
+ /** Cache: one entry per (cwd, opts-fingerprint). Cleared via
74
+ * `clearWalkCache()`. Same memo pattern as `loadExclusions`. */
75
+ const walkCache = new Map();
76
+ function clearWalkCache() {
77
+ walkCache.clear();
78
+ }
79
+ /**
80
+ * Walk the source tree rooted at `cwd` and return relative POSIX paths
81
+ * (no leading `./`) sorted for determinism. Returns `[]` for non-
82
+ * existent or non-directory roots — never throws.
83
+ */
84
+ function walkSourceFiles(cwd, opts = {}) {
85
+ const resolved = resolveOpts(opts);
86
+ const cacheKey = `${cwd}\0${cacheKeyFor(opts)}`;
87
+ const hit = walkCache.get(cacheKey);
88
+ if (hit)
89
+ return hit;
90
+ const out = [];
91
+ try {
92
+ walkDir(cwd, '', resolved, out);
93
+ }
94
+ catch {
95
+ // I/O error mid-walk: surface what we found so far.
96
+ }
97
+ out.sort();
98
+ walkCache.set(cacheKey, out);
99
+ return out;
100
+ }
101
+ function resolveOpts(opts) {
102
+ // Precedence: explicit `extensions` > pack-scoped extensions > all packs.
103
+ let exts;
104
+ if (opts.extensions) {
105
+ exts = opts.extensions;
106
+ }
107
+ else if (opts.packId) {
108
+ exts = (0, languages_1.getLanguage)(opts.packId)?.sourceExtensions ?? [];
109
+ }
110
+ else {
111
+ exts = (0, languages_1.allSourceExtensions)();
112
+ }
113
+ return {
114
+ extensions: new Set(exts.map((e) => (e.startsWith('.') ? e : `.${e}`))),
115
+ includeTests: opts.includeTests ?? false,
116
+ includeAutogen: opts.includeAutogen ?? false,
117
+ respectIgnore: opts.respectIgnore ?? true,
118
+ autogenBasenamePatterns: opts.includeAutogen ? [] : (0, languages_1.allAutogenSourcePatterns)(),
119
+ testFilePatterns: splitTestPatterns((0, languages_1.allTestFilePatterns)()),
120
+ };
121
+ }
122
+ function cacheKeyFor(opts) {
123
+ return JSON.stringify([
124
+ opts.extensions ?? null,
125
+ opts.includeTests ?? false,
126
+ opts.includeAutogen ?? false,
127
+ opts.respectIgnore ?? true,
128
+ opts.packId ?? null,
129
+ ]);
130
+ }
131
+ function walkDir(cwd, relDir, opts, out) {
132
+ const absDir = relDir ? path.join(cwd, relDir) : cwd;
133
+ let entries;
134
+ try {
135
+ entries = fs.readdirSync(absDir, { withFileTypes: true });
136
+ }
137
+ catch {
138
+ return;
139
+ }
140
+ for (const ent of entries) {
141
+ const relPath = relDir ? `${relDir}/${ent.name}` : ent.name;
142
+ if (ent.isDirectory()) {
143
+ // Prune at directory boundary so node_modules/ etc. are never
144
+ // descended into. Massive perf win on minified-JS-heavy repos.
145
+ if (opts.respectIgnore && (0, exclusions_1.isExcludedPath)(cwd, relPath))
146
+ continue;
147
+ // Skip dot-directories ALWAYS (.git, .vscode, .idea, .dxkit…).
148
+ // These rarely appear in `.gitignore` but are universally noise.
149
+ if (ent.name.startsWith('.'))
150
+ continue;
151
+ walkDir(cwd, relPath, opts, out);
152
+ continue;
153
+ }
154
+ if (!ent.isFile())
155
+ continue;
156
+ // Extension gate first (cheap).
157
+ const ext = path.extname(ent.name);
158
+ if (!opts.extensions.has(ext))
159
+ continue;
160
+ // Pack scoping (cheap — done after extension because packId is rare).
161
+ if (opts.respectIgnore && (0, exclusions_1.isExcludedPath)(cwd, relPath))
162
+ continue;
163
+ // Test-file filter.
164
+ if (!opts.includeTests && isTestFile(relPath, ent.name, opts.testFilePatterns))
165
+ continue;
166
+ // Autogen basename glob.
167
+ if (!opts.includeAutogen && matchesAnyBasenameGlob(ent.name, opts.autogenBasenamePatterns)) {
168
+ continue;
169
+ }
170
+ // Autogen header marker (most expensive — reads first 2KB).
171
+ if (!opts.includeAutogen && (0, autogen_header_1.isAutogeneratedByHeader)(path.join(absDir, ent.name)))
172
+ continue;
173
+ // Minified / bundled output detection — catches webpack/vite/esbuild
174
+ // hash-suffixed chunks, CDN-downloaded vendor libs dropped into
175
+ // public/, and pre-minified vendored editors that slip past the
176
+ // standard exclusion list. Same opt-in shape as the autogen
177
+ // checks — `includeAutogen: true` keeps them. Cheap: only fires
178
+ // on .js/.jsx/.mjs/.cjs/.css/.scss/.sass/.less and reads 4KB.
179
+ if (!opts.includeAutogen && (0, minified_detection_1.isLikelyMinified)(path.join(absDir, ent.name)))
180
+ continue;
181
+ out.push(relPath);
182
+ }
183
+ }
184
+ function isTestFile(relPath, basename, patterns) {
185
+ for (const pat of patterns.nameOnly) {
186
+ if (matchesBasenameGlob(pat, basename))
187
+ return true;
188
+ }
189
+ for (const pat of patterns.pathAnchored) {
190
+ // Path-anchored patterns like `tests/*.rs` — match against the
191
+ // relative path. Convert glob to regex (path-segment aware).
192
+ if (matchesPathGlob(pat, relPath))
193
+ return true;
194
+ }
195
+ return false;
196
+ }
197
+ function matchesAnyBasenameGlob(basename, patterns) {
198
+ for (const pat of patterns) {
199
+ if (matchesBasenameGlob(pat, basename))
200
+ return true;
201
+ }
202
+ return false;
203
+ }
204
+ function matchesBasenameGlob(pat, base) {
205
+ if (!pat.includes('*') && !pat.includes('?'))
206
+ return pat === base;
207
+ const regex = globToRegex(pat, false);
208
+ return regex.test(base);
209
+ }
210
+ function matchesPathGlob(pat, relPath) {
211
+ // `tests/*.rs` should match `tests/foo.rs` AND `crate/tests/foo.rs`
212
+ // (path-anchored "anywhere in tree"). Mirrors find's `-path "*/x"`.
213
+ const regex = globToRegex(pat, true);
214
+ return regex.test(relPath);
215
+ }
216
+ function globToRegex(pat, allowSlash) {
217
+ const star = allowSlash ? '.*' : '[^/]*';
218
+ const body = pat
219
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
220
+ .replace(/\*/g, star)
221
+ .replace(/\?/g, allowSlash ? '.' : '[^/]');
222
+ // Path-anchored: allow optional leading directory segments.
223
+ return new RegExp(allowSlash ? `(?:^|/)${body}$` : `^${body}$`, 'i');
224
+ }
225
+ function splitTestPatterns(patterns) {
226
+ const nameOnly = [];
227
+ const pathAnchored = [];
228
+ for (const p of patterns) {
229
+ if (p.includes('/'))
230
+ pathAnchored.push(p);
231
+ else
232
+ nameOnly.push(p);
233
+ }
234
+ return { nameOnly, pathAnchored };
235
+ }
236
+ /**
237
+ * Read each file once, scan in-process. Pass `patterns` as compiled
238
+ * regexes for repeated use, or as strings (compiled here with global
239
+ * flag). Each line is tested against the alternation; multiple
240
+ * patterns are unioned via `RegExp` `|` — pass them pre-merged for
241
+ * best performance.
242
+ */
243
+ function countLineMatches(cwd, files, patterns, opts = {}) {
244
+ const mode = opts.mode ?? 'lines';
245
+ const skipComments = opts.skipComments ?? false;
246
+ const topN = opts.perFileTopN ?? 0;
247
+ const compiled = compilePatterns(patterns);
248
+ if (compiled.length === 0)
249
+ return { lines: 0, files: 0, perFile: [] };
250
+ let totalLines = 0;
251
+ let totalFiles = 0;
252
+ const perFile = [];
253
+ for (const relPath of files) {
254
+ let content;
255
+ try {
256
+ content = fs.readFileSync(path.join(cwd, relPath), 'utf-8');
257
+ }
258
+ catch {
259
+ continue;
260
+ }
261
+ const commentSyntax = skipComments ? commentSyntaxFor(relPath) : null;
262
+ let fileCount = 0;
263
+ for (const rawLine of content.split('\n')) {
264
+ if (commentSyntax && isCommentLine(rawLine, commentSyntax))
265
+ continue;
266
+ let matched = false;
267
+ for (const re of compiled) {
268
+ // Reset lastIndex on `g` flag patterns to avoid stateful skips.
269
+ re.lastIndex = 0;
270
+ if (re.test(rawLine)) {
271
+ matched = true;
272
+ break;
273
+ }
274
+ }
275
+ if (matched)
276
+ fileCount++;
277
+ }
278
+ if (fileCount > 0) {
279
+ totalFiles++;
280
+ totalLines += fileCount;
281
+ if (topN > 0)
282
+ perFile.push({ file: relPath, count: fileCount });
283
+ }
284
+ }
285
+ let topOffenders = [];
286
+ if (topN > 0) {
287
+ perFile.sort((a, b) => b.count - a.count);
288
+ topOffenders = perFile.slice(0, topN);
289
+ }
290
+ return {
291
+ lines: mode === 'lines' ? totalLines : totalFiles,
292
+ files: totalFiles,
293
+ perFile: topOffenders,
294
+ };
295
+ }
296
+ function compilePatterns(patterns) {
297
+ const out = [];
298
+ for (const p of patterns) {
299
+ if (p instanceof RegExp) {
300
+ out.push(p);
301
+ }
302
+ else if (typeof p === 'string' && p.length > 0) {
303
+ try {
304
+ out.push(new RegExp(p));
305
+ }
306
+ catch {
307
+ // Skip un-compilable patterns rather than throwing — matches
308
+ // grep's behaviour of warning and continuing.
309
+ }
310
+ }
311
+ }
312
+ return out;
313
+ }
314
+ function commentSyntaxFor(relPath) {
315
+ const ext = path.extname(relPath).toLowerCase();
316
+ switch (ext) {
317
+ case '.ts':
318
+ case '.tsx':
319
+ case '.js':
320
+ case '.jsx':
321
+ case '.mjs':
322
+ case '.cjs':
323
+ case '.go':
324
+ case '.rs':
325
+ case '.java':
326
+ case '.kt':
327
+ case '.kts':
328
+ case '.cs':
329
+ case '.cpp':
330
+ case '.cxx':
331
+ case '.cc':
332
+ case '.c':
333
+ case '.h':
334
+ case '.hpp':
335
+ case '.swift':
336
+ case '.scala':
337
+ return 'slash';
338
+ case '.py':
339
+ case '.rb':
340
+ case '.sh':
341
+ case '.bash':
342
+ case '.zsh':
343
+ case '.yml':
344
+ case '.yaml':
345
+ case '.toml':
346
+ case '.r':
347
+ return 'hash';
348
+ default:
349
+ return 'none';
350
+ }
351
+ }
352
+ function isCommentLine(rawLine, syntax) {
353
+ if (syntax === 'none')
354
+ return false;
355
+ const trimmed = rawLine.trimStart();
356
+ if (!trimmed)
357
+ return false;
358
+ if (syntax === 'slash') {
359
+ return trimmed.startsWith('//') || trimmed.startsWith('/*') || trimmed.startsWith('*');
360
+ }
361
+ return trimmed.startsWith('#');
362
+ }
363
+ // ─── Re-exports for test convenience ────────────────────────────────────────
364
+ /** Surface the pack-aware `sourceExtensions` for a given packId. Used
365
+ * when callers want to walk one pack's files but bypass the registry. */
366
+ function packSourceExtensions(packId) {
367
+ return (0, languages_1.getLanguage)(packId)?.sourceExtensions ?? [];
368
+ }
369
+ //# sourceMappingURL=walk-source-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk-source-files.js","sourceRoot":"","sources":["../../../src/analyzers/tools/walk-source-files.ts"],"names":[],"mappings":"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"}