codebase-onboarder 0.6.0 → 1.0.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 (526) hide show
  1. package/README.md +284 -53
  2. package/bin/build-if-source.js +23 -0
  3. package/bin/onboarder.js +0 -0
  4. package/cli/agent/command.d.ts +71 -0
  5. package/cli/agent/command.js +177 -0
  6. package/cli/agent/command.js.map +1 -0
  7. package/cli/agent/config.d.ts +31 -0
  8. package/cli/agent/config.js +98 -0
  9. package/cli/agent/config.js.map +1 -0
  10. package/cli/agent/contracts.d.ts +77 -0
  11. package/cli/agent/contracts.js +2 -0
  12. package/cli/agent/contracts.js.map +1 -0
  13. package/cli/agent/files.d.ts +19 -0
  14. package/cli/agent/files.js +109 -0
  15. package/cli/agent/files.js.map +1 -0
  16. package/cli/agent/gitSource.d.ts +18 -0
  17. package/cli/agent/gitSource.js +69 -0
  18. package/cli/agent/gitSource.js.map +1 -0
  19. package/cli/agent/github.d.ts +21 -0
  20. package/cli/agent/github.js +94 -0
  21. package/cli/agent/github.js.map +1 -0
  22. package/cli/agent/mcp.d.ts +15 -0
  23. package/cli/agent/mcp.js +78 -0
  24. package/cli/agent/mcp.js.map +1 -0
  25. package/cli/agent/process.d.ts +18 -0
  26. package/cli/agent/process.js +118 -0
  27. package/cli/agent/process.js.map +1 -0
  28. package/cli/agent/protocol.d.ts +3 -0
  29. package/cli/agent/protocol.js +26 -0
  30. package/cli/agent/protocol.js.map +1 -0
  31. package/cli/agent/runner.d.ts +34 -0
  32. package/cli/agent/runner.js +152 -0
  33. package/cli/agent/runner.js.map +1 -0
  34. package/cli/agent/stdio.d.ts +1 -0
  35. package/cli/agent/stdio.js +62 -0
  36. package/cli/agent/stdio.js.map +1 -0
  37. package/cli/agent/tools.d.ts +7 -0
  38. package/cli/agent/tools.js +201 -0
  39. package/cli/agent/tools.js.map +1 -0
  40. package/cli/chat/app.d.ts +16 -0
  41. package/cli/chat/app.js +345 -0
  42. package/cli/chat/app.js.map +1 -0
  43. package/cli/chat/commands.d.ts +11 -0
  44. package/cli/chat/commands.js +120 -0
  45. package/cli/chat/commands.js.map +1 -0
  46. package/cli/chat/composer.d.ts +75 -0
  47. package/cli/chat/composer.js +467 -0
  48. package/cli/chat/composer.js.map +1 -0
  49. package/cli/chat/controller.d.ts +60 -0
  50. package/cli/chat/controller.js +393 -0
  51. package/cli/chat/controller.js.map +1 -0
  52. package/cli/chat/logo.d.ts +3 -0
  53. package/cli/chat/logo.js +14 -0
  54. package/cli/chat/logo.js.map +1 -0
  55. package/cli/chat/models.d.ts +18 -0
  56. package/cli/chat/models.js +88 -0
  57. package/cli/chat/models.js.map +1 -0
  58. package/cli/chat/profile.d.ts +5 -0
  59. package/cli/chat/profile.js +98 -0
  60. package/cli/chat/profile.js.map +1 -0
  61. package/cli/chat/render.d.ts +40 -0
  62. package/cli/chat/render.js +259 -0
  63. package/cli/chat/render.js.map +1 -0
  64. package/cli/chat/screen.d.ts +26 -0
  65. package/cli/chat/screen.js +117 -0
  66. package/cli/chat/screen.js.map +1 -0
  67. package/cli/chat/source.d.ts +29 -0
  68. package/cli/chat/source.js +116 -0
  69. package/cli/chat/source.js.map +1 -0
  70. package/cli/chat/store.d.ts +43 -0
  71. package/cli/chat/store.js +94 -0
  72. package/cli/chat/store.js.map +1 -0
  73. package/cli/chat/text.d.ts +4 -0
  74. package/cli/chat/text.js +27 -0
  75. package/cli/chat/text.js.map +1 -0
  76. package/cli/commands.d.ts +26 -0
  77. package/cli/commands.js +836 -811
  78. package/cli/commands.js.map +1 -0
  79. package/cli/explorer/advanced.d.ts +14 -0
  80. package/cli/explorer/advanced.js +321 -329
  81. package/cli/explorer/advanced.js.map +1 -0
  82. package/cli/explorer/app.d.ts +2 -0
  83. package/cli/explorer/app.js +404 -314
  84. package/cli/explorer/app.js.map +1 -0
  85. package/cli/explorer/assistant.d.ts +9 -0
  86. package/cli/explorer/assistant.js +58 -0
  87. package/cli/explorer/assistant.js.map +1 -0
  88. package/cli/explorer/commands.d.ts +17 -0
  89. package/cli/explorer/commands.js +373 -302
  90. package/cli/explorer/commands.js.map +1 -0
  91. package/cli/explorer/featureViews.d.ts +124 -0
  92. package/cli/explorer/featureViews.js +179 -0
  93. package/cli/explorer/featureViews.js.map +1 -0
  94. package/cli/explorer/github.d.ts +21 -0
  95. package/cli/explorer/github.js +42 -44
  96. package/cli/explorer/github.js.map +1 -0
  97. package/cli/explorer/graphs.d.ts +7 -0
  98. package/cli/explorer/graphs.js +90 -95
  99. package/cli/explorer/graphs.js.map +1 -0
  100. package/cli/explorer/picker.d.ts +22 -0
  101. package/cli/explorer/picker.js +150 -0
  102. package/cli/explorer/picker.js.map +1 -0
  103. package/cli/explorer/report.d.ts +85 -0
  104. package/cli/explorer/report.js +60 -0
  105. package/cli/explorer/report.js.map +1 -0
  106. package/cli/explorer/session.d.ts +449 -0
  107. package/cli/explorer/session.js +143 -144
  108. package/cli/explorer/session.js.map +1 -0
  109. package/cli/explorer/views.d.ts +19 -0
  110. package/cli/explorer/views.js +465 -482
  111. package/cli/explorer/views.js.map +1 -0
  112. package/cli/explorer/wrap.d.ts +1 -0
  113. package/cli/explorer/wrap.js +28 -44
  114. package/cli/explorer/wrap.js.map +1 -0
  115. package/cli/main.d.ts +1 -0
  116. package/cli/main.js +251 -164
  117. package/cli/main.js.map +1 -0
  118. package/cli/prompt.d.ts +5 -0
  119. package/cli/prompt.js +84 -80
  120. package/cli/prompt.js.map +1 -0
  121. package/cli/scanOptions.d.ts +2 -0
  122. package/cli/scanOptions.js +11 -0
  123. package/cli/scanOptions.js.map +1 -0
  124. package/cli/ui.d.ts +33 -0
  125. package/cli/ui.js +35 -44
  126. package/cli/ui.js.map +1 -0
  127. package/cli/wizard.d.ts +187 -0
  128. package/cli/wizard.js +304 -284
  129. package/cli/wizard.js.map +1 -0
  130. package/docs/HERMES_RESEARCH.md +51 -0
  131. package/package.json +16 -4
  132. package/public/app.d.ts +1 -0
  133. package/public/app.js +1133 -1011
  134. package/public/app.js.map +1 -0
  135. package/public/assets/onboarder-mark.svg +11 -0
  136. package/public/browser.d.ts +71 -0
  137. package/public/browser.js +2 -0
  138. package/public/browser.js.map +1 -0
  139. package/public/index.html +54 -20
  140. package/public/js/about.d.ts +6 -0
  141. package/public/js/about.js +152 -172
  142. package/public/js/about.js.map +1 -0
  143. package/public/js/aiDraft.d.ts +4 -0
  144. package/public/js/aiDraft.js +166 -125
  145. package/public/js/aiDraft.js.map +1 -0
  146. package/public/js/analysisPanel.d.ts +7 -0
  147. package/public/js/analysisPanel.js +166 -166
  148. package/public/js/analysisPanel.js.map +1 -0
  149. package/public/js/analysisReport.d.ts +38 -0
  150. package/public/js/analysisReport.js +105 -110
  151. package/public/js/analysisReport.js.map +1 -0
  152. package/public/js/api.d.ts +29 -0
  153. package/public/js/api.js +198 -166
  154. package/public/js/api.js.map +1 -0
  155. package/public/js/atlas.d.ts +6 -0
  156. package/public/js/atlas.js +50 -58
  157. package/public/js/atlas.js.map +1 -0
  158. package/public/js/blameView.d.ts +2 -0
  159. package/public/js/blameView.js +36 -37
  160. package/public/js/blameView.js.map +1 -0
  161. package/public/js/codeTab.d.ts +3 -0
  162. package/public/js/codeTab.js +175 -180
  163. package/public/js/codeTab.js.map +1 -0
  164. package/public/js/codeViewer.d.ts +5 -0
  165. package/public/js/codeViewer.js +162 -150
  166. package/public/js/codeViewer.js.map +1 -0
  167. package/public/js/components/FileChip.d.ts +9 -0
  168. package/public/js/components/FileChip.js +45 -49
  169. package/public/js/components/FileChip.js.map +1 -0
  170. package/public/js/components/MetricSparkline.d.ts +7 -0
  171. package/public/js/components/MetricSparkline.js +35 -44
  172. package/public/js/components/MetricSparkline.js.map +1 -0
  173. package/public/js/components/RiskBadge.d.ts +9 -0
  174. package/public/js/components/RiskBadge.js +55 -63
  175. package/public/js/components/RiskBadge.js.map +1 -0
  176. package/public/js/deepAnalysisView.d.ts +99 -0
  177. package/public/js/deepAnalysisView.js +282 -302
  178. package/public/js/deepAnalysisView.js.map +1 -0
  179. package/public/js/diagramPane.d.ts +9 -0
  180. package/public/js/diagramPane.js +138 -135
  181. package/public/js/diagramPane.js.map +1 -0
  182. package/public/js/diffView.d.ts +6 -0
  183. package/public/js/diffView.js +222 -209
  184. package/public/js/diffView.js.map +1 -0
  185. package/public/js/docsView.d.ts +2 -0
  186. package/public/js/docsView.js +441 -442
  187. package/public/js/docsView.js.map +1 -0
  188. package/public/js/dom.d.ts +197 -0
  189. package/public/js/dom.js +5 -0
  190. package/public/js/dom.js.map +1 -0
  191. package/public/js/fileSourceBrowser.d.ts +5 -0
  192. package/public/js/fileSourceBrowser.js +33 -41
  193. package/public/js/fileSourceBrowser.js.map +1 -0
  194. package/public/js/flameGraph.d.ts +5 -0
  195. package/public/js/flameGraph.js +62 -72
  196. package/public/js/flameGraph.js.map +1 -0
  197. package/public/js/forceGraph.d.ts +10 -0
  198. package/public/js/forceGraph.js +581 -556
  199. package/public/js/forceGraph.js.map +1 -0
  200. package/public/js/heatmap.d.ts +4 -0
  201. package/public/js/heatmap.js +142 -164
  202. package/public/js/heatmap.js.map +1 -0
  203. package/public/js/highlight.d.ts +2 -0
  204. package/public/js/highlight.js +116 -107
  205. package/public/js/highlight.js.map +1 -0
  206. package/public/js/html.d.ts +2 -0
  207. package/public/js/html.js +14 -44
  208. package/public/js/html.js.map +1 -0
  209. package/public/js/insightsView.d.ts +5 -0
  210. package/public/js/insightsView.js +93 -111
  211. package/public/js/insightsView.js.map +1 -0
  212. package/public/js/inspector.d.ts +37 -0
  213. package/public/js/inspector.js +416 -445
  214. package/public/js/inspector.js.map +1 -0
  215. package/public/js/llm.d.ts +115 -0
  216. package/public/js/llm.js +246 -278
  217. package/public/js/llm.js.map +1 -0
  218. package/public/js/mapView.d.ts +3 -0
  219. package/public/js/mapView.js +121 -120
  220. package/public/js/mapView.js.map +1 -0
  221. package/public/js/markdown.d.ts +3 -0
  222. package/public/js/markdown.js +84 -91
  223. package/public/js/markdown.js.map +1 -0
  224. package/public/js/mindmap.d.ts +32 -0
  225. package/public/js/mindmap.js +244 -259
  226. package/public/js/mindmap.js.map +1 -0
  227. package/public/js/mobilePanels.d.ts +5 -0
  228. package/public/js/mobilePanels.js +50 -0
  229. package/public/js/mobilePanels.js.map +1 -0
  230. package/public/js/repoFiles.d.ts +12 -0
  231. package/public/js/repoFiles.js +29 -28
  232. package/public/js/repoFiles.js.map +1 -0
  233. package/public/js/reviewView.d.ts +28 -0
  234. package/public/js/reviewView.js +256 -0
  235. package/public/js/reviewView.js.map +1 -0
  236. package/public/js/sbomView.d.ts +3 -0
  237. package/public/js/sbomView.js +59 -67
  238. package/public/js/sbomView.js.map +1 -0
  239. package/public/js/scanCache.d.ts +16 -0
  240. package/public/js/scanCache.js +67 -65
  241. package/public/js/scanCache.js.map +1 -0
  242. package/public/js/search.d.ts +7 -0
  243. package/public/js/search.js +868 -800
  244. package/public/js/search.js.map +1 -0
  245. package/public/js/searchLocal.d.ts +42 -0
  246. package/public/js/searchLocal.js +87 -0
  247. package/public/js/searchLocal.js.map +1 -0
  248. package/public/js/serverSettings.d.ts +5 -0
  249. package/public/js/serverSettings.js +153 -164
  250. package/public/js/serverSettings.js.map +1 -0
  251. package/public/js/state.d.ts +798 -0
  252. package/public/js/state.js +114 -122
  253. package/public/js/state.js.map +1 -0
  254. package/public/js/tour.d.ts +6 -0
  255. package/public/js/tour.js +5 -7
  256. package/public/js/tour.js.map +1 -0
  257. package/public/js/transitions.d.ts +2 -0
  258. package/public/js/transitions.js +9 -10
  259. package/public/js/transitions.js.map +1 -0
  260. package/public/js/tree.d.ts +12 -0
  261. package/public/js/tree.js +157 -154
  262. package/public/js/tree.js.map +1 -0
  263. package/public/js/workflowsView.d.ts +3 -0
  264. package/public/js/workflowsView.js +15 -22
  265. package/public/js/workflowsView.js.map +1 -0
  266. package/public/search.css +495 -0
  267. package/public/styles.css +188 -346
  268. package/public/workbench.css +166 -0
  269. package/server/apiAuth.d.ts +3 -0
  270. package/server/apiAuth.js +18 -20
  271. package/server/apiAuth.js.map +1 -0
  272. package/server/apiDiff.d.ts +2 -0
  273. package/server/apiDiff.js +20 -18
  274. package/server/apiDiff.js.map +1 -0
  275. package/server/apiDocs.d.ts +2 -0
  276. package/server/apiDocs.js +38 -40
  277. package/server/apiDocs.js.map +1 -0
  278. package/server/apiFile.d.ts +1 -0
  279. package/server/apiFile.js +14 -17
  280. package/server/apiFile.js.map +1 -0
  281. package/server/apiGitBlame.d.ts +2 -0
  282. package/server/apiGitBlame.js +50 -51
  283. package/server/apiGitBlame.js.map +1 -0
  284. package/server/apiMcp.d.ts +4 -0
  285. package/server/apiMcp.js +64 -66
  286. package/server/apiMcp.js.map +1 -0
  287. package/server/apiReview.d.ts +2 -0
  288. package/server/apiReview.js +45 -0
  289. package/server/apiReview.js.map +1 -0
  290. package/server/apiScan.d.ts +5 -0
  291. package/server/apiScan.js +90 -71
  292. package/server/apiScan.js.map +1 -0
  293. package/server/apiSearch.d.ts +33 -0
  294. package/server/apiSearch.js +184 -200
  295. package/server/apiSearch.js.map +1 -0
  296. package/server/apiSettings.d.ts +4 -0
  297. package/server/apiSettings.js +84 -85
  298. package/server/apiSettings.js.map +1 -0
  299. package/server/apiTools.d.ts +3 -0
  300. package/server/apiTools.js +55 -56
  301. package/server/apiTools.js.map +1 -0
  302. package/server/auth.d.ts +5 -0
  303. package/server/auth.js +54 -51
  304. package/server/auth.js.map +1 -0
  305. package/server/config.d.ts +42 -0
  306. package/server/config.js +189 -194
  307. package/server/config.js.map +1 -0
  308. package/server/daemon.d.ts +12 -0
  309. package/server/daemon.js +124 -114
  310. package/server/daemon.js.map +1 -0
  311. package/server/fileSourceNode.d.ts +2 -0
  312. package/server/fileSourceNode.js +34 -36
  313. package/server/fileSourceNode.js.map +1 -0
  314. package/server/gitClone.d.ts +9 -0
  315. package/server/gitClone.js +59 -61
  316. package/server/gitClone.js.map +1 -0
  317. package/server/gitDiff.d.ts +36 -0
  318. package/server/gitDiff.js +271 -169
  319. package/server/gitDiff.js.map +1 -0
  320. package/server/gitHistory.d.ts +12 -0
  321. package/server/gitHistory.js +80 -80
  322. package/server/gitHistory.js.map +1 -0
  323. package/server/gitRemote.d.ts +12 -0
  324. package/server/gitRemote.js +37 -38
  325. package/server/gitRemote.js.map +1 -0
  326. package/server/hermesChat.d.ts +13 -0
  327. package/server/hermesChat.js +145 -0
  328. package/server/hermesChat.js.map +1 -0
  329. package/server/htmlText.d.ts +4 -0
  330. package/server/htmlText.js +16 -23
  331. package/server/htmlText.js.map +1 -0
  332. package/server/http.d.ts +6 -0
  333. package/server/http.js +27 -34
  334. package/server/http.js.map +1 -0
  335. package/server/httpGuards.d.ts +2 -0
  336. package/server/httpGuards.js +47 -43
  337. package/server/httpGuards.js.map +1 -0
  338. package/server/https.d.ts +34 -0
  339. package/server/https.js +121 -111
  340. package/server/https.js.map +1 -0
  341. package/server/index.d.ts +40 -0
  342. package/server/index.js +139 -147
  343. package/server/index.js.map +1 -0
  344. package/server/layout.d.ts +26 -0
  345. package/server/layout.js +59 -64
  346. package/server/layout.js.map +1 -0
  347. package/server/llmProxy.d.ts +3 -0
  348. package/server/llmProxy.js +137 -135
  349. package/server/llmProxy.js.map +1 -0
  350. package/server/logger.d.ts +38 -0
  351. package/server/logger.js +198 -211
  352. package/server/logger.js.map +1 -0
  353. package/server/mcp/analysis.d.ts +29 -0
  354. package/server/mcp/analysis.js +99 -120
  355. package/server/mcp/analysis.js.map +1 -0
  356. package/server/mcp/http.d.ts +9 -0
  357. package/server/mcp/http.js +128 -137
  358. package/server/mcp/http.js.map +1 -0
  359. package/server/mcp/runner.d.ts +68 -0
  360. package/server/mcp/runner.js +208 -218
  361. package/server/mcp/runner.js.map +1 -0
  362. package/server/mcp/server.d.ts +29 -0
  363. package/server/mcp/server.js +167 -180
  364. package/server/mcp/server.js.map +1 -0
  365. package/server/mcp/standalone.d.ts +1 -0
  366. package/server/mcp/standalone.js +8 -10
  367. package/server/mcp/standalone.js.map +1 -0
  368. package/server/mcp/tools.d.ts +2020 -0
  369. package/server/mcp/tools.js +523 -574
  370. package/server/mcp/tools.js.map +1 -0
  371. package/server/paths.d.ts +3 -0
  372. package/server/paths.js +17 -15
  373. package/server/paths.js.map +1 -0
  374. package/server/pidfile.d.ts +9 -0
  375. package/server/pidfile.js +43 -45
  376. package/server/pidfile.js.map +1 -0
  377. package/server/review.d.ts +5 -0
  378. package/server/review.js +35 -0
  379. package/server/review.js.map +1 -0
  380. package/server/router.d.ts +33 -0
  381. package/server/router.js +195 -197
  382. package/server/router.js.map +1 -0
  383. package/server/scanRequest.d.ts +3 -0
  384. package/server/scanRequest.js +36 -0
  385. package/server/scanRequest.js.map +1 -0
  386. package/server/searchIndex.d.ts +17 -0
  387. package/server/searchIndex.js +83 -80
  388. package/server/searchIndex.js.map +1 -0
  389. package/server/sessions.d.ts +14 -0
  390. package/server/sessions.js +62 -70
  391. package/server/sessions.js.map +1 -0
  392. package/server/startup.d.ts +118 -0
  393. package/server/startup.js +143 -148
  394. package/server/startup.js.map +1 -0
  395. package/server/static.d.ts +6 -0
  396. package/server/static.js +28 -31
  397. package/server/static.js.map +1 -0
  398. package/server/tools/install.d.ts +4 -0
  399. package/server/tools/install.js +176 -185
  400. package/server/tools/install.js.map +1 -0
  401. package/server/tools/parse.d.ts +8 -0
  402. package/server/tools/parse.js +112 -114
  403. package/server/tools/parse.js.map +1 -0
  404. package/server/tools/platform.d.ts +9 -0
  405. package/server/tools/platform.js +49 -47
  406. package/server/tools/platform.js.map +1 -0
  407. package/server/tools/registry.d.ts +137 -0
  408. package/server/tools/registry.js +173 -172
  409. package/server/tools/registry.js.map +1 -0
  410. package/server/tools/scan.d.ts +34 -0
  411. package/server/tools/scan.js +89 -98
  412. package/server/tools/scan.js.map +1 -0
  413. package/server/tools.d.ts +34 -0
  414. package/server/tools.js +94 -107
  415. package/server/tools.js.map +1 -0
  416. package/server/tunnel.d.ts +29 -0
  417. package/server/tunnel.js +61 -66
  418. package/server/tunnel.js.map +1 -0
  419. package/shared/analyzer/docs.d.ts +16 -0
  420. package/shared/analyzer/docs.js +99 -93
  421. package/shared/analyzer/docs.js.map +1 -0
  422. package/shared/analyzer/explainLocal.d.ts +4 -0
  423. package/shared/analyzer/explainLocal.js +122 -142
  424. package/shared/analyzer/explainLocal.js.map +1 -0
  425. package/shared/analyzer/github.d.ts +37 -0
  426. package/shared/analyzer/github.js +41 -43
  427. package/shared/analyzer/github.js.map +1 -0
  428. package/shared/analyzer/graph.d.ts +41 -0
  429. package/shared/analyzer/graph.js +393 -400
  430. package/shared/analyzer/graph.js.map +1 -0
  431. package/shared/analyzer/health.d.ts +33 -0
  432. package/shared/analyzer/health.js +197 -193
  433. package/shared/analyzer/health.js.map +1 -0
  434. package/shared/analyzer/history.d.ts +29 -0
  435. package/shared/analyzer/history.js +110 -111
  436. package/shared/analyzer/history.js.map +1 -0
  437. package/shared/analyzer/jsonConfig.d.ts +2 -0
  438. package/shared/analyzer/jsonConfig.js +61 -0
  439. package/shared/analyzer/jsonConfig.js.map +1 -0
  440. package/shared/analyzer/languages/csharp.d.ts +26 -0
  441. package/shared/analyzer/languages/csharp.js +83 -88
  442. package/shared/analyzer/languages/csharp.js.map +1 -0
  443. package/shared/analyzer/languages/generic.d.ts +23 -0
  444. package/shared/analyzer/languages/generic.js +94 -105
  445. package/shared/analyzer/languages/generic.js.map +1 -0
  446. package/shared/analyzer/languages/go.d.ts +24 -0
  447. package/shared/analyzer/languages/go.js +45 -54
  448. package/shared/analyzer/languages/go.js.map +1 -0
  449. package/shared/analyzer/languages/index.d.ts +6 -0
  450. package/shared/analyzer/languages/index.js +19 -20
  451. package/shared/analyzer/languages/index.js.map +1 -0
  452. package/shared/analyzer/languages/java.d.ts +20 -0
  453. package/shared/analyzer/languages/java.js +73 -78
  454. package/shared/analyzer/languages/java.js.map +1 -0
  455. package/shared/analyzer/languages/javascript.d.ts +12 -0
  456. package/shared/analyzer/languages/javascript.js +258 -209
  457. package/shared/analyzer/languages/javascript.js.map +1 -0
  458. package/shared/analyzer/languages/python.d.ts +23 -0
  459. package/shared/analyzer/languages/python.js +92 -100
  460. package/shared/analyzer/languages/python.js.map +1 -0
  461. package/shared/analyzer/languages/rust.d.ts +17 -0
  462. package/shared/analyzer/languages/rust.js +96 -98
  463. package/shared/analyzer/languages/rust.js.map +1 -0
  464. package/shared/analyzer/languages/typescript.d.ts +11 -0
  465. package/shared/analyzer/languages/typescript.js +117 -116
  466. package/shared/analyzer/languages/typescript.js.map +1 -0
  467. package/shared/analyzer/licenses.d.ts +18 -0
  468. package/shared/analyzer/licenses.js +130 -133
  469. package/shared/analyzer/licenses.js.map +1 -0
  470. package/shared/analyzer/metrics.d.ts +20 -0
  471. package/shared/analyzer/metrics.js +112 -104
  472. package/shared/analyzer/metrics.js.map +1 -0
  473. package/shared/analyzer/pathUtil.d.ts +10 -0
  474. package/shared/analyzer/pathUtil.js +29 -35
  475. package/shared/analyzer/pathUtil.js.map +1 -0
  476. package/shared/analyzer/patterns.d.ts +11 -0
  477. package/shared/analyzer/patterns.js +231 -253
  478. package/shared/analyzer/patterns.js.map +1 -0
  479. package/shared/analyzer/scan.d.ts +62 -0
  480. package/shared/analyzer/scan.js +451 -442
  481. package/shared/analyzer/scan.js.map +1 -0
  482. package/shared/analyzer/scanControl.d.ts +11 -0
  483. package/shared/analyzer/scanControl.js +62 -0
  484. package/shared/analyzer/scanControl.js.map +1 -0
  485. package/shared/analyzer/security.d.ts +18 -0
  486. package/shared/analyzer/security.js +159 -159
  487. package/shared/analyzer/security.js.map +1 -0
  488. package/shared/analyzer/services.d.ts +5 -0
  489. package/shared/analyzer/services.js +141 -138
  490. package/shared/analyzer/services.js.map +1 -0
  491. package/shared/analyzer/stack.d.ts +6 -0
  492. package/shared/analyzer/stack.js +134 -141
  493. package/shared/analyzer/stack.js.map +1 -0
  494. package/shared/analyzer/tour.d.ts +2 -0
  495. package/shared/analyzer/tour.js +45 -53
  496. package/shared/analyzer/tour.js.map +1 -0
  497. package/shared/analyzer/util.d.ts +8 -0
  498. package/shared/analyzer/util.js +130 -76
  499. package/shared/analyzer/util.js.map +1 -0
  500. package/shared/analyzer/workflows.d.ts +8 -0
  501. package/shared/analyzer/workflows.js +139 -134
  502. package/shared/analyzer/workflows.js.map +1 -0
  503. package/shared/contracts.d.ts +250 -0
  504. package/shared/contracts.js +2 -0
  505. package/shared/contracts.js.map +1 -0
  506. package/shared/diagram/aiFacts.d.ts +35 -0
  507. package/shared/diagram/aiFacts.js +102 -105
  508. package/shared/diagram/aiFacts.js.map +1 -0
  509. package/shared/diagram/aiMermaid.d.ts +5 -0
  510. package/shared/diagram/aiMermaid.js +50 -46
  511. package/shared/diagram/aiMermaid.js.map +1 -0
  512. package/shared/diagram/atlas.d.ts +16 -0
  513. package/shared/diagram/atlas.js +51 -60
  514. package/shared/diagram/atlas.js.map +1 -0
  515. package/shared/diagram/mermaid.d.ts +43 -0
  516. package/shared/diagram/mermaid.js +348 -370
  517. package/shared/diagram/mermaid.js.map +1 -0
  518. package/shared/review/contracts.d.ts +95 -0
  519. package/shared/review/contracts.js +2 -0
  520. package/shared/review/contracts.js.map +1 -0
  521. package/shared/review/review.d.ts +10 -0
  522. package/shared/review/review.js +184 -0
  523. package/shared/review/review.js.map +1 -0
  524. package/shared/search/query.d.ts +32 -0
  525. package/shared/search/query.js +395 -388
  526. package/shared/search/query.js.map +1 -0
