kirograph 0.17.0 → 0.20.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 (815) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +105 -1822
  3. package/dist/architecture/layers/dart.d.ts +10 -0
  4. package/dist/architecture/layers/dart.d.ts.map +1 -0
  5. package/dist/architecture/layers/dart.js +112 -0
  6. package/dist/architecture/layers/dart.js.map +7 -0
  7. package/dist/architecture/layers/elixir.d.ts +6 -0
  8. package/dist/architecture/layers/elixir.d.ts.map +1 -0
  9. package/dist/architecture/layers/index.d.ts.map +1 -1
  10. package/dist/architecture/layers/index.js +3 -1
  11. package/dist/architecture/layers/index.js.map +2 -2
  12. package/dist/architecture/layers/ocaml.d.ts +6 -0
  13. package/dist/architecture/layers/ocaml.d.ts.map +1 -0
  14. package/dist/architecture/layers/scala.d.ts +6 -0
  15. package/dist/architecture/layers/scala.d.ts.map +1 -0
  16. package/dist/architecture/layers/solidity.d.ts +6 -0
  17. package/dist/architecture/layers/solidity.d.ts.map +1 -0
  18. package/dist/architecture/layers/vue.d.ts +6 -0
  19. package/dist/architecture/layers/vue.d.ts.map +1 -0
  20. package/dist/architecture/manifest/elm.d.ts +3 -0
  21. package/dist/architecture/manifest/elm.d.ts.map +1 -0
  22. package/dist/architecture/manifest/index.d.ts.map +1 -1
  23. package/dist/architecture/manifest/ocaml.d.ts +3 -0
  24. package/dist/architecture/manifest/ocaml.d.ts.map +1 -0
  25. package/dist/architecture/manifest/scala.d.ts +3 -0
  26. package/dist/architecture/manifest/scala.d.ts.map +1 -0
  27. package/dist/bin/banner.d.ts.map +1 -1
  28. package/dist/bin/banner.js +74 -6
  29. package/dist/bin/banner.js.map +2 -2
  30. package/dist/bin/commands/affected.d.ts.map +1 -1
  31. package/dist/bin/commands/attack-surface.d.ts +3 -0
  32. package/dist/bin/commands/attack-surface.d.ts.map +1 -0
  33. package/dist/bin/commands/attack-surface.js +164 -0
  34. package/dist/bin/commands/attack-surface.js.map +7 -0
  35. package/dist/bin/commands/benchmark.d.ts +9 -0
  36. package/dist/bin/commands/benchmark.d.ts.map +1 -0
  37. package/dist/bin/commands/benchmark.js +206 -0
  38. package/dist/bin/commands/benchmark.js.map +7 -0
  39. package/dist/bin/commands/budget.d.ts +6 -0
  40. package/dist/bin/commands/budget.d.ts.map +1 -0
  41. package/dist/bin/commands/budget.js +70 -0
  42. package/dist/bin/commands/budget.js.map +7 -0
  43. package/dist/bin/commands/caveman.d.ts +7 -0
  44. package/dist/bin/commands/caveman.d.ts.map +1 -0
  45. package/dist/bin/commands/communities.d.ts +3 -0
  46. package/dist/bin/commands/communities.d.ts.map +1 -0
  47. package/dist/bin/commands/communities.js +77 -0
  48. package/dist/bin/commands/communities.js.map +7 -0
  49. package/dist/bin/commands/compression.d.ts +7 -0
  50. package/dist/bin/commands/compression.d.ts.map +1 -0
  51. package/dist/bin/commands/context.d.ts.map +1 -1
  52. package/dist/bin/commands/data.d.ts +3 -0
  53. package/dist/bin/commands/data.d.ts.map +1 -0
  54. package/dist/bin/commands/dead-code.d.ts +3 -0
  55. package/dist/bin/commands/dead-code.d.ts.map +1 -0
  56. package/dist/bin/commands/dep-confusion.d.ts +3 -0
  57. package/dist/bin/commands/dep-confusion.d.ts.map +1 -0
  58. package/dist/bin/commands/dep-confusion.js +119 -0
  59. package/dist/bin/commands/dep-confusion.js.map +7 -0
  60. package/dist/bin/commands/docs.d.ts +3 -0
  61. package/dist/bin/commands/docs.d.ts.map +1 -0
  62. package/dist/bin/commands/exec.d.ts +11 -0
  63. package/dist/bin/commands/exec.d.ts.map +1 -0
  64. package/dist/bin/commands/export.d.ts +3 -0
  65. package/dist/bin/commands/export.d.ts.map +1 -0
  66. package/dist/bin/commands/export.js +304 -10
  67. package/dist/bin/commands/export.js.map +2 -2
  68. package/dist/bin/commands/flows.d.ts +3 -0
  69. package/dist/bin/commands/flows.d.ts.map +1 -0
  70. package/dist/bin/commands/flows.js +97 -0
  71. package/dist/bin/commands/flows.js.map +7 -0
  72. package/dist/bin/commands/gain.d.ts +6 -0
  73. package/dist/bin/commands/gain.d.ts.map +1 -0
  74. package/dist/bin/commands/help.d.ts +7 -0
  75. package/dist/bin/commands/help.d.ts.map +1 -1
  76. package/dist/bin/commands/help.js +399 -101
  77. package/dist/bin/commands/help.js.map +2 -2
  78. package/dist/bin/commands/hotspots.d.ts +3 -0
  79. package/dist/bin/commands/hotspots.d.ts.map +1 -0
  80. package/dist/bin/commands/hotspots.js +94 -1
  81. package/dist/bin/commands/hotspots.js.map +3 -3
  82. package/dist/bin/commands/install.d.ts.map +1 -1
  83. package/dist/bin/commands/install.js +90 -8
  84. package/dist/bin/commands/install.js.map +2 -2
  85. package/dist/bin/commands/licenses.d.ts +3 -0
  86. package/dist/bin/commands/licenses.d.ts.map +1 -0
  87. package/dist/bin/commands/licenses.js +201 -0
  88. package/dist/bin/commands/licenses.js.map +7 -0
  89. package/dist/bin/commands/memory.d.ts +16 -0
  90. package/dist/bin/commands/memory.d.ts.map +1 -0
  91. package/dist/bin/commands/memory.js +151 -4
  92. package/dist/bin/commands/memory.js.map +2 -2
  93. package/dist/bin/commands/path.d.ts +3 -0
  94. package/dist/bin/commands/path.d.ts.map +1 -0
  95. package/dist/bin/commands/pattern.d.ts +3 -0
  96. package/dist/bin/commands/pattern.d.ts.map +1 -0
  97. package/dist/bin/commands/pattern.js +592 -0
  98. package/dist/bin/commands/pattern.js.map +7 -0
  99. package/dist/bin/commands/query.d.ts.map +1 -1
  100. package/dist/bin/commands/reachability.d.ts +3 -0
  101. package/dist/bin/commands/reachability.d.ts.map +1 -0
  102. package/dist/bin/commands/reachability.js +160 -0
  103. package/dist/bin/commands/reachability.js.map +7 -0
  104. package/dist/bin/commands/read.d.ts +6 -0
  105. package/dist/bin/commands/read.d.ts.map +1 -0
  106. package/dist/bin/commands/read.js +100 -0
  107. package/dist/bin/commands/read.js.map +7 -0
  108. package/dist/bin/commands/refactor.d.ts +3 -0
  109. package/dist/bin/commands/refactor.d.ts.map +1 -0
  110. package/dist/bin/commands/refactor.js +116 -0
  111. package/dist/bin/commands/refactor.js.map +7 -0
  112. package/dist/bin/commands/remediation.d.ts +3 -0
  113. package/dist/bin/commands/remediation.d.ts.map +1 -0
  114. package/dist/bin/commands/remediation.js +133 -0
  115. package/dist/bin/commands/remediation.js.map +7 -0
  116. package/dist/bin/commands/sbom.d.ts +3 -0
  117. package/dist/bin/commands/sbom.d.ts.map +1 -0
  118. package/dist/bin/commands/sbom.js +76 -0
  119. package/dist/bin/commands/sbom.js.map +7 -0
  120. package/dist/bin/commands/security-ci-report.d.ts +9 -0
  121. package/dist/bin/commands/security-ci-report.d.ts.map +1 -0
  122. package/dist/bin/commands/security-ci-report.js +267 -0
  123. package/dist/bin/commands/security-ci-report.js.map +7 -0
  124. package/dist/bin/commands/security-export.d.ts +2 -0
  125. package/dist/bin/commands/security-export.d.ts.map +1 -0
  126. package/dist/bin/commands/security-export.js +1349 -0
  127. package/dist/bin/commands/security-export.js.map +7 -0
  128. package/dist/bin/commands/security-flows.d.ts +3 -0
  129. package/dist/bin/commands/security-flows.d.ts.map +1 -0
  130. package/dist/bin/commands/security-flows.js +126 -0
  131. package/dist/bin/commands/security-flows.js.map +7 -0
  132. package/dist/bin/commands/security-secrets.d.ts +3 -0
  133. package/dist/bin/commands/security-secrets.d.ts.map +1 -0
  134. package/dist/bin/commands/security-secrets.js +170 -0
  135. package/dist/bin/commands/security-secrets.js.map +7 -0
  136. package/dist/bin/commands/security.d.ts +3 -0
  137. package/dist/bin/commands/security.d.ts.map +1 -0
  138. package/dist/bin/commands/security.js +208 -0
  139. package/dist/bin/commands/security.js.map +7 -0
  140. package/dist/bin/commands/snapshot.d.ts +3 -0
  141. package/dist/bin/commands/snapshot.d.ts.map +1 -0
  142. package/dist/bin/commands/staleness.d.ts +3 -0
  143. package/dist/bin/commands/staleness.d.ts.map +1 -0
  144. package/dist/bin/commands/staleness.js +144 -0
  145. package/dist/bin/commands/staleness.js.map +7 -0
  146. package/dist/bin/commands/status.d.ts.map +1 -1
  147. package/dist/bin/commands/status.js +129 -2
  148. package/dist/bin/commands/status.js.map +2 -2
  149. package/dist/bin/commands/supply-chain.d.ts +3 -0
  150. package/dist/bin/commands/supply-chain.d.ts.map +1 -0
  151. package/dist/bin/commands/supply-chain.js +138 -0
  152. package/dist/bin/commands/supply-chain.js.map +7 -0
  153. package/dist/bin/commands/surprising.d.ts +3 -0
  154. package/dist/bin/commands/surprising.d.ts.map +1 -0
  155. package/dist/bin/commands/sync.d.ts.map +1 -1
  156. package/dist/bin/commands/uninit.d.ts.map +1 -1
  157. package/dist/bin/commands/uninit.js +109 -60
  158. package/dist/bin/commands/uninit.js.map +2 -2
  159. package/dist/bin/commands/utils.d.ts +5 -0
  160. package/dist/bin/commands/utils.d.ts.map +1 -1
  161. package/dist/bin/commands/vex.d.ts +3 -0
  162. package/dist/bin/commands/vex.d.ts.map +1 -0
  163. package/dist/bin/commands/vex.js +76 -0
  164. package/dist/bin/commands/vex.js.map +7 -0
  165. package/dist/bin/commands/vuln-suppress.d.ts +3 -0
  166. package/dist/bin/commands/vuln-suppress.d.ts.map +1 -0
  167. package/dist/bin/commands/vuln-suppress.js +95 -0
  168. package/dist/bin/commands/vuln-suppress.js.map +7 -0
  169. package/dist/bin/commands/vulns.d.ts +3 -0
  170. package/dist/bin/commands/vulns.d.ts.map +1 -0
  171. package/dist/bin/commands/vulns.js +382 -0
  172. package/dist/bin/commands/vulns.js.map +7 -0
  173. package/dist/bin/installer/archive.d.ts +47 -0
  174. package/dist/bin/installer/archive.d.ts.map +1 -0
  175. package/dist/bin/installer/auto-detect.d.ts +16 -0
  176. package/dist/bin/installer/auto-detect.d.ts.map +1 -0
  177. package/dist/bin/installer/auto-detect.js +125 -0
  178. package/dist/bin/installer/auto-detect.js.map +7 -0
  179. package/dist/bin/installer/caveman.d.ts +12 -0
  180. package/dist/bin/installer/caveman.d.ts.map +1 -0
  181. package/dist/bin/installer/cli-agent.d.ts +7 -2
  182. package/dist/bin/installer/cli-agent.d.ts.map +1 -1
  183. package/dist/bin/installer/cli-agent.js +32 -5
  184. package/dist/bin/installer/cli-agent.js.map +2 -2
  185. package/dist/bin/installer/common.d.ts +36 -0
  186. package/dist/bin/installer/common.d.ts.map +1 -0
  187. package/dist/bin/installer/common.js +48 -0
  188. package/dist/bin/installer/common.js.map +2 -2
  189. package/dist/bin/installer/config-prompt.d.ts +1 -1
  190. package/dist/bin/installer/config-prompt.d.ts.map +1 -1
  191. package/dist/bin/installer/config-prompt.js +85 -2
  192. package/dist/bin/installer/config-prompt.js.map +2 -2
  193. package/dist/bin/installer/dashboard.d.ts.map +1 -1
  194. package/dist/bin/installer/detect.d.ts +30 -0
  195. package/dist/bin/installer/detect.d.ts.map +1 -0
  196. package/dist/bin/installer/detect.js +309 -0
  197. package/dist/bin/installer/detect.js.map +7 -0
  198. package/dist/bin/installer/hooks.d.ts +4 -1
  199. package/dist/bin/installer/hooks.d.ts.map +1 -1
  200. package/dist/bin/installer/hooks.js +34 -0
  201. package/dist/bin/installer/hooks.js.map +2 -2
  202. package/dist/bin/installer/index.d.ts +5 -4
  203. package/dist/bin/installer/index.d.ts.map +1 -1
  204. package/dist/bin/installer/index.js +46 -8
  205. package/dist/bin/installer/index.js.map +2 -2
  206. package/dist/bin/installer/instructions.d.ts +14 -0
  207. package/dist/bin/installer/instructions.d.ts.map +1 -0
  208. package/dist/bin/installer/instructions.js +209 -3
  209. package/dist/bin/installer/instructions.js.map +2 -2
  210. package/dist/bin/installer/mcp.d.ts.map +1 -1
  211. package/dist/bin/installer/prompts.d.ts +17 -0
  212. package/dist/bin/installer/prompts.d.ts.map +1 -1
  213. package/dist/bin/installer/qdrant-dashboard.d.ts.map +1 -1
  214. package/dist/bin/installer/steering.d.ts +14 -2
  215. package/dist/bin/installer/steering.d.ts.map +1 -1
  216. package/dist/bin/installer/steering.js +488 -0
  217. package/dist/bin/installer/steering.js.map +2 -2
  218. package/dist/bin/installer/targets/aider.d.ts +6 -0
  219. package/dist/bin/installer/targets/aider.d.ts.map +1 -0
  220. package/dist/bin/installer/targets/aider.js +3 -3
  221. package/dist/bin/installer/targets/aider.js.map +2 -2
  222. package/dist/bin/installer/targets/amp.d.ts +6 -0
  223. package/dist/bin/installer/targets/amp.d.ts.map +1 -0
  224. package/dist/bin/installer/targets/amp.js +3 -3
  225. package/dist/bin/installer/targets/amp.js.map +2 -2
  226. package/dist/bin/installer/targets/antigravity.d.ts +13 -0
  227. package/dist/bin/installer/targets/antigravity.d.ts.map +1 -0
  228. package/dist/bin/installer/targets/antigravity.js +35 -6
  229. package/dist/bin/installer/targets/antigravity.js.map +2 -2
  230. package/dist/bin/installer/targets/augment.d.ts +6 -0
  231. package/dist/bin/installer/targets/augment.d.ts.map +1 -0
  232. package/dist/bin/installer/targets/augment.js +3 -3
  233. package/dist/bin/installer/targets/augment.js.map +2 -2
  234. package/dist/bin/installer/targets/claude.d.ts +6 -0
  235. package/dist/bin/installer/targets/claude.d.ts.map +1 -0
  236. package/dist/bin/installer/targets/claude.js +49 -5
  237. package/dist/bin/installer/targets/claude.js.map +2 -2
  238. package/dist/bin/installer/targets/cline.d.ts +13 -0
  239. package/dist/bin/installer/targets/cline.d.ts.map +1 -0
  240. package/dist/bin/installer/targets/cline.js +32 -6
  241. package/dist/bin/installer/targets/cline.js.map +2 -2
  242. package/dist/bin/installer/targets/codex.d.ts +6 -0
  243. package/dist/bin/installer/targets/codex.d.ts.map +1 -0
  244. package/dist/bin/installer/targets/codex.js +64 -12
  245. package/dist/bin/installer/targets/codex.js.map +2 -2
  246. package/dist/bin/installer/targets/continue.d.ts +12 -0
  247. package/dist/bin/installer/targets/continue.d.ts.map +1 -0
  248. package/dist/bin/installer/targets/continue.js +2 -2
  249. package/dist/bin/installer/targets/continue.js.map +2 -2
  250. package/dist/bin/installer/targets/copilot-cli.d.ts +12 -0
  251. package/dist/bin/installer/targets/copilot-cli.d.ts.map +1 -0
  252. package/dist/bin/installer/targets/copilot-cli.js +101 -0
  253. package/dist/bin/installer/targets/copilot-cli.js.map +7 -0
  254. package/dist/bin/installer/targets/copilot.d.ts +6 -0
  255. package/dist/bin/installer/targets/copilot.d.ts.map +1 -0
  256. package/dist/bin/installer/targets/copilot.js +31 -5
  257. package/dist/bin/installer/targets/copilot.js.map +2 -2
  258. package/dist/bin/installer/targets/cursor.d.ts +6 -0
  259. package/dist/bin/installer/targets/cursor.d.ts.map +1 -0
  260. package/dist/bin/installer/targets/cursor.js +4 -4
  261. package/dist/bin/installer/targets/cursor.js.map +2 -2
  262. package/dist/bin/installer/targets/devin.d.ts +13 -0
  263. package/dist/bin/installer/targets/devin.d.ts.map +1 -0
  264. package/dist/bin/installer/targets/devin.js +2 -2
  265. package/dist/bin/installer/targets/devin.js.map +2 -2
  266. package/dist/bin/installer/targets/gemini-cli.d.ts +16 -0
  267. package/dist/bin/installer/targets/gemini-cli.d.ts.map +1 -0
  268. package/dist/bin/installer/targets/gemini-cli.js +2 -2
  269. package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
  270. package/dist/bin/installer/targets/generic.d.ts +59 -0
  271. package/dist/bin/installer/targets/generic.d.ts.map +1 -0
  272. package/dist/bin/installer/targets/generic.js +2 -14
  273. package/dist/bin/installer/targets/generic.js.map +2 -2
  274. package/dist/bin/installer/targets/goose.d.ts +6 -0
  275. package/dist/bin/installer/targets/goose.d.ts.map +1 -0
  276. package/dist/bin/installer/targets/goose.js +3 -3
  277. package/dist/bin/installer/targets/goose.js.map +2 -2
  278. package/dist/bin/installer/targets/index.d.ts +11 -0
  279. package/dist/bin/installer/targets/index.d.ts.map +1 -0
  280. package/dist/bin/installer/targets/index.js +250 -0
  281. package/dist/bin/installer/targets/index.js.map +2 -2
  282. package/dist/bin/installer/targets/junie.d.ts +13 -0
  283. package/dist/bin/installer/targets/junie.d.ts.map +1 -0
  284. package/dist/bin/installer/targets/junie.js +2 -2
  285. package/dist/bin/installer/targets/junie.js.map +2 -2
  286. package/dist/bin/installer/targets/kilo.d.ts +12 -0
  287. package/dist/bin/installer/targets/kilo.d.ts.map +1 -0
  288. package/dist/bin/installer/targets/kilo.js +2 -2
  289. package/dist/bin/installer/targets/kilo.js.map +2 -2
  290. package/dist/bin/installer/targets/kiro.d.ts +5 -0
  291. package/dist/bin/installer/targets/kiro.d.ts.map +1 -0
  292. package/dist/bin/installer/targets/kiro.js +4 -4
  293. package/dist/bin/installer/targets/kiro.js.map +2 -2
  294. package/dist/bin/installer/targets/opencode.d.ts +13 -0
  295. package/dist/bin/installer/targets/opencode.d.ts.map +1 -0
  296. package/dist/bin/installer/targets/opencode.js +2 -2
  297. package/dist/bin/installer/targets/opencode.js.map +2 -2
  298. package/dist/bin/installer/targets/openhands.d.ts +6 -0
  299. package/dist/bin/installer/targets/openhands.d.ts.map +1 -0
  300. package/dist/bin/installer/targets/openhands.js +3 -3
  301. package/dist/bin/installer/targets/openhands.js.map +2 -2
  302. package/dist/bin/installer/targets/qoder.d.ts +12 -0
  303. package/dist/bin/installer/targets/qoder.d.ts.map +1 -0
  304. package/dist/bin/installer/targets/qoder.js +91 -0
  305. package/dist/bin/installer/targets/qoder.js.map +7 -0
  306. package/dist/bin/installer/targets/qwen.d.ts +12 -0
  307. package/dist/bin/installer/targets/qwen.d.ts.map +1 -0
  308. package/dist/bin/installer/targets/qwen.js +96 -0
  309. package/dist/bin/installer/targets/qwen.js.map +7 -0
  310. package/dist/bin/installer/targets/replit.d.ts +6 -0
  311. package/dist/bin/installer/targets/replit.d.ts.map +1 -0
  312. package/dist/bin/installer/targets/replit.js +3 -3
  313. package/dist/bin/installer/targets/replit.js.map +2 -2
  314. package/dist/bin/installer/targets/roo.d.ts +13 -0
  315. package/dist/bin/installer/targets/roo.d.ts.map +1 -0
  316. package/dist/bin/installer/targets/roo.js +2 -2
  317. package/dist/bin/installer/targets/roo.js.map +2 -2
  318. package/dist/bin/installer/targets/tabnine.d.ts +6 -0
  319. package/dist/bin/installer/targets/tabnine.d.ts.map +1 -0
  320. package/dist/bin/installer/targets/tabnine.js +3 -3
  321. package/dist/bin/installer/targets/tabnine.js.map +2 -2
  322. package/dist/bin/installer/targets/trae.d.ts +6 -0
  323. package/dist/bin/installer/targets/trae.d.ts.map +1 -0
  324. package/dist/bin/installer/targets/trae.js +5 -5
  325. package/dist/bin/installer/targets/trae.js.map +2 -2
  326. package/dist/bin/installer/targets/warp.d.ts +12 -0
  327. package/dist/bin/installer/targets/warp.d.ts.map +1 -0
  328. package/dist/bin/installer/targets/warp.js +2 -2
  329. package/dist/bin/installer/targets/warp.js.map +2 -2
  330. package/dist/bin/installer/targets/windsurf.d.ts +13 -0
  331. package/dist/bin/installer/targets/windsurf.d.ts.map +1 -0
  332. package/dist/bin/installer/targets/windsurf.js +35 -6
  333. package/dist/bin/installer/targets/windsurf.js.map +2 -2
  334. package/dist/bin/kirograph.js +74 -6
  335. package/dist/bin/kirograph.js.map +3 -3
  336. package/dist/bin/progress.d.ts +16 -1
  337. package/dist/bin/progress.d.ts.map +1 -1
  338. package/dist/compression/filters/aws.d.ts +9 -0
  339. package/dist/compression/filters/aws.d.ts.map +1 -0
  340. package/dist/compression/filters/docker.d.ts +6 -0
  341. package/dist/compression/filters/docker.d.ts.map +1 -0
  342. package/dist/compression/filters/files.d.ts +6 -0
  343. package/dist/compression/filters/files.d.ts.map +1 -0
  344. package/dist/compression/filters/generic.d.ts +7 -0
  345. package/dist/compression/filters/generic.d.ts.map +1 -0
  346. package/dist/compression/filters/git.d.ts +6 -0
  347. package/dist/compression/filters/git.d.ts.map +1 -0
  348. package/dist/compression/filters/github.d.ts +6 -0
  349. package/dist/compression/filters/github.d.ts.map +1 -0
  350. package/dist/compression/filters/lint.d.ts +6 -0
  351. package/dist/compression/filters/lint.d.ts.map +1 -0
  352. package/dist/compression/filters/misc.d.ts +6 -0
  353. package/dist/compression/filters/misc.d.ts.map +1 -0
  354. package/dist/compression/filters/package.d.ts +6 -0
  355. package/dist/compression/filters/package.d.ts.map +1 -0
  356. package/dist/compression/filters/test.d.ts +6 -0
  357. package/dist/compression/filters/test.d.ts.map +1 -0
  358. package/dist/compression/index.d.ts +29 -0
  359. package/dist/compression/index.d.ts.map +1 -0
  360. package/dist/compression/naive-cost.d.ts +26 -0
  361. package/dist/compression/naive-cost.d.ts.map +1 -0
  362. package/dist/compression/tracker.d.ts +155 -0
  363. package/dist/compression/tracker.d.ts.map +1 -0
  364. package/dist/compression/tracker.js +80 -0
  365. package/dist/compression/tracker.js.map +2 -2
  366. package/dist/compression/types.d.ts +49 -0
  367. package/dist/compression/types.d.ts.map +1 -0
  368. package/dist/config.d.ts +90 -0
  369. package/dist/config.d.ts.map +1 -1
  370. package/dist/config.js +144 -3
  371. package/dist/config.js.map +2 -2
  372. package/dist/core/lock-manager.d.ts +2 -0
  373. package/dist/core/lock-manager.d.ts.map +1 -1
  374. package/dist/core/pipeline.d.ts +4 -1
  375. package/dist/core/pipeline.d.ts.map +1 -1
  376. package/dist/core/pipeline.js +78 -2
  377. package/dist/core/pipeline.js.map +2 -2
  378. package/dist/core/snapshot.d.ts +58 -0
  379. package/dist/core/snapshot.d.ts.map +1 -0
  380. package/dist/data/filters.d.ts +23 -0
  381. package/dist/data/filters.d.ts.map +1 -0
  382. package/dist/data/indexer.d.ts +25 -0
  383. package/dist/data/indexer.d.ts.map +1 -0
  384. package/dist/data/linker.d.ts +37 -0
  385. package/dist/data/linker.d.ts.map +1 -0
  386. package/dist/data/lint.d.ts +27 -0
  387. package/dist/data/lint.d.ts.map +1 -0
  388. package/dist/data/parsers/csv.d.ts +11 -0
  389. package/dist/data/parsers/csv.d.ts.map +1 -0
  390. package/dist/data/parsers/excel.d.ts +10 -0
  391. package/dist/data/parsers/excel.d.ts.map +1 -0
  392. package/dist/data/parsers/index.d.ts +28 -0
  393. package/dist/data/parsers/index.d.ts.map +1 -0
  394. package/dist/data/parsers/json-array.d.ts +9 -0
  395. package/dist/data/parsers/json-array.d.ts.map +1 -0
  396. package/dist/data/parsers/jsonl.d.ts +9 -0
  397. package/dist/data/parsers/jsonl.d.ts.map +1 -0
  398. package/dist/data/parsers/parquet.d.ts +10 -0
  399. package/dist/data/parsers/parquet.d.ts.map +1 -0
  400. package/dist/data/profiler.d.ts +29 -0
  401. package/dist/data/profiler.d.ts.map +1 -0
  402. package/dist/data/queries.d.ts +95 -0
  403. package/dist/data/queries.d.ts.map +1 -0
  404. package/dist/data/types.d.ts +103 -0
  405. package/dist/data/types.d.ts.map +1 -0
  406. package/dist/db/database.d.ts +57 -0
  407. package/dist/db/database.d.ts.map +1 -1
  408. package/dist/db/database.js +75 -5
  409. package/dist/db/database.js.map +2 -2
  410. package/dist/db/memory-schema.sql +5 -1
  411. package/dist/db/patterns-schema.sql +23 -0
  412. package/dist/db/schema.sql +3 -1
  413. package/dist/db/security-schema.sql +72 -0
  414. package/dist/docs/formats/asciidoc.d.ts +9 -0
  415. package/dist/docs/formats/asciidoc.d.ts.map +1 -0
  416. package/dist/docs/formats/html.d.ts +10 -0
  417. package/dist/docs/formats/html.d.ts.map +1 -0
  418. package/dist/docs/formats/index.d.ts +31 -0
  419. package/dist/docs/formats/index.d.ts.map +1 -0
  420. package/dist/docs/formats/markdown.d.ts +11 -0
  421. package/dist/docs/formats/markdown.d.ts.map +1 -0
  422. package/dist/docs/formats/openapi.d.ts +17 -0
  423. package/dist/docs/formats/openapi.d.ts.map +1 -0
  424. package/dist/docs/formats/org.d.ts +9 -0
  425. package/dist/docs/formats/org.d.ts.map +1 -0
  426. package/dist/docs/formats/plaintext.d.ts +11 -0
  427. package/dist/docs/formats/plaintext.d.ts.map +1 -0
  428. package/dist/docs/formats/rdoc.d.ts +10 -0
  429. package/dist/docs/formats/rdoc.d.ts.map +1 -0
  430. package/dist/docs/formats/rst.d.ts +11 -0
  431. package/dist/docs/formats/rst.d.ts.map +1 -0
  432. package/dist/docs/indexer.d.ts +49 -0
  433. package/dist/docs/indexer.d.ts.map +1 -0
  434. package/dist/docs/linker.d.ts +30 -0
  435. package/dist/docs/linker.d.ts.map +1 -0
  436. package/dist/docs/lint.d.ts +27 -0
  437. package/dist/docs/lint.d.ts.map +1 -0
  438. package/dist/docs/queries.d.ts +78 -0
  439. package/dist/docs/queries.d.ts.map +1 -0
  440. package/dist/docs/section-id.d.ts +48 -0
  441. package/dist/docs/section-id.d.ts.map +1 -0
  442. package/dist/docs/summarizer.d.ts +13 -0
  443. package/dist/docs/summarizer.d.ts.map +1 -0
  444. package/dist/docs/types.d.ts +71 -0
  445. package/dist/docs/types.d.ts.map +1 -0
  446. package/dist/docs/vectors.d.ts +54 -0
  447. package/dist/docs/vectors.d.ts.map +1 -0
  448. package/dist/extraction/extractor.d.ts +1 -1
  449. package/dist/extraction/extractor.d.ts.map +1 -1
  450. package/dist/extraction/extractor.js +81 -0
  451. package/dist/extraction/extractor.js.map +2 -2
  452. package/dist/extraction/grammars.d.ts +6 -0
  453. package/dist/extraction/grammars.d.ts.map +1 -1
  454. package/dist/extraction/grammars.js +32 -8
  455. package/dist/extraction/grammars.js.map +2 -2
  456. package/dist/extraction/languages.d.ts.map +1 -1
  457. package/dist/extraction/languages.js +43 -1
  458. package/dist/extraction/languages.js.map +2 -2
  459. package/dist/extraction/notebook.d.ts +14 -0
  460. package/dist/extraction/notebook.d.ts.map +1 -0
  461. package/dist/extraction/notebook.js +300 -0
  462. package/dist/extraction/notebook.js.map +7 -0
  463. package/dist/extraction/wasm/tree-sitter-astro.wasm +0 -0
  464. package/dist/extraction/wasm/tree-sitter-gdscript.wasm +0 -0
  465. package/dist/extraction/wasm/tree-sitter-julia.wasm +0 -0
  466. package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  467. package/dist/extraction/wasm/tree-sitter-perl.wasm +0 -0
  468. package/dist/extraction/wasm/tree-sitter-powershell.wasm +0 -0
  469. package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
  470. package/dist/extraction/wasm/tree-sitter-sql.wasm +0 -0
  471. package/dist/extraction/wasm/tree-sitter-verilog.wasm +0 -0
  472. package/dist/frameworks/amplify.d.ts +9 -0
  473. package/dist/frameworks/amplify.d.ts.map +1 -0
  474. package/dist/frameworks/angular.d.ts +9 -0
  475. package/dist/frameworks/angular.d.ts.map +1 -0
  476. package/dist/frameworks/ansible.d.ts +8 -0
  477. package/dist/frameworks/ansible.d.ts.map +1 -0
  478. package/dist/frameworks/cloudformation.d.ts +9 -0
  479. package/dist/frameworks/cloudformation.d.ts.map +1 -0
  480. package/dist/frameworks/docker.d.ts +9 -0
  481. package/dist/frameworks/docker.d.ts.map +1 -0
  482. package/dist/frameworks/elixir.d.ts +6 -0
  483. package/dist/frameworks/elixir.d.ts.map +1 -0
  484. package/dist/frameworks/flutter.d.ts +12 -0
  485. package/dist/frameworks/flutter.d.ts.map +1 -0
  486. package/dist/frameworks/flutter.js +130 -0
  487. package/dist/frameworks/flutter.js.map +7 -0
  488. package/dist/frameworks/iac.d.ts +10 -0
  489. package/dist/frameworks/iac.d.ts.map +1 -0
  490. package/dist/frameworks/index.d.ts +14 -0
  491. package/dist/frameworks/index.d.ts.map +1 -1
  492. package/dist/frameworks/index.js +7 -1
  493. package/dist/frameworks/index.js.map +3 -3
  494. package/dist/frameworks/kubernetes.d.ts +9 -0
  495. package/dist/frameworks/kubernetes.d.ts.map +1 -0
  496. package/dist/frameworks/pulumi.d.ts +9 -0
  497. package/dist/frameworks/pulumi.d.ts.map +1 -0
  498. package/dist/frameworks/scala.d.ts +6 -0
  499. package/dist/frameworks/scala.d.ts.map +1 -0
  500. package/dist/frameworks/solidity.d.ts +6 -0
  501. package/dist/frameworks/solidity.d.ts.map +1 -0
  502. package/dist/frameworks/terraform.d.ts +14 -0
  503. package/dist/frameworks/terraform.d.ts.map +1 -0
  504. package/dist/frameworks/vue.d.ts +7 -0
  505. package/dist/frameworks/vue.d.ts.map +1 -0
  506. package/dist/graph/communities.d.ts +43 -0
  507. package/dist/graph/communities.d.ts.map +1 -0
  508. package/dist/graph/communities.js +317 -0
  509. package/dist/graph/communities.js.map +7 -0
  510. package/dist/graph/flows.d.ts +55 -0
  511. package/dist/graph/flows.d.ts.map +1 -0
  512. package/dist/graph/flows.js +138 -0
  513. package/dist/graph/flows.js.map +7 -0
  514. package/dist/graph/refactor.d.ts +43 -0
  515. package/dist/graph/refactor.d.ts.map +1 -0
  516. package/dist/graph/refactor.js +155 -0
  517. package/dist/graph/refactor.js.map +7 -0
  518. package/dist/index.d.ts +36 -4
  519. package/dist/index.d.ts.map +1 -1
  520. package/dist/index.js +1 -1
  521. package/dist/index.js.map +2 -2
  522. package/dist/mcp/cache.d.ts +69 -0
  523. package/dist/mcp/cache.d.ts.map +1 -0
  524. package/dist/mcp/cache.js +172 -0
  525. package/dist/mcp/cache.js.map +7 -0
  526. package/dist/mcp/read-modes.d.ts +31 -0
  527. package/dist/mcp/read-modes.d.ts.map +1 -0
  528. package/dist/mcp/read-modes.js +295 -0
  529. package/dist/mcp/read-modes.js.map +7 -0
  530. package/dist/mcp/server.d.ts +1 -0
  531. package/dist/mcp/server.d.ts.map +1 -1
  532. package/dist/mcp/server.js +17 -3
  533. package/dist/mcp/server.js.map +2 -2
  534. package/dist/mcp/tool-names.d.ts +2 -0
  535. package/dist/mcp/tool-names.d.ts.map +1 -0
  536. package/dist/mcp/tool-names.js +24 -1
  537. package/dist/mcp/tool-names.js.map +2 -2
  538. package/dist/mcp/tools.d.ts +12 -0
  539. package/dist/mcp/tools.d.ts.map +1 -1
  540. package/dist/mcp/tools.js +1560 -4
  541. package/dist/mcp/tools.js.map +3 -3
  542. package/dist/memory/compress.d.ts +19 -0
  543. package/dist/memory/compress.d.ts.map +1 -0
  544. package/dist/memory/database.d.ts +92 -0
  545. package/dist/memory/database.d.ts.map +1 -0
  546. package/dist/memory/database.js +70 -2
  547. package/dist/memory/database.js.map +2 -2
  548. package/dist/memory/index.d.ts +71 -0
  549. package/dist/memory/index.d.ts.map +1 -0
  550. package/dist/memory/index.js +12 -2
  551. package/dist/memory/index.js.map +2 -2
  552. package/dist/memory/symbols.d.ts +21 -0
  553. package/dist/memory/symbols.d.ts.map +1 -0
  554. package/dist/memory/types.d.ts +78 -0
  555. package/dist/memory/types.d.ts.map +1 -0
  556. package/dist/memory/types.js.map +1 -1
  557. package/dist/memory/vectors.d.ts +43 -0
  558. package/dist/memory/vectors.d.ts.map +1 -0
  559. package/dist/patterns/graph.d.ts +16 -0
  560. package/dist/patterns/graph.d.ts.map +1 -0
  561. package/dist/patterns/graph.js +45 -0
  562. package/dist/patterns/graph.js.map +7 -0
  563. package/dist/patterns/index.d.ts +4 -0
  564. package/dist/patterns/index.d.ts.map +1 -0
  565. package/dist/patterns/index.js +39 -0
  566. package/dist/patterns/index.js.map +7 -0
  567. package/dist/patterns/indexer.d.ts +15 -0
  568. package/dist/patterns/indexer.d.ts.map +1 -0
  569. package/dist/patterns/indexer.js +97 -0
  570. package/dist/patterns/indexer.js.map +7 -0
  571. package/dist/patterns/library/command-injection-go.yaml +11 -0
  572. package/dist/patterns/library/dangerous-eval-js.yaml +14 -0
  573. package/dist/patterns/library/dangerous-exec-py.yaml +13 -0
  574. package/dist/patterns/library/dangerous-reflection-java.yaml +8 -0
  575. package/dist/patterns/library/path-traversal-go.yaml +11 -0
  576. package/dist/patterns/library/path-traversal-py.yaml +12 -0
  577. package/dist/patterns/library/path-traversal-readfile-js.yaml +14 -0
  578. package/dist/patterns/library/prototype-pollution-js.yaml +12 -0
  579. package/dist/patterns/library/sql-injection-concat-js.yaml +12 -0
  580. package/dist/patterns/library/sql-injection-java.yaml +13 -0
  581. package/dist/patterns/library/sql-injection-py.yaml +12 -0
  582. package/dist/patterns/library/sql-injection-template-js.yaml +13 -0
  583. package/dist/patterns/library/weak-crypto-md5-js.yaml +13 -0
  584. package/dist/patterns/library/weak-crypto-py.yaml +13 -0
  585. package/dist/patterns/loader.d.ts +18 -0
  586. package/dist/patterns/loader.d.ts.map +1 -0
  587. package/dist/patterns/loader.js +277 -0
  588. package/dist/patterns/loader.js.map +7 -0
  589. package/dist/patterns/runner.d.ts +42 -0
  590. package/dist/patterns/runner.d.ts.map +1 -0
  591. package/dist/patterns/runner.js +277 -0
  592. package/dist/patterns/runner.js.map +7 -0
  593. package/dist/patterns/types.d.ts +27 -0
  594. package/dist/patterns/types.d.ts.map +1 -0
  595. package/dist/patterns/types.js +34 -0
  596. package/dist/patterns/types.js.map +7 -0
  597. package/dist/resolution/bridges/android-rn.d.ts +13 -0
  598. package/dist/resolution/bridges/android-rn.d.ts.map +1 -0
  599. package/dist/resolution/bridges/android-rn.js +298 -0
  600. package/dist/resolution/bridges/android-rn.js.map +7 -0
  601. package/dist/resolution/bridges/expo-modules.d.ts +10 -0
  602. package/dist/resolution/bridges/expo-modules.d.ts.map +1 -0
  603. package/dist/resolution/bridges/expo-modules.js +155 -0
  604. package/dist/resolution/bridges/expo-modules.js.map +7 -0
  605. package/dist/resolution/bridges/flutter-channel.d.ts +14 -0
  606. package/dist/resolution/bridges/flutter-channel.d.ts.map +1 -0
  607. package/dist/resolution/bridges/flutter-channel.js +385 -0
  608. package/dist/resolution/bridges/flutter-channel.js.map +7 -0
  609. package/dist/resolution/bridges/index.d.ts +40 -0
  610. package/dist/resolution/bridges/index.d.ts.map +1 -0
  611. package/dist/resolution/bridges/index.js +80 -0
  612. package/dist/resolution/bridges/index.js.map +7 -0
  613. package/dist/resolution/bridges/native-events.d.ts +10 -0
  614. package/dist/resolution/bridges/native-events.d.ts.map +1 -0
  615. package/dist/resolution/bridges/native-events.js +188 -0
  616. package/dist/resolution/bridges/native-events.js.map +7 -0
  617. package/dist/resolution/bridges/native-views.d.ts +13 -0
  618. package/dist/resolution/bridges/native-views.d.ts.map +1 -0
  619. package/dist/resolution/bridges/native-views.js +244 -0
  620. package/dist/resolution/bridges/native-views.js.map +7 -0
  621. package/dist/resolution/bridges/react-native.d.ts +9 -0
  622. package/dist/resolution/bridges/react-native.d.ts.map +1 -0
  623. package/dist/resolution/bridges/react-native.js +161 -0
  624. package/dist/resolution/bridges/react-native.js.map +7 -0
  625. package/dist/resolution/bridges/swift-objc.d.ts +14 -0
  626. package/dist/resolution/bridges/swift-objc.d.ts.map +1 -0
  627. package/dist/resolution/bridges/swift-objc.js +227 -0
  628. package/dist/resolution/bridges/swift-objc.js.map +7 -0
  629. package/dist/resolution/bridges/turbomodules.d.ts +10 -0
  630. package/dist/resolution/bridges/turbomodules.d.ts.map +1 -0
  631. package/dist/resolution/bridges/turbomodules.js +216 -0
  632. package/dist/resolution/bridges/turbomodules.js.map +7 -0
  633. package/dist/resolution/index.d.ts +28 -3
  634. package/dist/resolution/index.d.ts.map +1 -1
  635. package/dist/resolution/index.js +61 -2
  636. package/dist/resolution/index.js.map +2 -2
  637. package/dist/security/attack-surface.d.ts +46 -0
  638. package/dist/security/attack-surface.d.ts.map +1 -0
  639. package/dist/security/attack-surface.js +206 -0
  640. package/dist/security/attack-surface.js.map +7 -0
  641. package/dist/security/context-warnings.d.ts +40 -0
  642. package/dist/security/context-warnings.d.ts.map +1 -0
  643. package/dist/security/context-warnings.js +123 -0
  644. package/dist/security/context-warnings.js.map +7 -0
  645. package/dist/security/data-flows.d.ts +33 -0
  646. package/dist/security/data-flows.d.ts.map +1 -0
  647. package/dist/security/data-flows.js +286 -0
  648. package/dist/security/data-flows.js.map +7 -0
  649. package/dist/security/dep-confusion.d.ts +23 -0
  650. package/dist/security/dep-confusion.d.ts.map +1 -0
  651. package/dist/security/dep-confusion.js +255 -0
  652. package/dist/security/dep-confusion.js.map +7 -0
  653. package/dist/security/errors.d.ts +16 -0
  654. package/dist/security/errors.d.ts.map +1 -0
  655. package/dist/security/errors.js +51 -0
  656. package/dist/security/errors.js.map +7 -0
  657. package/dist/security/export/fix-suggestions.d.ts +21 -0
  658. package/dist/security/export/fix-suggestions.d.ts.map +1 -0
  659. package/dist/security/export/fix-suggestions.js +58 -0
  660. package/dist/security/export/fix-suggestions.js.map +7 -0
  661. package/dist/security/export/sbom.d.ts +33 -0
  662. package/dist/security/export/sbom.d.ts.map +1 -0
  663. package/dist/security/export/sbom.js +230 -0
  664. package/dist/security/export/sbom.js.map +7 -0
  665. package/dist/security/export/serialization.d.ts +62 -0
  666. package/dist/security/export/serialization.d.ts.map +1 -0
  667. package/dist/security/export/serialization.js +142 -0
  668. package/dist/security/export/serialization.js.map +7 -0
  669. package/dist/security/export/vex.d.ts +58 -0
  670. package/dist/security/export/vex.d.ts.map +1 -0
  671. package/dist/security/export/vex.js +220 -0
  672. package/dist/security/export/vex.js.map +7 -0
  673. package/dist/security/index.d.ts +21 -0
  674. package/dist/security/index.d.ts.map +1 -0
  675. package/dist/security/index.js +67 -0
  676. package/dist/security/index.js.map +7 -0
  677. package/dist/security/integrator.d.ts +63 -0
  678. package/dist/security/integrator.d.ts.map +1 -0
  679. package/dist/security/integrator.js +491 -0
  680. package/dist/security/integrator.js.map +7 -0
  681. package/dist/security/license.d.ts +33 -0
  682. package/dist/security/license.d.ts.map +1 -0
  683. package/dist/security/license.js +70 -0
  684. package/dist/security/license.js.map +7 -0
  685. package/dist/security/manifest/adapter.d.ts +92 -0
  686. package/dist/security/manifest/adapter.d.ts.map +1 -0
  687. package/dist/security/manifest/adapter.js +243 -0
  688. package/dist/security/manifest/adapter.js.map +7 -0
  689. package/dist/security/manifest/parser.d.ts +73 -0
  690. package/dist/security/manifest/parser.d.ts.map +1 -0
  691. package/dist/security/manifest/parser.js +376 -0
  692. package/dist/security/manifest/parser.js.map +7 -0
  693. package/dist/security/manifest/plugins/cargo.d.ts +11 -0
  694. package/dist/security/manifest/plugins/cargo.d.ts.map +1 -0
  695. package/dist/security/manifest/plugins/cargo.js +233 -0
  696. package/dist/security/manifest/plugins/cargo.js.map +7 -0
  697. package/dist/security/manifest/plugins/composer.d.ts +11 -0
  698. package/dist/security/manifest/plugins/composer.d.ts.map +1 -0
  699. package/dist/security/manifest/plugins/composer.js +152 -0
  700. package/dist/security/manifest/plugins/composer.js.map +7 -0
  701. package/dist/security/manifest/plugins/go.d.ts +12 -0
  702. package/dist/security/manifest/plugins/go.d.ts.map +1 -0
  703. package/dist/security/manifest/plugins/go.js +146 -0
  704. package/dist/security/manifest/plugins/go.js.map +7 -0
  705. package/dist/security/manifest/plugins/gradle.d.ts +12 -0
  706. package/dist/security/manifest/plugins/gradle.d.ts.map +1 -0
  707. package/dist/security/manifest/plugins/gradle.js +159 -0
  708. package/dist/security/manifest/plugins/gradle.js.map +7 -0
  709. package/dist/security/manifest/plugins/hex.d.ts +11 -0
  710. package/dist/security/manifest/plugins/hex.d.ts.map +1 -0
  711. package/dist/security/manifest/plugins/hex.js +159 -0
  712. package/dist/security/manifest/plugins/hex.js.map +7 -0
  713. package/dist/security/manifest/plugins/maven.d.ts +11 -0
  714. package/dist/security/manifest/plugins/maven.d.ts.map +1 -0
  715. package/dist/security/manifest/plugins/maven.js +128 -0
  716. package/dist/security/manifest/plugins/maven.js.map +7 -0
  717. package/dist/security/manifest/plugins/npm.d.ts +11 -0
  718. package/dist/security/manifest/plugins/npm.d.ts.map +1 -0
  719. package/dist/security/manifest/plugins/npm.js +284 -0
  720. package/dist/security/manifest/plugins/npm.js.map +7 -0
  721. package/dist/security/manifest/plugins/nuget.d.ts +12 -0
  722. package/dist/security/manifest/plugins/nuget.d.ts.map +1 -0
  723. package/dist/security/manifest/plugins/nuget.js +186 -0
  724. package/dist/security/manifest/plugins/nuget.js.map +7 -0
  725. package/dist/security/manifest/plugins/pip.d.ts +11 -0
  726. package/dist/security/manifest/plugins/pip.d.ts.map +1 -0
  727. package/dist/security/manifest/plugins/pip.js +123 -0
  728. package/dist/security/manifest/plugins/pip.js.map +7 -0
  729. package/dist/security/manifest/plugins/pubspec.d.ts +11 -0
  730. package/dist/security/manifest/plugins/pubspec.d.ts.map +1 -0
  731. package/dist/security/manifest/plugins/pubspec.js +212 -0
  732. package/dist/security/manifest/plugins/pubspec.js.map +7 -0
  733. package/dist/security/manifest/plugins/pyproject.d.ts +3 -0
  734. package/dist/security/manifest/plugins/pyproject.d.ts.map +1 -0
  735. package/dist/security/manifest/plugins/pyproject.js +261 -0
  736. package/dist/security/manifest/plugins/pyproject.js.map +7 -0
  737. package/dist/security/manifest/plugins/rubygems.d.ts +11 -0
  738. package/dist/security/manifest/plugins/rubygems.d.ts.map +1 -0
  739. package/dist/security/manifest/plugins/rubygems.js +185 -0
  740. package/dist/security/manifest/plugins/rubygems.js.map +7 -0
  741. package/dist/security/manifest/plugins/swift.d.ts +11 -0
  742. package/dist/security/manifest/plugins/swift.d.ts.map +1 -0
  743. package/dist/security/manifest/plugins/swift.js +200 -0
  744. package/dist/security/manifest/plugins/swift.js.map +7 -0
  745. package/dist/security/owasp.d.ts +16 -0
  746. package/dist/security/owasp.d.ts.map +1 -0
  747. package/dist/security/owasp.js +104 -0
  748. package/dist/security/owasp.js.map +7 -0
  749. package/dist/security/pipeline.d.ts +37 -0
  750. package/dist/security/pipeline.d.ts.map +1 -0
  751. package/dist/security/pipeline.js +125 -0
  752. package/dist/security/pipeline.js.map +7 -0
  753. package/dist/security/reachability.d.ts +67 -0
  754. package/dist/security/reachability.d.ts.map +1 -0
  755. package/dist/security/reachability.js +276 -0
  756. package/dist/security/reachability.js.map +7 -0
  757. package/dist/security/remediation.d.ts +51 -0
  758. package/dist/security/remediation.d.ts.map +1 -0
  759. package/dist/security/remediation.js +126 -0
  760. package/dist/security/remediation.js.map +7 -0
  761. package/dist/security/secrets.d.ts +38 -0
  762. package/dist/security/secrets.d.ts.map +1 -0
  763. package/dist/security/secrets.js +176 -0
  764. package/dist/security/secrets.js.map +7 -0
  765. package/dist/security/staleness.d.ts +43 -0
  766. package/dist/security/staleness.d.ts.map +1 -0
  767. package/dist/security/staleness.js +231 -0
  768. package/dist/security/staleness.js.map +7 -0
  769. package/dist/security/supply-chain.d.ts +34 -0
  770. package/dist/security/supply-chain.d.ts.map +1 -0
  771. package/dist/security/supply-chain.js +301 -0
  772. package/dist/security/supply-chain.js.map +7 -0
  773. package/dist/security/suppressions.d.ts +18 -0
  774. package/dist/security/suppressions.d.ts.map +1 -0
  775. package/dist/security/suppressions.js +106 -0
  776. package/dist/security/suppressions.js.map +7 -0
  777. package/dist/security/types.d.ts +144 -0
  778. package/dist/security/types.d.ts.map +1 -0
  779. package/dist/security/types.js +17 -0
  780. package/dist/security/types.js.map +7 -0
  781. package/dist/security/vuln/client.d.ts +90 -0
  782. package/dist/security/vuln/client.d.ts.map +1 -0
  783. package/dist/security/vuln/client.js +355 -0
  784. package/dist/security/vuln/client.js.map +7 -0
  785. package/dist/security/vuln/epss-client.d.ts +26 -0
  786. package/dist/security/vuln/epss-client.d.ts.map +1 -0
  787. package/dist/security/vuln/epss-client.js +95 -0
  788. package/dist/security/vuln/epss-client.js.map +7 -0
  789. package/dist/security/vuln/index.d.ts +6 -0
  790. package/dist/security/vuln/index.d.ts.map +1 -0
  791. package/dist/security/vuln/index.js +29 -0
  792. package/dist/security/vuln/index.js.map +7 -0
  793. package/dist/security/vuln/osv-adapter.d.ts +58 -0
  794. package/dist/security/vuln/osv-adapter.d.ts.map +1 -0
  795. package/dist/security/vuln/osv-adapter.js +321 -0
  796. package/dist/security/vuln/osv-adapter.js.map +7 -0
  797. package/dist/security/vuln/types.d.ts +29 -0
  798. package/dist/security/vuln/types.d.ts.map +1 -0
  799. package/dist/security/vuln/types.js +17 -0
  800. package/dist/security/vuln/types.js.map +7 -0
  801. package/dist/sync/index.d.ts +4 -2
  802. package/dist/sync/index.d.ts.map +1 -1
  803. package/dist/types.d.ts +10 -4
  804. package/dist/types.d.ts.map +1 -1
  805. package/dist/types.js.map +2 -2
  806. package/dist/vectors/index.d.ts +11 -3
  807. package/dist/vectors/index.d.ts.map +1 -1
  808. package/dist/vectors/qdrant-index.d.ts +10 -3
  809. package/dist/vectors/qdrant-index.d.ts.map +1 -1
  810. package/dist/vectors/typesense-index.d.ts.map +1 -1
  811. package/dist/watchmen/index.js +83 -0
  812. package/dist/watchmen/index.js.map +7 -0
  813. package/dist/watchmen/synthesize.js +475 -0
  814. package/dist/watchmen/synthesize.js.map +7 -0
  815. package/package.json +6 -2