@@ -0,0 +1,20 @@
1
+ export declare function codeStats(source: any, lang?: string): {
2
+ lines: number;
3
+ code: number;
4
+ comment: number;
5
+ blank: number;
6
+ };
7
+ export declare function complexityOf(source: any, lang: any): number;
8
+ export declare function halsteadMetrics(source: any, lang: any): {
9
+ n1: number;
10
+ n2: number;
11
+ N1: number;
12
+ N2: number;
13
+ vocabulary: number;
14
+ length: number;
15
+ volume: number;
16
+ difficulty: number;
17
+ effort: number;
18
+ };
19
+ export declare function cognitiveComplexity(source: any, lang: any): number;
20
+ export declare function maintainabilityIndex(halstead: any, complexity: any, loc: any): number;
@@ -1,120 +1,128 @@
1
1
  import { blankComments } from './util.js';
2
-
3
2
  const DECISIONS = {
4
- javascript: /\b(if|for|while|case|catch|do|else if)\b/g,
5
- python: /\b(if|elif|for|while|except)\b/g,
6
- go: /\b(if|for|case|go|select)\b/g,
3
+ javascript: /\b(if|for|while|case|catch|do|else if)\b/g,
4
+ python: /\b(if|elif|for|while|except)\b/g,
5
+ go: /\b(if|for|case|go|select)\b/g,
7
6
  };
8
7
  const GENERIC = /\b(if|elif|for|while|case|catch|except|switch)\b/g;
9
-
10
8
  export function codeStats(source, lang = '') {
11
- const lines = String(source).split('\n');
12
- let blank = 0;
13
- let comment = 0;
14
- let code = 0;
15
- let inBlock = false;
16
- const isHashComment = ['python', 'ruby', 'yaml', 'toml', 'shell', 'bash', 'sh'].includes(lang)
17
- || (!lang && (source.includes('#!') || /\b(def|import|class)\b/.test(source)));
18
-
19
- for (const raw of lines) {
20
- const l = raw.trim();
21
- if (!l) { blank++; continue; }
22
- if (inBlock) { comment++; if (l.includes('*/')) inBlock = false; continue; }
23
- if (l.startsWith('//') || (isHashComment && l.startsWith('#'))) { comment++; continue; }
24
- if (l.startsWith('/*')) { comment++; if (!l.includes('*/')) inBlock = true; continue; }
25
- code++;
26
- }
27
- return { lines: lines.length, code, comment, blank };
9
+ const lines = String(source).split('\n');
10
+ let blank = 0;
11
+ let comment = 0;
12
+ let code = 0;
13
+ let inBlock = false;
14
+ const isHashComment = ['python', 'ruby', 'yaml', 'toml', 'shell', 'bash', 'sh'].includes(lang)
15
+ || (!lang && (source.includes('#!') || /\b(def|import|class)\b/.test(source)));
16
+ for (const raw of lines) {
17
+ const l = raw.trim();
18
+ if (!l) {
19
+ blank++;
20
+ continue;
21
+ }
22
+ if (inBlock) {
23
+ comment++;
24
+ if (l.includes('*/'))
25
+ inBlock = false;
26
+ continue;
27
+ }
28
+ if (l.startsWith('//') || (isHashComment && l.startsWith('#'))) {
29
+ comment++;
30
+ continue;
31
+ }
32
+ if (l.startsWith('/*')) {
33
+ comment++;
34
+ if (!l.includes('*/'))
35
+ inBlock = true;
36
+ continue;
37
+ }
38
+ code++;
39
+ }
40
+ return { lines: lines.length, code, comment, blank };
28
41
  }