@@ -0,0 +1,376 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var parser_exports = {};
20
+ __export(parser_exports, {
21
+ ManifestParser: () => ManifestParser,
22
+ compareVersions: () => compareVersions,
23
+ deduplicateDependencies: () => deduplicateDependencies
24
+ });
25
+ module.exports = __toCommonJS(parser_exports);
26
+ var import_adapter = require("./adapter");
27
+ var import_npm = require("./plugins/npm");
28
+ var import_maven = require("./plugins/maven");
29
+ var import_go = require("./plugins/go");
30
+ var import_pip = require("./plugins/pip");
31
+ var import_cargo = require("./plugins/cargo");
32
+ var import_nuget = require("./plugins/nuget");
33
+ var import_gradle = require("./plugins/gradle");
34
+ var import_rubygems = require("./plugins/rubygems");
35
+ var import_composer = require("./plugins/composer");
36
+ var import_swift = require("./plugins/swift");
37
+ var import_pubspec = require("./plugins/pubspec");
38
+ var import_hex = require("./plugins/hex");
39
+ var import_pyproject = require("./plugins/pyproject");
40
+ var import_errors = require("../../errors");
41
+ function createNpmPlugin() {
42
+ return {
43
+ ecosystem: "npm",
44
+ manifestFiles: ["package.json"],
45
+ canExtract(manifestPath) {
46
+ return manifestPath.endsWith("package.json");
47
+ },
48
+ extract: import_npm.parseNpmManifest
49
+ };
50
+ }
51
+ function createMavenPlugin() {
52
+ return {
53
+ ecosystem: "maven",
54
+ manifestFiles: ["pom.xml"],
55
+ canExtract(manifestPath) {
56
+ return manifestPath.endsWith("pom.xml");
57
+ },
58
+ extract: import_maven.parseMavenManifest
59
+ };
60
+ }
61
+ function createGoPlugin() {
62
+ return {
63
+ ecosystem: "go",
64
+ manifestFiles: ["go.mod"],
65
+ canExtract(manifestPath) {
66
+ return manifestPath.endsWith("go.mod");
67
+ },
68
+ extract: import_go.parseGoManifest
69
+ };
70
+ }
71
+ function createPipPlugin() {
72
+ return {
73
+ ecosystem: "python",
74
+ manifestFiles: ["requirements.txt"],
75
+ canExtract(manifestPath) {
76
+ return manifestPath.endsWith("requirements.txt");
77
+ },
78
+ extract: import_pip.parsePipManifest
79
+ };
80
+ }
81
+ function createCargoPlugin() {
82
+ return {
83
+ ecosystem: "cargo",
84
+ manifestFiles: ["Cargo.toml"],
85
+ canExtract(manifestPath) {
86
+ return manifestPath.endsWith("Cargo.toml");
87
+ },
88
+ extract: import_cargo.parseCargoManifest
89
+ };
90
+ }
91
+ function createNugetPlugin() {
92
+ return {
93
+ ecosystem: "csproj",
94
+ manifestFiles: [".csproj"],
95
+ canExtract(manifestPath) {
96
+ return manifestPath.endsWith(".csproj");
97
+ },
98
+ extract: import_nuget.parseNugetManifest
99
+ };
100
+ }
101
+ function createGradlePlugin() {
102
+ return {
103
+ ecosystem: "gradle",
104
+ manifestFiles: ["build.gradle", "build.gradle.kts"],
105
+ canExtract(manifestPath) {
106
+ const base = manifestPath.split("/").pop() ?? "";
107
+ return base === "build.gradle" || base === "build.gradle.kts";
108
+ },
109
+ extract: import_gradle.parseGradleManifest
110
+ };
111
+ }
112
+ function createPyprojectPlugin() {
113
+ return {
114
+ ecosystem: "pyproject",
115
+ manifestFiles: ["pyproject.toml"],
116
+ canExtract(manifestPath) {
117
+ return manifestPath.endsWith("pyproject.toml");
118
+ },
119
+ extract: import_pyproject.parsePyprojectManifest
120
+ };
121
+ }
122
+ function createRubygemsPlugin() {
123
+ return {
124
+ ecosystem: "rubygems",
125
+ manifestFiles: ["Gemfile"],
126
+ canExtract(manifestPath) {
127
+ return manifestPath.endsWith("/Gemfile") || manifestPath === "Gemfile";
128
+ },
129
+ extract: import_rubygems.parseRubygemsManifest
130
+ };
131
+ }
132
+ function createComposerPlugin() {
133
+ return {
134
+ ecosystem: "composer",
135
+ manifestFiles: ["composer.json"],
136
+ canExtract(manifestPath) {
137
+ return manifestPath.endsWith("composer.json");
138
+ },
139
+ extract: import_composer.parseComposerManifest
140
+ };
141
+ }
142
+ function createSwiftPlugin() {
143
+ return {
144
+ ecosystem: "swift",
145
+ manifestFiles: ["Package.swift"],
146
+ canExtract(manifestPath) {
147
+ return manifestPath.endsWith("Package.swift");
148
+ },
149
+ extract: import_swift.parseSwiftManifest
150
+ };
151
+ }
152
+ function createPubspecPlugin() {
153
+ return {
154
+ ecosystem: "pub",
155
+ manifestFiles: ["pubspec.yaml"],
156
+ canExtract(manifestPath) {
157
+ return manifestPath.endsWith("pubspec.yaml");
158
+ },
159
+ extract: import_pubspec.parsePubspecManifest
160
+ };
161
+ }
162
+ function createHexPlugin() {
163
+ return {
164
+ ecosystem: "hex",
165
+ manifestFiles: ["mix.exs"],
166
+ canExtract(manifestPath) {
167
+ return manifestPath.endsWith("mix.exs");
168
+ },
169
+ extract: import_hex.parseHexManifest
170
+ };
171
+ }
172
+ function compareVersions(a, b) {
173
+ const cleanA = a.startsWith("v") ? a.slice(1) : a;
174
+ const cleanB = b.startsWith("v") ? b.slice(1) : b;
175
+ const numericA = cleanA.replace(/^[~^>=<]+/, "");
176
+ const numericB = cleanB.replace(/^[~^>=<]+/, "");
177
+ const partsA = numericA.split(".");
178
+ const partsB = numericB.split(".");
179
+ const maxLen = Math.max(partsA.length, partsB.length);
180
+ for (let i = 0; i < maxLen; i++) {
181
+ const segA = partsA[i] ?? "0";
182
+ const segB = partsB[i] ?? "0";
183
+ const numA = parseInt(segA, 10);
184
+ const numB = parseInt(segB, 10);
185
+ if (!isNaN(numA) && !isNaN(numB)) {
186
+ if (numA !== numB) return numA - numB;
187
+ const suffixA = segA.slice(String(numA).length);
188
+ const suffixB = segB.slice(String(numB).length);
189
+ if (suffixA !== suffixB) {
190
+ if (suffixA && !suffixB) return -1;
191
+ if (!suffixA && suffixB) return 1;
192
+ return suffixA.localeCompare(suffixB);
193
+ }
194
+ } else {
195
+ const cmp = segA.localeCompare(segB);
196
+ if (cmp !== 0) return cmp;
197
+ }
198
+ }
199
+ return 0;
200
+ }
201
+ function getEffectiveVersion(dep) {
202
+ return dep.resolvedVersion ?? dep.declaredConstraint;
203
+ }
204
+ function deduplicateDependencies(deps) {
205
+ const map = /* @__PURE__ */ new Map();
206
+ for (const dep of deps) {
207
+ const key = `${dep.ecosystem}:${dep.name}`;
208
+ const existing = map.get(key);
209
+ if (!existing) {
210
+ map.set(key, {
211
+ name: dep.name,
212
+ ecosystem: dep.ecosystem,
213
+ declaredConstraint: dep.declaredConstraint,
214
+ resolvedVersion: dep.resolvedVersion,
215
+ scope: dep.scope,
216
+ sourceManifests: [dep.sourceManifest],
217
+ license: dep.license
218
+ });
219
+ } else {
220
+ if (!existing.sourceManifests.includes(dep.sourceManifest)) {
221
+ existing.sourceManifests.push(dep.sourceManifest);
222
+ }
223
+ const existingVersion = existing.resolvedVersion ?? existing.declaredConstraint;
224
+ const newVersion = getEffectiveVersion(dep);
225
+ if (compareVersions(newVersion, existingVersion) > 0) {
226
+ existing.declaredConstraint = dep.declaredConstraint;
227
+ existing.resolvedVersion = dep.resolvedVersion;
228
+ existing.scope = dep.scope;
229
+ if (dep.license !== void 0) {
230
+ existing.license = dep.license;
231
+ }
232
+ } else if (existing.license === void 0 && dep.license !== void 0) {
233
+ existing.license = dep.license;
234
+ }
235
+ }
236
+ }
237
+ return [...map.values()];
238
+ }
239
+ class ManifestParser {
240
+ constructor(db, projectRoot) {
241
+ this.db = db;
242
+ this.projectRoot = projectRoot;
243
+ this.adapter = new import_adapter.SecurityManifestAdapter(projectRoot);
244
+ this.adapter.registerPlugin(createNpmPlugin());
245
+ this.adapter.registerPlugin(createMavenPlugin());
246
+ this.adapter.registerPlugin(createGoPlugin());
247
+ this.adapter.registerPlugin(createPipPlugin());
248
+ this.adapter.registerPlugin(createCargoPlugin());
249
+ this.adapter.registerPlugin(createNugetPlugin());
250
+ this.adapter.registerPlugin(createGradlePlugin());
251
+ this.adapter.registerStandalonePlugin(createPyprojectPlugin());
252
+ this.adapter.registerStandalonePlugin(createRubygemsPlugin());
253
+ this.adapter.registerStandalonePlugin(createComposerPlugin());
254
+ this.adapter.registerStandalonePlugin(createSwiftPlugin());
255
+ this.adapter.registerStandalonePlugin(createPubspecPlugin());
256
+ this.adapter.registerStandalonePlugin(createHexPlugin());
257
+ }
258
+ /**
259
+ * Get the underlying adapter (useful for testing).
260
+ */
261
+ getAdapter() {
262
+ return this.adapter;
263
+ }
264
+ /**
265
+ * Run full manifest discovery, parsing, deduplication, and database persistence.
266
+ *
267
+ * Steps:
268
+ * 1. Discover manifest files via the adapter (reuses architecture parsers)
269
+ * 2. Extract dependencies with version/scope data via registered plugins
270
+ * 3. Deduplicate: same (name, ecosystem) → single entry with highest version
271
+ * 4. Create Dependency_Nodes in the database (nodes + sec_dependencies tables)
272
+ * 5. Create `declared_in` edges linking dependencies to their source manifests
273
+ */
274
+ async parseAll() {
275
+ const warnings = [];
276
+ const errors = [];
277
+ const allDeps = [];
278
+ const manifestPaths = this.adapter.discoverManifests();
279
+ let manifestsParsed = 0;
280
+ for (const manifestPath of manifestPaths) {
281
+ try {
282
+ const deps = await this.adapter.extractFromManifest(manifestPath);
283
+ if (deps.length > 0) {
284
+ allDeps.push(...deps);
285
+ manifestsParsed++;
286
+ } else {
287
+ manifestsParsed++;
288
+ }
289
+ } catch (err) {
290
+ const message = err instanceof Error ? err.message : String(err);
291
+ const relPath = manifestPath.replace(this.projectRoot + "/", "").replace(/\\/g, "/");
292
+ errors.push({ file: relPath, message });
293
+ (0, import_errors.logError)(`[sec:parser] Failed to parse manifest ${relPath}: ${message}`);
294
+ }
295
+ }
296
+ if (allDeps.length === 0) {
297
+ return {
298
+ dependenciesCreated: 0,
299
+ manifestsParsed,
300
+ warnings,
301
+ errors
302
+ };
303
+ }
304
+ const deduplicated = deduplicateDependencies(allDeps);
305
+ let dependenciesCreated = 0;
306
+ const rawDb = this.db.getRawDb();
307
+ for (const dep of deduplicated) {
308
+ try {
309
+ const nodeId = `dep:${dep.ecosystem}:${dep.name}`;
310
+ const node = {
311
+ id: nodeId,
312
+ kind: "dependency",
313
+ name: dep.name,
314
+ qualifiedName: `${dep.ecosystem}/${dep.name}`,
315
+ filePath: dep.sourceManifests[0] ?? "",
316
+ language: "unknown",
317
+ startLine: 0,
318
+ endLine: 0,
319
+ startColumn: 0,
320
+ endColumn: 0,
321
+ signature: dep.resolvedVersion ?? dep.declaredConstraint,
322
+ isExported: false,
323
+ isAsync: false,
324
+ isStatic: false,
325
+ isAbstract: false,
326
+ updatedAt: Date.now()
327
+ };
328
+ this.db.upsertNode(node);
329
+ rawDb.run(
330
+ `INSERT OR REPLACE INTO sec_dependencies
331
+ (node_id, ecosystem, package_name, declared_constraint, resolved_version, scope, source_manifests, license)
332
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
333
+ [
334
+ nodeId,
335
+ dep.ecosystem,
336
+ dep.name,
337
+ dep.declaredConstraint,
338
+ dep.resolvedVersion ?? null,
339
+ dep.scope,
340
+ JSON.stringify(dep.sourceManifests),
341
+ dep.license ?? null
342
+ ]
343
+ );
344
+ for (const manifest of dep.sourceManifests) {
345
+ const edge = {
346
+ source: nodeId,
347
+ target: manifest,
348
+ kind: "declared_in"
349
+ };
350
+ this.db.insertEdge(edge);
351
+ }
352
+ dependenciesCreated++;
353
+ } catch (err) {
354
+ const message = err instanceof Error ? err.message : String(err);
355
+ warnings.push({
356
+ file: dep.sourceManifests[0] ?? "unknown",
357
+ message: `Failed to persist dependency ${dep.ecosystem}/${dep.name}: ${message}`
358
+ });
359
+ (0, import_errors.logWarn)(`[sec:parser] Failed to persist dependency ${dep.ecosystem}/${dep.name}: ${message}`);
360
+ }
361
+ }
362
+ return {
363
+ dependenciesCreated,
364
+ manifestsParsed,
365
+ warnings,
366
+ errors
367
+ };
368
+ }
369
+ }
370
+ // Annotate the CommonJS export names for ESM import in node:
371
+ 0 && (module.exports = {
372
+ ManifestParser,
373
+ compareVersions,
374
+ deduplicateDependencies
375
+ });
376
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/security/manifest/parser.ts"],
4
+ "sourcesContent": ["/**\n * ManifestParser Orchestrator\n *\n * Orchestrates manifest discovery, version extraction, deduplication, and\n * database persistence. Uses the SecurityManifestAdapter for discovery and\n * extraction, registers all 12 version extraction plugins:\n * Wrapped (arch parser exists): npm, maven, go, pip, cargo, nuget, gradle\n * Standalone (no arch parser): rubygems, composer, swift, pubspec, hex\n *\n * Node ID format: `dep:<ecosystem>:<name>` (e.g. `dep:npm:express`)\n */\nimport { SecurityManifestAdapter, type VersionExtractionPlugin } from './adapter';\nimport { parseNpmManifest } from './plugins/npm';\nimport { parseMavenManifest } from './plugins/maven';\nimport { parseGoManifest } from './plugins/go';\nimport { parsePipManifest } from './plugins/pip';\nimport { parseCargoManifest } from './plugins/cargo';\nimport { parseNugetManifest } from './plugins/nuget';\nimport { parseGradleManifest } from './plugins/gradle';\nimport { parseRubygemsManifest } from './plugins/rubygems';\nimport { parseComposerManifest } from './plugins/composer';\nimport { parseSwiftManifest } from './plugins/swift';\nimport { parsePubspecManifest } from './plugins/pubspec';\nimport { parseHexManifest } from './plugins/hex';\nimport { parsePyprojectManifest } from './plugins/pyproject';\nimport type { GraphDatabase } from '../../db/database';\nimport type { ParsedDependency, ManifestParseResult } from '../types';\nimport type { Node, Edge } from '../../types';\nimport { logWarn, logError } from '../../errors';\n\n// \u2500\u2500 Plugin Definitions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Create the npm version extraction plugin wrapping parseNpmManifest.\n */\nfunction createNpmPlugin(): VersionExtractionPlugin {\n return {\n ecosystem: 'npm',\n manifestFiles: ['package.json'],\n canExtract(manifestPath: string): boolean {\n return manifestPath.endsWith('package.json');\n },\n extract: parseNpmManifest,\n };\n}\n\n/**\n * Create the Maven version extraction plugin wrapping parseMavenManifest.\n */\nfunction createMavenPlugin(): VersionExtractionPlugin {\n return {\n ecosystem: 'maven',\n manifestFiles: ['pom.xml'],\n canExtract(manifestPath: string): boolean {\n return manifestPath.endsWith('pom.xml');\n },\n extract: parseMavenManifest,\n };\n}\n\n/**\n * Create the Go version extraction plugin wrapping parseGoManifest.\n */\nfunction createGoPlugin(): VersionExtractionPlugin {\n return {\n ecosystem: 'go',\n manifestFiles: ['go.mod'],\n canExtract(manifestPath: string): boolean {\n return manifestPath.endsWith('go.mod');\n },\n extract: parseGoManifest,\n };\n}\n\n/**\n * Create the pip version extraction plugin wrapping parsePipManifest.\n */\nfunction createPipPlugin(): VersionExtractionPlugin {\n return {\n ecosystem: 'python',\n manifestFiles: ['requirements.txt'],\n canExtract(manifestPath: string): boolean {\n return manifestPath.endsWith('requirements.txt');\n },\n extract: parsePipManifest,\n };\n}\n\n/**\n * Create the Cargo version extraction plugin wrapping parseCargoManifest.\n */\nfunction createCargoPlugin(): VersionExtractionPlugin {\n return {\n ecosystem: 'cargo',\n manifestFiles: ['Cargo.toml'],\n canExtract(manifestPath: string): boolean {\n return manifestPath.endsWith('Cargo.toml');\n },\n extract: parseCargoManifest,\n };\n}\n\n/**\n * Create the NuGet version extraction plugin wrapping parseNugetManifest.\n * ecosystem = 'csproj' to match the architecture parser name for lookup;\n * ParsedDependency.ecosystem is set to 'nuget' inside the plugin function.\n */\nfunction createNugetPlugin(): VersionExtractionPlugin {\n return {\n ecosystem: 'csproj',\n manifestFiles: ['.csproj'],\n canExtract(manifestPath: string): boolean {\n return manifestPath.endsWith('.csproj');\n },\n extract: parseNugetManifest,\n };\n}\n\n/**\n * Create the Gradle version extraction plugin wrapping parseGradleManifest.\n */\nfunction createGradlePlugin(): VersionExtractionPlugin {\n return {\n ecosystem: 'gradle',\n manifestFiles: ['build.gradle', 'build.gradle.kts'],\n canExtract(manifestPath: string): boolean {\n const base = manifestPath.split('/').pop() ?? '';\n return base === 'build.gradle' || base === 'build.gradle.kts';\n },\n extract: parseGradleManifest,\n };\n}\n\nfunction createPyprojectPlugin(): VersionExtractionPlugin {\n return {\n ecosystem: 'pyproject',\n manifestFiles: ['pyproject.toml'],\n canExtract(manifestPath: string): boolean {\n return manifestPath.endsWith('pyproject.toml');\n },\n extract: parsePyprojectManifest,\n };\n}\n\n// \u2500\u2500 Standalone Plugin Factories \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction createRubygemsPlugin(): VersionExtractionPlugin {\n return {\n ecosystem: 'rubygems',\n manifestFiles: ['Gemfile'],\n canExtract(manifestPath: string): boolean {\n return manifestPath.endsWith('/Gemfile') || manifestPath === 'Gemfile';\n },\n extract: parseRubygemsManifest,\n };\n}\n\nfunction createComposerPlugin(): VersionExtractionPlugin {\n return {\n ecosystem: 'composer',\n manifestFiles: ['composer.json'],\n canExtract(manifestPath: string): boolean {\n return manifestPath.endsWith('composer.json');\n },\n extract: parseComposerManifest,\n };\n}\n\nfunction createSwiftPlugin(): VersionExtractionPlugin {\n return {\n ecosystem: 'swift',\n manifestFiles: ['Package.swift'],\n canExtract(manifestPath: string): boolean {\n return manifestPath.endsWith('Package.swift');\n },\n extract: parseSwiftManifest,\n };\n}\n\nfunction createPubspecPlugin(): VersionExtractionPlugin {\n return {\n ecosystem: 'pub',\n manifestFiles: ['pubspec.yaml'],\n canExtract(manifestPath: string): boolean {\n return manifestPath.endsWith('pubspec.yaml');\n },\n extract: parsePubspecManifest,\n };\n}\n\nfunction createHexPlugin(): VersionExtractionPlugin {\n return {\n ecosystem: 'hex',\n manifestFiles: ['mix.exs'],\n canExtract(manifestPath: string): boolean {\n return manifestPath.endsWith('mix.exs');\n },\n extract: parseHexManifest,\n };\n}\n\n// \u2500\u2500 Version Comparison \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Compare two version strings. Returns:\n * - positive if a > b\n * - negative if a < b\n * - 0 if equal\n *\n * Handles semver-like versions (1.2.3), Go pseudo-versions, and constraint\n * strings. Falls back to lexicographic comparison for non-numeric versions.\n */\nexport function compareVersions(a: string, b: string): number {\n // Strip leading 'v' (common in Go modules)\n const cleanA = a.startsWith('v') ? a.slice(1) : a;\n const cleanB = b.startsWith('v') ? b.slice(1) : b;\n\n // Strip common constraint prefixes (^, ~, >=, <=, =, >, <)\n const numericA = cleanA.replace(/^[~^>=<]+/, '');\n const numericB = cleanB.replace(/^[~^>=<]+/, '');\n\n const partsA = numericA.split('.');\n const partsB = numericB.split('.');\n\n const maxLen = Math.max(partsA.length, partsB.length);\n for (let i = 0; i < maxLen; i++) {\n const segA = partsA[i] ?? '0';\n const segB = partsB[i] ?? '0';\n\n // Try numeric comparison first\n const numA = parseInt(segA, 10);\n const numB = parseInt(segB, 10);\n\n if (!isNaN(numA) && !isNaN(numB)) {\n if (numA !== numB) return numA - numB;\n // If numeric parts are equal but segments differ (e.g. \"3-beta\" vs \"3\"),\n // compare the remaining suffix\n const suffixA = segA.slice(String(numA).length);\n const suffixB = segB.slice(String(numB).length);\n if (suffixA !== suffixB) {\n // Pre-release suffixes (starting with -) are lower than no suffix\n if (suffixA && !suffixB) return -1;\n if (!suffixA && suffixB) return 1;\n return suffixA.localeCompare(suffixB);\n }\n } else {\n // Lexicographic fallback for non-numeric segments\n const cmp = segA.localeCompare(segB);\n if (cmp !== 0) return cmp;\n }\n }\n\n return 0;\n}\n\n/**\n * Get the effective version string for comparison purposes.\n * Prefers resolvedVersion over declaredConstraint.\n */\nfunction getEffectiveVersion(dep: ParsedDependency): string {\n return dep.resolvedVersion ?? dep.declaredConstraint;\n}\n\n// \u2500\u2500 Deduplication \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * A deduplicated dependency entry combining data from multiple manifests.\n */\ninterface DeduplicatedDependency {\n name: string;\n ecosystem: string;\n /** The highest declared constraint across all manifests */\n declaredConstraint: string;\n /** The highest resolved version across all manifests (if any) */\n resolvedVersion?: string;\n /** Scope from the manifest with the highest version */\n scope: ParsedDependency['scope'];\n /** All source manifests that declared this dependency */\n sourceManifests: string[];\n /** License from manifest, if available */\n license?: string;\n}\n\n/**\n * Deduplicate dependencies by (name, ecosystem) pair, keeping the entry\n * with the highest version and collecting all source manifests.\n */\nexport function deduplicateDependencies(deps: ParsedDependency[]): DeduplicatedDependency[] {\n const map = new Map<string, DeduplicatedDependency>();\n\n for (const dep of deps) {\n const key = `${dep.ecosystem}:${dep.name}`;\n const existing = map.get(key);\n\n if (!existing) {\n map.set(key, {\n name: dep.name,\n ecosystem: dep.ecosystem,\n declaredConstraint: dep.declaredConstraint,\n resolvedVersion: dep.resolvedVersion,\n scope: dep.scope,\n sourceManifests: [dep.sourceManifest],\n license: dep.license,\n });\n } else {\n // Add source manifest if not already present\n if (!existing.sourceManifests.includes(dep.sourceManifest)) {\n existing.sourceManifests.push(dep.sourceManifest);\n }\n\n // Keep the highest version\n const existingVersion = existing.resolvedVersion ?? existing.declaredConstraint;\n const newVersion = getEffectiveVersion(dep);\n\n if (compareVersions(newVersion, existingVersion) > 0) {\n existing.declaredConstraint = dep.declaredConstraint;\n existing.resolvedVersion = dep.resolvedVersion;\n existing.scope = dep.scope;\n // Update license if the winning version entry has one\n if (dep.license !== undefined) {\n existing.license = dep.license;\n }\n } else if (existing.license === undefined && dep.license !== undefined) {\n // Even if version didn't win, adopt the license if we don't have one\n existing.license = dep.license;\n }\n }\n }\n\n return [...map.values()];\n}\n\n// \u2500\u2500 ManifestParser Class \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * ManifestParser orchestrates manifest discovery, parsing, deduplication,\n * and database persistence for the security module.\n */\nexport class ManifestParser {\n private readonly adapter: SecurityManifestAdapter;\n private readonly db: GraphDatabase;\n private readonly projectRoot: string;\n\n constructor(db: GraphDatabase, projectRoot: string) {\n this.db = db;\n this.projectRoot = projectRoot;\n this.adapter = new SecurityManifestAdapter(projectRoot);\n\n // Wrapped plugins (arch parser exists \u2014 ecosystem must match archParser.name)\n this.adapter.registerPlugin(createNpmPlugin());\n this.adapter.registerPlugin(createMavenPlugin());\n this.adapter.registerPlugin(createGoPlugin());\n this.adapter.registerPlugin(createPipPlugin());\n this.adapter.registerPlugin(createCargoPlugin());\n this.adapter.registerPlugin(createNugetPlugin());\n this.adapter.registerPlugin(createGradlePlugin());\n\n // Standalone plugins (no arch parser \u2014 own manifest discovery via manifestFiles)\n this.adapter.registerStandalonePlugin(createPyprojectPlugin());\n this.adapter.registerStandalonePlugin(createRubygemsPlugin());\n this.adapter.registerStandalonePlugin(createComposerPlugin());\n this.adapter.registerStandalonePlugin(createSwiftPlugin());\n this.adapter.registerStandalonePlugin(createPubspecPlugin());\n this.adapter.registerStandalonePlugin(createHexPlugin());\n }\n\n /**\n * Get the underlying adapter (useful for testing).\n */\n getAdapter(): SecurityManifestAdapter {\n return this.adapter;\n }\n\n /**\n * Run full manifest discovery, parsing, deduplication, and database persistence.\n *\n * Steps:\n * 1. Discover manifest files via the adapter (reuses architecture parsers)\n * 2. Extract dependencies with version/scope data via registered plugins\n * 3. Deduplicate: same (name, ecosystem) \u2192 single entry with highest version\n * 4. Create Dependency_Nodes in the database (nodes + sec_dependencies tables)\n * 5. Create `declared_in` edges linking dependencies to their source manifests\n */\n async parseAll(): Promise<ManifestParseResult> {\n const warnings: Array<{ file: string; line?: number; message: string }> = [];\n const errors: Array<{ file: string; message: string }> = [];\n\n // Step 1 & 2: Discover and extract all dependencies\n const allDeps: ParsedDependency[] = [];\n const manifestPaths = this.adapter.discoverManifests();\n let manifestsParsed = 0;\n\n for (const manifestPath of manifestPaths) {\n try {\n const deps = await this.adapter.extractFromManifest(manifestPath);\n if (deps.length > 0) {\n allDeps.push(...deps);\n manifestsParsed++;\n } else {\n // Manifest was parsed but had no dependencies \u2014 still counts\n manifestsParsed++;\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n const relPath = manifestPath.replace(this.projectRoot + '/', '').replace(/\\\\/g, '/');\n errors.push({ file: relPath, message });\n logError(`[sec:parser] Failed to parse manifest ${relPath}: ${message}`);\n }\n }\n\n if (allDeps.length === 0) {\n return {\n dependenciesCreated: 0,\n manifestsParsed,\n warnings,\n errors,\n };\n }\n\n // Step 3: Deduplicate by (name, ecosystem)\n const deduplicated = deduplicateDependencies(allDeps);\n\n // Step 4 & 5: Persist to database\n let dependenciesCreated = 0;\n const rawDb = this.db.getRawDb();\n\n for (const dep of deduplicated) {\n try {\n const nodeId = `dep:${dep.ecosystem}:${dep.name}`;\n\n // Create the node in the nodes table via upsertNode\n const node: Node = {\n id: nodeId,\n kind: 'dependency',\n name: dep.name,\n qualifiedName: `${dep.ecosystem}/${dep.name}`,\n filePath: dep.sourceManifests[0] ?? '',\n language: 'unknown',\n startLine: 0,\n endLine: 0,\n startColumn: 0,\n endColumn: 0,\n signature: dep.resolvedVersion ?? dep.declaredConstraint,\n isExported: false,\n isAsync: false,\n isStatic: false,\n isAbstract: false,\n updatedAt: Date.now(),\n };\n\n this.db.upsertNode(node);\n\n // Insert/update the sec_dependencies row\n rawDb.run(\n `INSERT OR REPLACE INTO sec_dependencies\n (node_id, ecosystem, package_name, declared_constraint, resolved_version, scope, source_manifests, license)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n nodeId,\n dep.ecosystem,\n dep.name,\n dep.declaredConstraint,\n dep.resolvedVersion ?? null,\n dep.scope,\n JSON.stringify(dep.sourceManifests),\n dep.license ?? null,\n ],\n );\n\n // Create `declared_in` edges from the dependency to each source manifest\n for (const manifest of dep.sourceManifests) {\n const edge: Edge = {\n source: nodeId,\n target: manifest,\n kind: 'declared_in',\n };\n this.db.insertEdge(edge);\n }\n\n dependenciesCreated++;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n warnings.push({\n file: dep.sourceManifests[0] ?? 'unknown',\n message: `Failed to persist dependency ${dep.ecosystem}/${dep.name}: ${message}`,\n });\n logWarn(`[sec:parser] Failed to persist dependency ${dep.ecosystem}/${dep.name}: ${message}`);\n }\n }\n\n return {\n dependenciesCreated,\n manifestsParsed,\n warnings,\n errors,\n };\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,11 @@
1
+ import type { ParsedDependency } from '../../types';
2
+ /**
3
+ * Parse a Cargo.toml manifest and extract dependency declarations
4
+ * with version constraints, scopes, and resolved versions from Cargo.lock.
5
+ *
6
+ * @param manifestPath - Absolute path to the Cargo.toml file
7
+ * @param projectRoot - Absolute path to the project root directory
8
+ * @returns Array of parsed dependencies with version and scope information
9
+ */
10
+ export declare function parseCargoManifest(manifestPath: string, projectRoot: string): Promise<ParsedDependency[]>;
11
+ //# sourceMappingURL=cargo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cargo.d.ts","sourceRoot":"","sources":["../../../../src/security/manifest/plugins/cargo.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAkBpD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAuC7B"}
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var cargo_exports = {};
30
+ __export(cargo_exports, {
31
+ parseCargoManifest: () => parseCargoManifest
32
+ });
33
+ module.exports = __toCommonJS(cargo_exports);
34
+ var fs = __toESM(require("fs"));
35
+ var path = __toESM(require("path"));
36
+ var import_errors = require("../../../errors");
37
+ const SECTION_SCOPES = [
38
+ { section: "dependencies", scope: "production" },
39
+ { section: "dev-dependencies", scope: "development" },
40
+ { section: "build-dependencies", scope: "development" }
41
+ ];
42
+ async function parseCargoManifest(manifestPath, projectRoot) {
43
+ const manifestDir = path.dirname(manifestPath);
44
+ const relativeManifest = path.relative(projectRoot, manifestPath).replace(/\\/g, "/");
45
+ let content;
46
+ try {
47
+ content = fs.readFileSync(manifestPath, "utf8");
48
+ } catch (err) {
49
+ (0, import_errors.logWarn)(`[sec:cargo] Failed to read ${relativeManifest}: ${err instanceof Error ? err.message : String(err)}`);
50
+ return [];
51
+ }
52
+ const resolvedVersions = loadResolvedVersions(manifestDir);
53
+ const license = extractCargoLicense(content);
54
+ const dependencies = [];
55
+ for (const { section, scope } of SECTION_SCOPES) {
56
+ const sectionDeps = extractSectionDependencies(content, section, relativeManifest);
57
+ for (const dep of sectionDeps) {
58
+ const resolvedVersion = resolvedVersions.get(dep.name);
59
+ dependencies.push({
60
+ name: dep.name,
61
+ declaredConstraint: dep.constraint,
62
+ resolvedVersion,
63
+ scope,
64
+ ecosystem: "cargo",
65
+ sourceManifest: relativeManifest,
66
+ ...license !== void 0 ? { license } : {}
67
+ });
68
+ }
69
+ }
70
+ return dependencies;
71
+ }
72
+ function extractSectionDependencies(content, section, relativeManifest) {
73
+ const deps = [];
74
+ const sectionRegex = new RegExp(`^\\[${escapeRegex(section)}\\]\\s*$`, "m");
75
+ const sectionMatch = sectionRegex.exec(content);
76
+ if (sectionMatch) {
77
+ const startIdx = sectionMatch.index + sectionMatch[0].length;
78
+ const remaining = content.slice(startIdx);
79
+ const nextSectionMatch = remaining.match(/^\[/m);
80
+ const sectionContent = nextSectionMatch ? remaining.slice(0, nextSectionMatch.index) : remaining;
81
+ const lines = sectionContent.split("\n");
82
+ for (const line of lines) {
83
+ const trimmed = line.trim();
84
+ if (trimmed === "" || trimmed.startsWith("#")) continue;
85
+ const dep = parseDependencyLine(trimmed, relativeManifest, section);
86
+ if (dep) {
87
+ deps.push(dep);
88
+ }
89
+ }
90
+ }
91
+ const tableRegex = new RegExp(`^\\[${escapeRegex(section)}\\.([^\\]]+)\\]\\s*$`, "gm");
92
+ let tableMatch;
93
+ while ((tableMatch = tableRegex.exec(content)) !== null) {
94
+ const depName = tableMatch[1].trim();
95
+ const startIdx = tableMatch.index + tableMatch[0].length;
96
+ const remaining = content.slice(startIdx);
97
+ const nextSectionMatch = remaining.match(/^\[/m);
98
+ const tableContent = nextSectionMatch ? remaining.slice(0, nextSectionMatch.index) : remaining;
99
+ const version = extractVersionFromTable(tableContent);
100
+ if (version) {
101
+ deps.push({ name: depName, constraint: version });
102
+ } else {
103
+ deps.push({ name: depName, constraint: "*" });
104
+ }
105
+ }
106
+ return deps;
107
+ }
108
+ function parseDependencyLine(line, relativeManifest, section) {
109
+ const simpleMatch = line.match(/^([a-zA-Z0-9_-]+)\s*=\s*"([^"]*)"$/);
110
+ if (simpleMatch) {
111
+ const name = simpleMatch[1];
112
+ const constraint = simpleMatch[2];
113
+ if (!isValidCrateName(name)) {
114
+ (0, import_errors.logWarn)(`[sec:cargo] Invalid crate name "${name}" in ${relativeManifest} [${section}] \u2014 skipping`);
115
+ return null;
116
+ }
117
+ if (constraint.trim() === "") {
118
+ (0, import_errors.logWarn)(`[sec:cargo] Empty version constraint for "${name}" in ${relativeManifest} [${section}] \u2014 skipping`);
119
+ return null;
120
+ }
121
+ return { name, constraint };
122
+ }
123
+ const tableMatch = line.match(/^([a-zA-Z0-9_-]+)\s*=\s*\{(.*)\}\s*$/);
124
+ if (tableMatch) {
125
+ const name = tableMatch[1];
126
+ const tableContent = tableMatch[2];
127
+ if (!isValidCrateName(name)) {
128
+ (0, import_errors.logWarn)(`[sec:cargo] Invalid crate name "${name}" in ${relativeManifest} [${section}] \u2014 skipping`);
129
+ return null;
130
+ }
131
+ const version = extractVersionFromInlineTable(tableContent);
132
+ if (version) {
133
+ return { name, constraint: version };
134
+ }
135
+ return { name, constraint: "*" };
136
+ }
137
+ if (line.includes("=") && !line.startsWith("#")) {
138
+ const possibleName = line.split("=")[0].trim();
139
+ if (possibleName && /^[a-zA-Z0-9_-]+$/.test(possibleName)) {
140
+ (0, import_errors.logWarn)(`[sec:cargo] Could not parse dependency line in ${relativeManifest} [${section}]: "${line}" \u2014 skipping`);
141
+ }
142
+ }
143
+ return null;
144
+ }
145
+ function extractVersionFromInlineTable(tableContent) {
146
+ const versionMatch = tableContent.match(/version\s*=\s*"([^"]*)"/);
147
+ if (versionMatch && versionMatch[1].trim() !== "") {
148
+ return versionMatch[1];
149
+ }
150
+ return null;
151
+ }
152
+ function extractVersionFromTable(tableContent) {
153
+ const lines = tableContent.split("\n");
154
+ for (const line of lines) {
155
+ const trimmed = line.trim();
156
+ const versionMatch = trimmed.match(/^version\s*=\s*"([^"]*)"$/);
157
+ if (versionMatch && versionMatch[1].trim() !== "") {
158
+ return versionMatch[1];
159
+ }
160
+ }
161
+ return null;
162
+ }
163
+ function loadResolvedVersions(manifestDir) {
164
+ const map = /* @__PURE__ */ new Map();
165
+ const lockPath = path.join(manifestDir, "Cargo.lock");
166
+ if (!fs.existsSync(lockPath)) {
167
+ return map;
168
+ }
169
+ try {
170
+ const lockContent = fs.readFileSync(lockPath, "utf8");
171
+ extractFromCargoLock(lockContent, map);
172
+ } catch (err) {
173
+ (0, import_errors.logWarn)(`[sec:cargo] Failed to parse Cargo.lock: ${err instanceof Error ? err.message : String(err)}`);
174
+ }
175
+ return map;
176
+ }
177
+ function extractFromCargoLock(content, map) {
178
+ const lines = content.split("\n");
179
+ let currentName = null;
180
+ for (const line of lines) {
181
+ const trimmed = line.trim();
182
+ if (trimmed === "[[package]]") {
183
+ currentName = null;
184
+ continue;
185
+ }
186
+ if (currentName === null) {
187
+ const nameMatch = trimmed.match(/^name\s*=\s*"([^"]+)"$/);
188
+ if (nameMatch) {
189
+ currentName = nameMatch[1];
190
+ continue;
191
+ }
192
+ }
193
+ if (currentName !== null) {
194
+ const versionMatch = trimmed.match(/^version\s*=\s*"([^"]+)"$/);
195
+ if (versionMatch) {
196
+ if (!map.has(currentName)) {
197
+ map.set(currentName, versionMatch[1]);
198
+ }
199
+ currentName = null;
200
+ continue;
201
+ }
202
+ }
203
+ if (trimmed === "" || trimmed.startsWith("[")) {
204
+ currentName = null;
205
+ }
206
+ }
207
+ }
208
+ function isValidCrateName(name) {
209
+ if (!name || typeof name !== "string") return false;
210
+ if (name.length > 64) return false;
211
+ return /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name);
212
+ }
213
+ function escapeRegex(str) {
214
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
215
+ }
216
+ function extractCargoLicense(content) {
217
+ const packageSectionMatch = /^\[package\]\s*$/m.exec(content);
218
+ if (!packageSectionMatch) return void 0;
219
+ const startIdx = packageSectionMatch.index + packageSectionMatch[0].length;
220
+ const remaining = content.slice(startIdx);
221
+ const nextSection = remaining.match(/^\[/m);
222
+ const sectionContent = nextSection ? remaining.slice(0, nextSection.index) : remaining;
223
+ const licenseMatch = sectionContent.match(/^license\s*=\s*"([^"]+)"/m);
224
+ if (licenseMatch && licenseMatch[1].trim() !== "") {
225
+ return licenseMatch[1].trim();
226
+ }
227
+ return void 0;
228
+ }
229
+ // Annotate the CommonJS export names for ESM import in node:
230
+ 0 && (module.exports = {
231
+ parseCargoManifest
232
+ });
233
+ //# sourceMappingURL=cargo.js.map