29
-
30
42
  export function complexityOf(source, lang) {
31
- const isHash = ['python', 'ruby', 'yaml', 'toml', 'shell'].includes(lang);
32
- const clean = blankComments(String(source), { lineChar: isHash ? '#' : '//' });
33
- const rx = DECISIONS[lang] || GENERIC;
34
- let score = 1;
35
- const decisions = clean.match(rx);
36
- score += decisions ? decisions.length : 0;
37
- const bools = clean.match(/&&|\|\||\?/g); // boolean ops + ternaries
38
- score += bools ? bools.length : 0;
39
- return score;
43
+ const isHash = ['python', 'ruby', 'yaml', 'toml', 'shell'].includes(lang);
44
+ const clean = blankComments(String(source), { lineChar: isHash ? '#' : '//' });
45
+ const rx = DECISIONS[lang] || GENERIC;
46
+ let score = 1;
47
+ const decisions = clean.match(rx);
48
+ score += decisions ? decisions.length : 0;
49
+ const bools = clean.match(/&&|\|\||\?/g); // boolean ops + ternaries
50
+ score += bools ? bools.length : 0;
51
+ return score;
40
52
  }
41
-
42
53
  export function halsteadMetrics(source, lang) {
43
- const isHash = ['python', 'ruby', 'yaml', 'toml', 'shell'].includes(lang);
44
- const clean = blankComments(String(source), { lineChar: isHash ? '#' : '//' });
45
-
46
- const ops = ['\+', '-', '\*', '/', '=', '==', '===', '!=', '!==', '<', '>', '<=', '>=', '&&', '\|\|', '!', '%', '\*\*', '\+\+', '--', '\+=', '-=', '\*=', '/=', '=>', '\?\?', '\?\.', '\.\.\.'];
47
- const opPattern = new RegExp(ops.map(o => o.replace(/[.*+?^$\\{}()|[\]\\]/g, '\\$&')).join('|'), 'g');
48
-
49
- const operators = new Set();
50
- let N1 = 0;
51
- for (const m of clean.matchAll(opPattern)) {
52
- operators.add(m[0]);
53
- N1++;
54
- }
55
- const n1 = operators.size;
56
-
57
- const operands = new Set();
58
- let N2 = 0;
59
- for (const m of clean.matchAll(/\b[a-zA-Z_][a-zA-Z0-9_]*\b|\b\d+\b|['"][^'"]*['"]/g)) {
60
- const val = m[0];
61
- if (["if", "else", "for", "while", "return", "function", "class", "import", "export", "var", "let", "const", "true", "false", "null"].includes(val)) continue;
62
- operands.add(val);
63
- N2++;
64
- }
65
- const n2 = operands.size;
66
-
67
- const vocabulary = n1 + n2;
68
- const length = N1 + N2;
69
- const volume = vocabulary === 0 ? 0 : length * Math.log2(vocabulary);
70
- const difficulty = (n2 === 0 || n1 === 0) ? 0 : (n1 / 2) * (N2 / n2);
71
- const effort = difficulty * volume;
72
-
73
- return { n1, n2, N1, N2, vocabulary, length, volume, difficulty, effort };
54
+ const isHash = ['python', 'ruby', 'yaml', 'toml', 'shell'].includes(lang);
55
+ const clean = blankComments(String(source), { lineChar: isHash ? '#' : '//' });
56
+ const ops = ['\+', '-', '\*', '/', '=', '==', '===', '!=', '!==', '<', '>', '<=', '>=', '&&', '\|\|', '!', '%', '\*\*', '\+\+', '--', '\+=', '-=', '\*=', '/=', '=>', '\?\?', '\?\.', '\.\.\.'];
57
+ const opPattern = new RegExp(ops.map(o => o.replace(/[.*+?^$\\{}()|[\]\\]/g, '\\$&')).join('|'), 'g');
58
+ const operators = new Set();
59
+ let N1 = 0;
60
+ for (const m of clean.matchAll(opPattern)) {
61
+ operators.add(m[0]);
62
+ N1++;
63
+ }
64
+ const n1 = operators.size;
65
+ const operands = new Set();
66
+ let N2 = 0;
67
+ for (const m of clean.matchAll(/\b[a-zA-Z_][a-zA-Z0-9_]*\b|\b\d+\b|['"][^'"]*['"]/g)) {
68
+ const val = m[0];
69
+ if (["if", "else", "for", "while", "return", "function", "class", "import", "export", "var", "let", "const", "true", "false", "null"].includes(val))
70
+ continue;
71
+ operands.add(val);
72
+ N2++;
73
+ }
74
+ const n2 = operands.size;
75
+ const vocabulary = n1 + n2;
76
+ const length = N1 + N2;
77
+ const volume = vocabulary === 0 ? 0 : length * Math.log2(vocabulary);
78
+ const difficulty = (n2 === 0 || n1 === 0) ? 0 : (n1 / 2) * (N2 / n2);
79
+ const effort = difficulty * volume;
80
+ return { n1, n2, N1, N2, vocabulary, length, volume, difficulty, effort };
74
81
  }
75
-
76
82
  export function cognitiveComplexity(source, lang) {
77
- const isHash = ['python', 'ruby', 'yaml', 'toml', 'shell'].includes(lang);
78
- const clean = blankComments(String(source), { lineChar: isHash ? '#' : '//' });
79
-
80
- let score = 0;
81
- let nesting = 0;
82
- let inSwitch = false;
83
-
84
- const lines = clean.split('\n');
85
- for (const line of lines) {
86
- const l = line.trim();
87
- if (l.includes('{')) {
88
- if (/\b(if|for|while|do|switch|catch)\b/.test(l)) {
89
- if (/\bswitch\b/.test(l)) {
90
- inSwitch = true;
91
- score += (1 + nesting);
92
- nesting++;
93
- } else {
94
- score += (1 + nesting);
95
- nesting++;
83
+ const isHash = ['python', 'ruby', 'yaml', 'toml', 'shell'].includes(lang);
84
+ const clean = blankComments(String(source), { lineChar: isHash ? '#' : '//' });
85
+ let score = 0;
86
+ let nesting = 0;
87
+ let inSwitch = false;
88
+ const lines = clean.split('\n');
89
+ for (const line of lines) {
90
+ const l = line.trim();
91
+ if (l.includes('{')) {
92
+ if (/\b(if|for|while|do|switch|catch)\b/.test(l)) {
93
+ if (/\bswitch\b/.test(l)) {
94
+ inSwitch = true;
95
+ score += (1 + nesting);
96
+ nesting++;
97
+ }
98
+ else {
99
+ score += (1 + nesting);
100
+ nesting++;
101
+ }
102
+ }
103
+ else {
104
+ nesting++;
105
+ }
96
106
  }
97
- } else {
98
- nesting++;
99
- }
100
- }
101
- if (l.includes('}')) {
102
- nesting = Math.max(0, nesting - 1);
103
- }
104
- if (!l.includes('{') && /\b(if|else if|for|while|do|catch)\b/.test(l)) {
105
- score += (1 + nesting);
106
- }
107
- if (/\belse\b(?!\s+if)/.test(l)) {
108
- score += 1;
107
+ if (l.includes('}')) {
108
+ nesting = Math.max(0, nesting - 1);
109
+ }
110
+ if (!l.includes('{') && /\b(if|else if|for|while|do|catch)\b/.test(l)) {
111
+ score += (1 + nesting);
112
+ }
113
+ if (/\belse\b(?!\s+if)/.test(l)) {
114
+ score += 1;
115
+ }
116
+ const ops = l.match(/&&|\|\||\?/g);
117
+ if (ops)
118
+ score += ops.length;
109
119
  }
110
- const ops = l.match(/&&|\|\||\?/g);
111
- if (ops) score += ops.length;
112
- }
113
- return score;
120
+ return score;
114
121
  }
115
-
116
122
  export function maintainabilityIndex(halstead, complexity, loc) {
117
- if (halstead.volume === 0 || loc === 0) return 100;
118
- let MI = (171 - 5.2 * Math.log(halstead.volume) - 0.23 * complexity - 16.2 * Math.log(loc)) * 100 / 171;
119
- return Math.max(0, Math.min(100, MI));
123
+ if (halstead.volume === 0 || loc === 0)
124
+ return 100;
125
+ let MI = (171 - 5.2 * Math.log(halstead.volume) - 0.23 * complexity - 16.2 * Math.log(loc)) * 100 / 171;
126
+ return Math.max(0, Math.min(100, MI));
120
127
  }
128
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/shared/analyzer/metrics.ts"],"names":[],"mappings":"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","sourcesContent":["import { blankComments } from './util.js';\n\nconst DECISIONS = {\n javascript: /\\b(if|for|while|case|catch|do|else if)\\b/g,\n python: /\\b(if|elif|for|while|except)\\b/g,\n go: /\\b(if|for|case|go|select)\\b/g,\n};\nconst GENERIC = /\\b(if|elif|for|while|case|catch|except|switch)\\b/g;\n\nexport function codeStats(source, lang = '') {\n const lines = String(source).split('\\n');\n let blank = 0;\n let comment = 0;\n let code = 0;\n let inBlock = false;\n const isHashComment = ['python', 'ruby', 'yaml', 'toml', 'shell', 'bash', 'sh'].includes(lang)\n || (!lang && (source.includes('#!') || /\\b(def|import|class)\\b/.test(source)));\n\n for (const raw of lines) {\n const l = raw.trim();\n if (!l) { blank++; continue; }\n if (inBlock) { comment++; if (l.includes('*/')) inBlock = false; continue; }\n if (l.startsWith('//') || (isHashComment && l.startsWith('#'))) { comment++; continue; }\n if (l.startsWith('/*')) { comment++; if (!l.includes('*/')) inBlock = true; continue; }\n code++;\n }\n return { lines: lines.length, code, comment, blank };\n}\n\nexport function complexityOf(source, lang) {\n const isHash = ['python', 'ruby', 'yaml', 'toml', 'shell'].includes(lang);\n const clean = blankComments(String(source), { lineChar: isHash ? '#' : '//' });\n const rx = DECISIONS[lang] || GENERIC;\n let score = 1;\n const decisions = clean.match(rx);\n score += decisions ? decisions.length : 0;\n const bools = clean.match(/&&|\\|\\||\\?/g); // boolean ops + ternaries\n score += bools ? bools.length : 0;\n return score;\n}\n\nexport function halsteadMetrics(source, lang) {\n const isHash = ['python', 'ruby', 'yaml', 'toml', 'shell'].includes(lang);\n const clean = blankComments(String(source), { lineChar: isHash ? '#' : '//' });\n \n const ops = ['\\+', '-', '\\*', '/', '=', '==', '===', '!=', '!==', '<', '>', '<=', '>=', '&&', '\\|\\|', '!', '%', '\\*\\*', '\\+\\+', '--', '\\+=', '-=', '\\*=', '/=', '=>', '\\?\\?', '\\?\\.', '\\.\\.\\.'];\n const opPattern = new RegExp(ops.map(o => o.replace(/[.*+?^$\\\\{}()|[\\]\\\\]/g, '\\\\$&')).join('|'), 'g');\n \n const operators = new Set();\n let N1 = 0;\n for (const m of clean.matchAll(opPattern)) {\n operators.add(m[0]);\n N1++;\n }\n const n1 = operators.size;\n\n const operands = new Set();\n let N2 = 0;\n for (const m of clean.matchAll(/\\b[a-zA-Z_][a-zA-Z0-9_]*\\b|\\b\\d+\\b|['\"][^'\"]*['\"]/g)) {\n const val = m[0];\n if ([\"if\", \"else\", \"for\", \"while\", \"return\", \"function\", \"class\", \"import\", \"export\", \"var\", \"let\", \"const\", \"true\", \"false\", \"null\"].includes(val)) continue;\n operands.add(val);\n N2++;\n }\n const n2 = operands.size;\n\n const vocabulary = n1 + n2;\n const length = N1 + N2;\n const volume = vocabulary === 0 ? 0 : length * Math.log2(vocabulary);\n const difficulty = (n2 === 0 || n1 === 0) ? 0 : (n1 / 2) * (N2 / n2);\n const effort = difficulty * volume;\n\n return { n1, n2, N1, N2, vocabulary, length, volume, difficulty, effort };\n}\n\nexport function cognitiveComplexity(source, lang) {\n const isHash = ['python', 'ruby', 'yaml', 'toml', 'shell'].includes(lang);\n const clean = blankComments(String(source), { lineChar: isHash ? '#' : '//' });\n \n let score = 0;\n let nesting = 0;\n let inSwitch = false;\n\n const lines = clean.split('\\n');\n for (const line of lines) {\n const l = line.trim();\n if (l.includes('{')) {\n if (/\\b(if|for|while|do|switch|catch)\\b/.test(l)) {\n if (/\\bswitch\\b/.test(l)) {\n inSwitch = true;\n score += (1 + nesting);\n nesting++;\n } else {\n score += (1 + nesting);\n nesting++;\n }\n } else {\n nesting++;\n }\n }\n if (l.includes('}')) {\n nesting = Math.max(0, nesting - 1);\n }\n if (!l.includes('{') && /\\b(if|else if|for|while|do|catch)\\b/.test(l)) {\n score += (1 + nesting);\n }\n if (/\\belse\\b(?!\\s+if)/.test(l)) {\n score += 1;\n }\n const ops = l.match(/&&|\\|\\||\\?/g);\n if (ops) score += ops.length;\n }\n return score;\n}\n\nexport function maintainabilityIndex(halstead, complexity, loc) {\n if (halstead.volume === 0 || loc === 0) return 100;\n let MI = (171 - 5.2 * Math.log(halstead.volume) - 0.23 * complexity - 16.2 * Math.log(loc)) * 100 / 171;\n return Math.max(0, Math.min(100, MI));\n}\n"]}
@@ -0,0 +1,10 @@
1
+ export declare function normalize(path: any): string;
2
+ export declare function joinPath(...parts: any[]): string;
3
+ export declare function dirOf(path: any): any;
4
+ export declare function baseName(path: any): any;
5
+ export declare function extOf(path: any): any;
6
+ export declare function depthOf(path: any): any;
7
+ export declare function topFolderOf(path: any): any;
8
+ export declare const TEST_PATH_RE: RegExp;
9
+ export declare function isTestPath(path: any): boolean;
10
+ export declare function pathFilter({ text, showTests }?: Record<string, any>): (p: any) => any;
@@ -1,50 +1,44 @@
1
1
  // Repo-relative path helpers. Everything here is POSIX-style with forward
2
2
  // slashes, no leading slash, no trailing slash. Both file source adapters
3
3
  // normalize to this convention before the analyzer sees a path.
4
-
5
4
  export function normalize(path) {
6
- const out = [];
7
- for (const part of String(path).split('/')) {
8
- if (!part || part === '.') continue;
9
- if (part === '..') {
10
- out.pop();
11
- continue;
5
+ const out = [];
6
+ for (const part of String(path).split('/')) {
7
+ if (!part || part === '.')
8
+ continue;
9
+ if (part === '..') {
10
+ out.pop();
11
+ continue;
12
+ }
13
+ out.push(part);
12
14
  }
13
- out.push(part);
14
- }
15
- return out.join('/');
15
+ return out.join('/');
16
16
  }
17
-
18
17
  export function joinPath(...parts) {
19
- return normalize(parts.filter(Boolean).join('/'));
18
+ return normalize(parts.filter(Boolean).join('/'));
20
19
  }
21
-
22
20
  export function dirOf(path) {
23
- const i = path.lastIndexOf('/');
24
- return i === -1 ? '' : path.slice(0, i);
21
+ const i = path.lastIndexOf('/');
22
+ return i === -1 ? '' : path.slice(0, i);
25
23
  }
26
-
27
24
  export function baseName(path) {
28
- const i = path.lastIndexOf('/');
29
- return path.slice(i + 1);
25
+ const i = path.lastIndexOf('/');
26
+ return path.slice(i + 1);
30
27
  }
31
-
32
28
  export function extOf(path) {
33
- const base = baseName(path);
34
- const i = base.lastIndexOf('.');
35
- return i <= 0 ? '' : base.slice(i).toLowerCase();
29
+ const base = baseName(path);
30
+ const i = base.lastIndexOf('.');
31
+ return i <= 0 ? '' : base.slice(i).toLowerCase();
36
32
  }
37
-
38
33
  export function depthOf(path) {
39
- if (!path) return 0;
40
- return path.split('/').length;
34
+ if (!path)
35
+ return 0;
36
+ return path.split('/').length;
41
37
  }
42
-
43
38
  export function topFolderOf(path) {
44
- const i = path.indexOf('/');
45
- return i === -1 ? '(root)' : path.slice(0, i);
39
+ const i = path.indexOf('/');
40
+ return i === -1 ? '(root)' : path.slice(0, i);
46
41
  }
47
-
48
42
  // Does this path look like a test? Naming, not content — there is no reliable
49
43
  // way to tell from a path alone, and every repo names them differently. The
50
44
  // alternatives are bounded by the separators: `foo.test.js`, `foo_spec.rb`,
@@ -52,18 +46,18 @@ export function topFolderOf(path) {
52
46
  // (`contest.js`, `latest.md`, `protester.go`) must not match, which is what the
53
47
  // separator groups on either side are for.
54
48
  export const TEST_PATH_RE = /(^|[._\-/])(test|tests|spec|specs|__tests__|__test__)([._\-/]|$)/i;
55
-
56
49
  export function isTestPath(path) {
57
- return TEST_PATH_RE.test(path);
50
+ return TEST_PATH_RE.test(path);
58
51
  }
59
-
60
52
  // The stage filters, as a predicate over paths — or null when nothing is being
61
53
  // filtered at all. Null rather than `() => true` on purpose: every diagram
62
54
  // builder takes an `include` option and skips the whole filtering pass when it is
63
55
  // absent, so the common case costs nothing. Callers must keep treating a missing
64
56
  // filter as "everything", not as "nothing".
65
57
  export function pathFilter({ text = '', showTests = true } = {}) {
66
- const needle = text.trim().toLowerCase();
67
- if (!needle && showTests) return null;
68
- return (p) => (showTests || !isTestPath(p)) && (!needle || p.toLowerCase().includes(needle));
58
+ const needle = text.trim().toLowerCase();
59
+ if (!needle && showTests)
60
+ return null;
61
+ return (p) => (showTests || !isTestPath(p)) && (!needle || p.toLowerCase().includes(needle));
69
62
  }
63
+ //# sourceMappingURL=pathUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathUtil.js","sourceRoot":"","sources":["../../src/shared/analyzer/pathUtil.ts"],"names":[],"mappings":"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","sourcesContent":["// Repo-relative path helpers. Everything here is POSIX-style with forward\n// slashes, no leading slash, no trailing slash. Both file source adapters\n// normalize to this convention before the analyzer sees a path.\n\nexport function normalize(path) {\n const out = [];\n for (const part of String(path).split('/')) {\n if (!part || part === '.') continue;\n if (part === '..') {\n out.pop();\n continue;\n }\n out.push(part);\n }\n return out.join('/');\n}\n\nexport function joinPath(...parts) {\n return normalize(parts.filter(Boolean).join('/'));\n}\n\nexport function dirOf(path) {\n const i = path.lastIndexOf('/');\n return i === -1 ? '' : path.slice(0, i);\n}\n\nexport function baseName(path) {\n const i = path.lastIndexOf('/');\n return path.slice(i + 1);\n}\n\nexport function extOf(path) {\n const base = baseName(path);\n const i = base.lastIndexOf('.');\n return i <= 0 ? '' : base.slice(i).toLowerCase();\n}\n\nexport function depthOf(path) {\n if (!path) return 0;\n return path.split('/').length;\n}\n\nexport function topFolderOf(path) {\n const i = path.indexOf('/');\n return i === -1 ? '(root)' : path.slice(0, i);\n}\n\n// Does this path look like a test? Naming, not content — there is no reliable\n// way to tell from a path alone, and every repo names them differently. The\n// alternatives are bounded by the separators: `foo.test.js`, `foo_spec.rb`,\n// `tests/foo.py`, `__tests__/foo.jsx`. A word merely *containing* \"test\"\n// (`contest.js`, `latest.md`, `protester.go`) must not match, which is what the\n// separator groups on either side are for.\nexport const TEST_PATH_RE = /(^|[._\\-/])(test|tests|spec|specs|__tests__|__test__)([._\\-/]|$)/i;\n\nexport function isTestPath(path) {\n return TEST_PATH_RE.test(path);\n}\n\n// The stage filters, as a predicate over paths — or null when nothing is being\n// filtered at all. Null rather than `() => true` on purpose: every diagram\n// builder takes an `include` option and skips the whole filtering pass when it is\n// absent, so the common case costs nothing. Callers must keep treating a missing\n// filter as \"everything\", not as \"nothing\".\nexport function pathFilter({ text = '', showTests = true }: Record<string, any> = {}) {\n const needle = text.trim().toLowerCase();\n if (!needle && showTests) return null;\n return (p) => (showTests || !isTestPath(p)) && (!needle || p.toLowerCase().includes(needle));\n}\n"]}
@@ -0,0 +1,11 @@
1
+ export declare function computeLayers(scan: any, facts: any): {
2
+ layers: any[];
3
+ unreachable: any;
4
+ seeds: any;
5
+ };
6
+ export declare function detectPatterns(scan: any, facts: any, manifest: any, layersInfo: any): any[];
7
+ export declare function couplingMatrix(scan: any, facts: any, maxFolders?: number): {
8
+ folders: any[];
9
+ counts: Map<any, any>;
10
+ max: number;
11
+ };