@cdxgen/cdxgen 0.0.1 → 13.0.1

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 (722) hide show
  1. package/README.md +921 -87
  2. package/bin/audit.js +239 -0
  3. package/bin/cdxgen.js +2335 -0
  4. package/bin/convert.js +220 -0
  5. package/bin/evinse.js +353 -0
  6. package/bin/hbom.js +504 -0
  7. package/bin/repl.js +2224 -0
  8. package/bin/sign.js +195 -0
  9. package/bin/tracebom.js +303 -0
  10. package/bin/validate.js +268 -0
  11. package/bin/verify.js +189 -0
  12. package/data/README.md +307 -0
  13. package/data/bom-1.4.schema.json +1605 -0
  14. package/data/bom-1.5.schema.json +3660 -0
  15. package/data/bom-1.6.schema.json +5511 -0
  16. package/data/bom-1.7.schema.json +6700 -0
  17. package/data/cbomosdb-queries.json +68 -0
  18. package/data/component-tags.json +339 -0
  19. package/data/container-knowledge-index.json +125 -0
  20. package/data/cosdb-queries.json +17 -0
  21. package/data/crypto-oid.json +1998 -0
  22. package/data/cryptography-defs.json +3793 -0
  23. package/data/cryptography-defs.schema.json +576 -0
  24. package/data/cyclonedx-2.0-bundled.schema.json +7182 -0
  25. package/data/frameworks-list.json +219 -0
  26. package/data/glibc-stdlib.json +117 -0
  27. package/data/gtfobins-index.json +6296 -0
  28. package/data/helpers/init.gradle +71 -0
  29. package/data/jsf-0.82.schema.json +211 -0
  30. package/data/known-licenses.json +82 -0
  31. package/data/lic-mapping.json +338 -0
  32. package/data/license-aliases.json +6624 -0
  33. package/data/license-db.json +39059 -0
  34. package/data/license-deprecations.json +302 -0
  35. package/data/lolbas-index.json +150 -0
  36. package/data/predictive-audit-allowlist.json +11 -0
  37. package/data/pypi-pkg-aliases.json +1199 -0
  38. package/data/python-stdlib.json +308 -0
  39. package/data/queries-darwin.json +193 -0
  40. package/data/queries-win.json +257 -0
  41. package/data/queries.json +268 -0
  42. package/data/ruby-known-modules.json +281 -0
  43. package/data/rules/ai-agent-governance.yaml +323 -0
  44. package/data/rules/ai-bom.yaml +268 -0
  45. package/data/rules/ai-oversight.yaml +186 -0
  46. package/data/rules/ai-provenance.yaml +92 -0
  47. package/data/rules/asar-archives.yaml +150 -0
  48. package/data/rules/cbom-security.yaml +165 -0
  49. package/data/rules/chrome-extensions.yaml +248 -0
  50. package/data/rules/ci-permissions.yaml +802 -0
  51. package/data/rules/container-risk.yaml +353 -0
  52. package/data/rules/dependency-sources.yaml +236 -0
  53. package/data/rules/golem-go.yaml +229 -0
  54. package/data/rules/hbom-compliance.yaml +325 -0
  55. package/data/rules/hbom-performance.yaml +307 -0
  56. package/data/rules/hbom-security.yaml +248 -0
  57. package/data/rules/host-topology.yaml +165 -0
  58. package/data/rules/mcp-servers.yaml +388 -0
  59. package/data/rules/obom-runtime.yaml +1776 -0
  60. package/data/rules/package-integrity.yaml +364 -0
  61. package/data/rules/rootfs-hardening.yaml +179 -0
  62. package/data/rules/vscode-extensions.yaml +237 -0
  63. package/data/spdx-export.schema.json +6794 -0
  64. package/data/spdx-license-list.json +7449 -0
  65. package/data/spdx-licenses.json +759 -0
  66. package/data/spdx.schema.json +819 -0
  67. package/data/templates/README.md +3 -0
  68. package/data/templates/asvs-4.0.3.cdx.json +2943 -0
  69. package/data/templates/asvs-5.0.cdx.json +3046 -0
  70. package/data/templates/bsimm-v13.cdx.json +1008 -0
  71. package/data/templates/masvs-2.0.0.cdx.json +225 -0
  72. package/data/templates/nist-ssdf-1.1.cdx.json +828 -0
  73. package/data/templates/pcissc-secure-slc-1.1.cdx.json +1027 -0
  74. package/data/templates/scvs-1.0.0.cdx.json +813 -0
  75. package/data/templates/ssaf-DRAFT-2023-11.cdx.json +127 -0
  76. package/data/vendor-alias.json +41967 -0
  77. package/data/wrapdb-releases.json +4227 -0
  78. package/index.cjs +15 -0
  79. package/lib/audit/index.js +2800 -0
  80. package/lib/audit/progress.js +114 -0
  81. package/lib/audit/reporters.js +937 -0
  82. package/lib/audit/scoring.js +560 -0
  83. package/lib/audit/targets.js +798 -0
  84. package/lib/cli/bomAssembly.js +1882 -0
  85. package/lib/cli/cliOptions.js +543 -0
  86. package/lib/cli/index.js +2759 -0
  87. package/lib/cli/jsBom.js +2087 -0
  88. package/lib/cli/jvmBom.js +1858 -0
  89. package/lib/cli/managedBom.js +2083 -0
  90. package/lib/cli/nativeBom.js +2125 -0
  91. package/lib/core/activity.js +1087 -0
  92. package/lib/core/env.js +719 -0
  93. package/lib/core/fs.js +1058 -0
  94. package/lib/core/httpClient.js +730 -0
  95. package/lib/core/logger.js +280 -0
  96. package/lib/core/parallel.js +323 -0
  97. package/lib/core/paths.js +70 -0
  98. package/lib/core/projectConfig.js +122 -0
  99. package/lib/core/propertySanitizer.js +174 -0
  100. package/lib/core/spdx.js +5 -0
  101. package/lib/core/state.js +59 -0
  102. package/lib/core/text.js +207 -0
  103. package/lib/core/ui.js +920 -0
  104. package/lib/core/urls.js +84 -0
  105. package/lib/ecosystems/asarutils.js +1636 -0
  106. package/lib/ecosystems/bunutils.js +402 -0
  107. package/lib/ecosystems/caxa.js +77 -0
  108. package/lib/ecosystems/chromextutils.js +1174 -0
  109. package/lib/ecosystems/cmakeResolver.js +587 -0
  110. package/lib/ecosystems/cppEvidence.js +305 -0
  111. package/lib/ecosystems/denoutils.js +1094 -0
  112. package/lib/ecosystems/dotnetutils.js +132 -0
  113. package/lib/ecosystems/ecosystems.js +2772 -0
  114. package/lib/ecosystems/golem.js +1807 -0
  115. package/lib/ecosystems/gradleutils.js +1048 -0
  116. package/lib/ecosystems/jsEvidence.js +317 -0
  117. package/lib/ecosystems/npmutils.js +586 -0
  118. package/lib/ecosystems/parsers-bazel.js +875 -0
  119. package/lib/ecosystems/parsers-dotnet.js +1430 -0
  120. package/lib/ecosystems/parsers-gleam.js +302 -0
  121. package/lib/ecosystems/parsers-go.js +818 -0
  122. package/lib/ecosystems/parsers-js.js +4222 -0
  123. package/lib/ecosystems/parsers-jvm.js +948 -0
  124. package/lib/ecosystems/parsers-misc.js +3191 -0
  125. package/lib/ecosystems/parsers-python.js +2070 -0
  126. package/lib/ecosystems/parsers-rust.js +1294 -0
  127. package/lib/ecosystems/parsers-zig.js +861 -0
  128. package/lib/ecosystems/pep770.js +341 -0
  129. package/lib/ecosystems/pylockutils.js +427 -0
  130. package/lib/ecosystems/pythonutils.js +1281 -0
  131. package/lib/ecosystems/registryProvenance.js +1003 -0
  132. package/lib/ecosystems/remote/huggingface.js +1343 -0
  133. package/lib/ecosystems/rubyutils.js +1629 -0
  134. package/lib/ecosystems/rusi.js +820 -0
  135. package/lib/ecosystems/sbtutils.js +972 -0
  136. package/lib/ecosystems/tea.js +607 -0
  137. package/lib/ecosystems/utils.js +583 -0
  138. package/lib/ecosystems/zigResolver.js +410 -0
  139. package/lib/evinser/db.js +145 -0
  140. package/lib/evinser/evinser.js +2362 -0
  141. package/lib/evinser/scalasem.js +65 -0
  142. package/lib/evinser/swiftsem.js +767 -0
  143. package/lib/helpers/annotationFormatter.js +84 -0
  144. package/lib/helpers/bomSigner.js +312 -0
  145. package/lib/helpers/exportUtils.js +160 -0
  146. package/lib/helpers/remote/dependency-track.js +117 -0
  147. package/lib/helpers/versutils.js +202 -0
  148. package/lib/helpers/vsixutils.js +1069 -0
  149. package/lib/inventory/agentFormulationParser.js +322 -0
  150. package/lib/inventory/aiCollector.js +2140 -0
  151. package/lib/inventory/aiInventory.js +414 -0
  152. package/lib/inventory/aiModelVariants.js +121 -0
  153. package/lib/inventory/aiOversightCollector.js +661 -0
  154. package/lib/inventory/aiProvenanceCollector.js +822 -0
  155. package/lib/inventory/analyzer.js +6089 -0
  156. package/lib/inventory/analyzerScope.js +807 -0
  157. package/lib/inventory/astWorker.js +20 -0
  158. package/lib/inventory/atomUtils.js +1092 -0
  159. package/lib/inventory/auditCategories.js +192 -0
  160. package/lib/inventory/bomUtils.js +369 -0
  161. package/lib/inventory/cacheCommands.js +182 -0
  162. package/lib/inventory/cacheDir.js +104 -0
  163. package/lib/inventory/cbomutils.js +590 -0
  164. package/lib/inventory/cdxrs.js +434 -0
  165. package/lib/inventory/ciParsers/azurePipelines.js +295 -0
  166. package/lib/inventory/ciParsers/circleCi.js +286 -0
  167. package/lib/inventory/ciParsers/common.js +24 -0
  168. package/lib/inventory/ciParsers/githubActions.js +2434 -0
  169. package/lib/inventory/ciParsers/gitlabCi.js +213 -0
  170. package/lib/inventory/ciParsers/jenkins.js +180 -0
  171. package/lib/inventory/citations.js +234 -0
  172. package/lib/inventory/communityAiConfigParser.js +756 -0
  173. package/lib/inventory/containerRisk.js +204 -0
  174. package/lib/inventory/cryptoAlgorithmFamily.js +258 -0
  175. package/lib/inventory/deps.js +807 -0
  176. package/lib/inventory/depsUtils.js +588 -0
  177. package/lib/inventory/display.js +2128 -0
  178. package/lib/inventory/dosai.js +601 -0
  179. package/lib/inventory/dosaiParsers.js +154 -0
  180. package/lib/inventory/dynamic.js +145 -0
  181. package/lib/inventory/envcontext.js +1793 -0
  182. package/lib/inventory/evidenceUtils.js +774 -0
  183. package/lib/inventory/fetchBatch.js +779 -0
  184. package/lib/inventory/fetchRate.js +255 -0
  185. package/lib/inventory/forgeEnricher.js +300 -0
  186. package/lib/inventory/formulationParsers.js +422 -0
  187. package/lib/inventory/gtfobins.js +339 -0
  188. package/lib/inventory/hbom.js +719 -0
  189. package/lib/inventory/hbomAnalysis.js +310 -0
  190. package/lib/inventory/hbomLoader.js +35 -0
  191. package/lib/inventory/hostTopology.js +835 -0
  192. package/lib/inventory/inventoryStats.js +100 -0
  193. package/lib/inventory/jsonLike.js +121 -0
  194. package/lib/inventory/licenseEnhancer.js +918 -0
  195. package/lib/inventory/lolbas.js +285 -0
  196. package/lib/inventory/mcp.js +253 -0
  197. package/lib/inventory/mcpConfigParser.js +683 -0
  198. package/lib/inventory/mcpDiscovery.js +112 -0
  199. package/lib/inventory/mcpPinning.js +209 -0
  200. package/lib/inventory/osPackageResolver.js +493 -0
  201. package/lib/inventory/osinfo.js +383 -0
  202. package/lib/inventory/osqueryTransform.js +274 -0
  203. package/lib/inventory/plugins.js +466 -0
  204. package/lib/inventory/protobom.js +231 -0
  205. package/lib/inventory/protobomLoader.js +43 -0
  206. package/lib/inventory/provenanceUtils.js +224 -0
  207. package/lib/inventory/purl.js +749 -0
  208. package/lib/inventory/rustFormulationParser.js +339 -0
  209. package/lib/inventory/sbomDocument.js +340 -0
  210. package/lib/inventory/source.js +1488 -0
  211. package/lib/inventory/spdx.js +361 -0
  212. package/lib/inventory/spdxExpression.js +512 -0
  213. package/lib/inventory/spdxUtils.js +107 -0
  214. package/lib/inventory/table.js +267 -0
  215. package/lib/inventory/traceRunner.js +439 -0
  216. package/lib/inventory/unicodeScan.js +147 -0
  217. package/lib/managers/binary.js +3459 -0
  218. package/lib/managers/containerutils.js +125 -0
  219. package/lib/managers/docker.js +2145 -0
  220. package/lib/managers/dockerConnection.js +162 -0
  221. package/lib/managers/oci.js +704 -0
  222. package/lib/managers/piptree.js +267 -0
  223. package/lib/parsers/cmakeCache.js +199 -0
  224. package/lib/parsers/gguf.js +492 -0
  225. package/lib/parsers/gitAiNotes.js +233 -0
  226. package/lib/parsers/gitmodules.js +239 -0
  227. package/lib/parsers/htmlExtract.js +610 -0
  228. package/lib/parsers/huggingfaceManifest.js +551 -0
  229. package/lib/parsers/huggingfaceUtils.js +506 -0
  230. package/lib/parsers/iri.js +618 -0
  231. package/lib/parsers/npmrc.js +99 -0
  232. package/lib/parsers/ollama.js +101 -0
  233. package/lib/parsers/xml.js +841 -0
  234. package/lib/server/openapi.yaml +433 -0
  235. package/lib/server/server.js +616 -0
  236. package/lib/stages/postgen/annotator.js +977 -0
  237. package/lib/stages/postgen/auditBom.js +468 -0
  238. package/lib/stages/postgen/postgen.js +1239 -0
  239. package/lib/stages/postgen/ruleEngine.js +731 -0
  240. package/lib/stages/postgen/sortBom.js +195 -0
  241. package/lib/stages/postgen/spdxConverter.js +796 -0
  242. package/lib/stages/postgen/specVersionCompat.js +703 -0
  243. package/lib/stages/pregen/envAudit.js +388 -0
  244. package/lib/stages/pregen/pregen.js +637 -0
  245. package/lib/third-party/README.md +9 -0
  246. package/lib/third-party/arborist/CHANGELOG.md +1109 -0
  247. package/lib/third-party/arborist/LICENSE.md +20 -0
  248. package/lib/third-party/arborist/README.md +315 -0
  249. package/lib/third-party/arborist/lib/arborist/index.js +258 -0
  250. package/lib/third-party/arborist/lib/arborist/load-actual.js +605 -0
  251. package/lib/third-party/arborist/lib/arborist/load-virtual.js +300 -0
  252. package/lib/third-party/arborist/lib/bin-links.js +120 -0
  253. package/lib/third-party/arborist/lib/calc-dep-flags.js +130 -0
  254. package/lib/third-party/arborist/lib/case-insensitive-map.js +51 -0
  255. package/lib/third-party/arborist/lib/consistent-resolve.js +42 -0
  256. package/lib/third-party/arborist/lib/debug.js +50 -0
  257. package/lib/third-party/arborist/lib/dep-valid.js +190 -0
  258. package/lib/third-party/arborist/lib/edge.js +417 -0
  259. package/lib/third-party/arborist/lib/from-path.js +36 -0
  260. package/lib/third-party/arborist/lib/gather-dep-set.js +43 -0
  261. package/lib/third-party/arborist/lib/index.js +22 -0
  262. package/lib/third-party/arborist/lib/inventory.js +138 -0
  263. package/lib/third-party/arborist/lib/link.js +169 -0
  264. package/lib/third-party/arborist/lib/node.js +1673 -0
  265. package/lib/third-party/arborist/lib/npm-extension.js +45 -0
  266. package/lib/third-party/arborist/lib/override-resolves.js +11 -0
  267. package/lib/third-party/arborist/lib/override-set.js +319 -0
  268. package/lib/third-party/arborist/lib/package-extensions.js +289 -0
  269. package/lib/third-party/arborist/lib/printable.js +210 -0
  270. package/lib/third-party/arborist/lib/proc-log.js +30 -0
  271. package/lib/third-party/arborist/lib/realpath.js +100 -0
  272. package/lib/third-party/arborist/lib/relpath.js +4 -0
  273. package/lib/third-party/arborist/lib/shrinkwrap.js +1291 -0
  274. package/lib/third-party/arborist/lib/spec-from-lock.js +34 -0
  275. package/lib/third-party/arborist/lib/tree-check.js +165 -0
  276. package/lib/third-party/arborist/lib/validate-npm-package-name.js +107 -0
  277. package/lib/third-party/arborist/lib/version-from-tgz.js +51 -0
  278. package/lib/third-party/arborist/lib/yarn-lock.js +397 -0
  279. package/lib/validator/bomValidator.js +985 -0
  280. package/lib/validator/complianceEngine.js +241 -0
  281. package/lib/validator/complianceRules.js +1680 -0
  282. package/lib/validator/generated/runtime.mjs +17 -0
  283. package/lib/validator/generated/validate-1.6.mjs +21258 -0
  284. package/lib/validator/generated/validate-1.7.mjs +24803 -0
  285. package/lib/validator/generated/validate-2.0.mjs +22931 -0
  286. package/lib/validator/index.js +246 -0
  287. package/lib/validator/reporters/annotations.js +142 -0
  288. package/lib/validator/reporters/console.js +160 -0
  289. package/lib/validator/reporters/index.js +41 -0
  290. package/lib/validator/reporters/json.js +37 -0
  291. package/lib/validator/reporters/sarif.js +184 -0
  292. package/package.json +209 -26
  293. package/types/bin/audit.d.ts +3 -0
  294. package/types/bin/audit.d.ts.map +1 -0
  295. package/types/bin/cdxgen.d.ts +3 -0
  296. package/types/bin/cdxgen.d.ts.map +1 -0
  297. package/types/bin/convert.d.ts +3 -0
  298. package/types/bin/convert.d.ts.map +1 -0
  299. package/types/bin/evinse.d.ts +3 -0
  300. package/types/bin/evinse.d.ts.map +1 -0
  301. package/types/bin/hbom.d.ts +3 -0
  302. package/types/bin/hbom.d.ts.map +1 -0
  303. package/types/bin/repl.d.ts +3 -0
  304. package/types/bin/repl.d.ts.map +1 -0
  305. package/types/bin/sign.d.ts +3 -0
  306. package/types/bin/sign.d.ts.map +1 -0
  307. package/types/bin/tracebom.d.ts +3 -0
  308. package/types/bin/tracebom.d.ts.map +1 -0
  309. package/types/bin/validate.d.ts +14 -0
  310. package/types/bin/validate.d.ts.map +1 -0
  311. package/types/bin/verify.d.ts +3 -0
  312. package/types/bin/verify.d.ts.map +1 -0
  313. package/types/lib/audit/index.d.ts +153 -0
  314. package/types/lib/audit/index.d.ts.map +1 -0
  315. package/types/lib/audit/progress.d.ts +31 -0
  316. package/types/lib/audit/progress.d.ts.map +1 -0
  317. package/types/lib/audit/reporters.d.ts +62 -0
  318. package/types/lib/audit/reporters.d.ts.map +1 -0
  319. package/types/lib/audit/scoring.d.ts +36 -0
  320. package/types/lib/audit/scoring.d.ts.map +1 -0
  321. package/types/lib/audit/targets.d.ts +77 -0
  322. package/types/lib/audit/targets.d.ts.map +1 -0
  323. package/types/lib/cli/bomAssembly.d.ts +329 -0
  324. package/types/lib/cli/bomAssembly.d.ts.map +1 -0
  325. package/types/lib/cli/cliOptions.d.ts +156 -0
  326. package/types/lib/cli/cliOptions.d.ts.map +1 -0
  327. package/types/lib/cli/index.d.ts +107 -0
  328. package/types/lib/cli/index.d.ts.map +1 -0
  329. package/types/lib/cli/jsBom.d.ts +94 -0
  330. package/types/lib/cli/jsBom.d.ts.map +1 -0
  331. package/types/lib/cli/jvmBom.d.ts +54 -0
  332. package/types/lib/cli/jvmBom.d.ts.map +1 -0
  333. package/types/lib/cli/managedBom.d.ts +105 -0
  334. package/types/lib/cli/managedBom.d.ts.map +1 -0
  335. package/types/lib/cli/nativeBom.d.ts +143 -0
  336. package/types/lib/cli/nativeBom.d.ts.map +1 -0
  337. package/types/lib/core/activity.d.ts +178 -0
  338. package/types/lib/core/activity.d.ts.map +1 -0
  339. package/types/lib/core/env.d.ts +192 -0
  340. package/types/lib/core/env.d.ts.map +1 -0
  341. package/types/lib/core/fs.d.ts +158 -0
  342. package/types/lib/core/fs.d.ts.map +1 -0
  343. package/types/lib/core/httpClient.d.ts +149 -0
  344. package/types/lib/core/httpClient.d.ts.map +1 -0
  345. package/types/lib/core/logger.d.ts +50 -0
  346. package/types/lib/core/logger.d.ts.map +1 -0
  347. package/types/lib/core/parallel.d.ts +95 -0
  348. package/types/lib/core/parallel.d.ts.map +1 -0
  349. package/types/lib/core/paths.d.ts +36 -0
  350. package/types/lib/core/paths.d.ts.map +1 -0
  351. package/types/lib/core/projectConfig.d.ts +23 -0
  352. package/types/lib/core/projectConfig.d.ts.map +1 -0
  353. package/types/lib/core/propertySanitizer.d.ts +23 -0
  354. package/types/lib/core/propertySanitizer.d.ts.map +1 -0
  355. package/types/lib/core/spdx.d.ts +5 -0
  356. package/types/lib/core/spdx.d.ts.map +1 -0
  357. package/types/lib/core/state.d.ts +20 -0
  358. package/types/lib/core/state.d.ts.map +1 -0
  359. package/types/lib/core/text.d.ts +78 -0
  360. package/types/lib/core/text.d.ts.map +1 -0
  361. package/types/lib/core/ui.d.ts +87 -0
  362. package/types/lib/core/ui.d.ts.map +1 -0
  363. package/types/lib/core/urls.d.ts +43 -0
  364. package/types/lib/core/urls.d.ts.map +1 -0
  365. package/types/lib/ecosystems/asarutils.d.ts +71 -0
  366. package/types/lib/ecosystems/asarutils.d.ts.map +1 -0
  367. package/types/lib/ecosystems/bunutils.d.ts +38 -0
  368. package/types/lib/ecosystems/bunutils.d.ts.map +1 -0
  369. package/types/lib/ecosystems/caxa.d.ts +8 -0
  370. package/types/lib/ecosystems/caxa.d.ts.map +1 -0
  371. package/types/lib/ecosystems/chromextutils.d.ts +97 -0
  372. package/types/lib/ecosystems/chromextutils.d.ts.map +1 -0
  373. package/types/lib/ecosystems/cmakeResolver.d.ts +176 -0
  374. package/types/lib/ecosystems/cmakeResolver.d.ts.map +1 -0
  375. package/types/lib/ecosystems/cppEvidence.d.ts +35 -0
  376. package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -0
  377. package/types/lib/ecosystems/denoutils.d.ts +76 -0
  378. package/types/lib/ecosystems/denoutils.d.ts.map +1 -0
  379. package/types/lib/ecosystems/dotnetutils.d.ts +45 -0
  380. package/types/lib/ecosystems/dotnetutils.d.ts.map +1 -0
  381. package/types/lib/ecosystems/ecosystems.d.ts +279 -0
  382. package/types/lib/ecosystems/ecosystems.d.ts.map +1 -0
  383. package/types/lib/ecosystems/golem.d.ts +60 -0
  384. package/types/lib/ecosystems/golem.d.ts.map +1 -0
  385. package/types/lib/ecosystems/gradleutils.d.ts +139 -0
  386. package/types/lib/ecosystems/gradleutils.d.ts.map +1 -0
  387. package/types/lib/ecosystems/jsEvidence.d.ts +17 -0
  388. package/types/lib/ecosystems/jsEvidence.d.ts.map +1 -0
  389. package/types/lib/ecosystems/npmutils.d.ts +183 -0
  390. package/types/lib/ecosystems/npmutils.d.ts.map +1 -0
  391. package/types/lib/ecosystems/parsers-bazel.d.ts +36 -0
  392. package/types/lib/ecosystems/parsers-bazel.d.ts.map +1 -0
  393. package/types/lib/ecosystems/parsers-dotnet.d.ts +116 -0
  394. package/types/lib/ecosystems/parsers-dotnet.d.ts.map +1 -0
  395. package/types/lib/ecosystems/parsers-gleam.d.ts +33 -0
  396. package/types/lib/ecosystems/parsers-gleam.d.ts.map +1 -0
  397. package/types/lib/ecosystems/parsers-go.d.ts +92 -0
  398. package/types/lib/ecosystems/parsers-go.d.ts.map +1 -0
  399. package/types/lib/ecosystems/parsers-js.d.ts +242 -0
  400. package/types/lib/ecosystems/parsers-js.d.ts.map +1 -0
  401. package/types/lib/ecosystems/parsers-jvm.d.ts +100 -0
  402. package/types/lib/ecosystems/parsers-jvm.d.ts.map +1 -0
  403. package/types/lib/ecosystems/parsers-misc.d.ts +450 -0
  404. package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -0
  405. package/types/lib/ecosystems/parsers-python.d.ts +145 -0
  406. package/types/lib/ecosystems/parsers-python.d.ts.map +1 -0
  407. package/types/lib/ecosystems/parsers-rust.d.ts +56 -0
  408. package/types/lib/ecosystems/parsers-rust.d.ts.map +1 -0
  409. package/types/lib/ecosystems/parsers-zig.d.ts +83 -0
  410. package/types/lib/ecosystems/parsers-zig.d.ts.map +1 -0
  411. package/types/lib/ecosystems/pep770.d.ts +38 -0
  412. package/types/lib/ecosystems/pep770.d.ts.map +1 -0
  413. package/types/lib/ecosystems/pylockutils.d.ts +68 -0
  414. package/types/lib/ecosystems/pylockutils.d.ts.map +1 -0
  415. package/types/lib/ecosystems/pythonutils.d.ts +70 -0
  416. package/types/lib/ecosystems/pythonutils.d.ts.map +1 -0
  417. package/types/lib/ecosystems/registryProvenance.d.ts +26 -0
  418. package/types/lib/ecosystems/registryProvenance.d.ts.map +1 -0
  419. package/types/lib/ecosystems/remote/huggingface.d.ts +31 -0
  420. package/types/lib/ecosystems/remote/huggingface.d.ts.map +1 -0
  421. package/types/lib/ecosystems/rubyutils.d.ts +182 -0
  422. package/types/lib/ecosystems/rubyutils.d.ts.map +1 -0
  423. package/types/lib/ecosystems/rusi.d.ts +40 -0
  424. package/types/lib/ecosystems/rusi.d.ts.map +1 -0
  425. package/types/lib/ecosystems/sbtutils.d.ts +179 -0
  426. package/types/lib/ecosystems/sbtutils.d.ts.map +1 -0
  427. package/types/lib/ecosystems/tea.d.ts +180 -0
  428. package/types/lib/ecosystems/tea.d.ts.map +1 -0
  429. package/types/lib/ecosystems/utils.d.ts +41 -0
  430. package/types/lib/ecosystems/utils.d.ts.map +1 -0
  431. package/types/lib/ecosystems/zigResolver.d.ts +70 -0
  432. package/types/lib/ecosystems/zigResolver.d.ts.map +1 -0
  433. package/types/lib/evinser/db.d.ts +17 -0
  434. package/types/lib/evinser/db.d.ts.map +1 -0
  435. package/types/lib/evinser/evinser.d.ts +354 -0
  436. package/types/lib/evinser/evinser.d.ts.map +1 -0
  437. package/types/lib/evinser/scalasem.d.ts +15 -0
  438. package/types/lib/evinser/scalasem.d.ts.map +1 -0
  439. package/types/lib/evinser/swiftsem.d.ts +103 -0
  440. package/types/lib/evinser/swiftsem.d.ts.map +1 -0
  441. package/types/lib/helpers/annotationFormatter.d.ts +23 -0
  442. package/types/lib/helpers/annotationFormatter.d.ts.map +1 -0
  443. package/types/lib/helpers/bomSigner.d.ts +28 -0
  444. package/types/lib/helpers/bomSigner.d.ts.map +1 -0
  445. package/types/lib/helpers/exportUtils.d.ts +52 -0
  446. package/types/lib/helpers/exportUtils.d.ts.map +1 -0
  447. package/types/lib/helpers/remote/dependency-track.d.ts +23 -0
  448. package/types/lib/helpers/remote/dependency-track.d.ts.map +1 -0
  449. package/types/lib/helpers/versutils.d.ts +8 -0
  450. package/types/lib/helpers/versutils.d.ts.map +1 -0
  451. package/types/lib/helpers/vsixutils.d.ts +130 -0
  452. package/types/lib/helpers/vsixutils.d.ts.map +1 -0
  453. package/types/lib/inventory/agentFormulationParser.d.ts +21 -0
  454. package/types/lib/inventory/agentFormulationParser.d.ts.map +1 -0
  455. package/types/lib/inventory/aiCollector.d.ts +61 -0
  456. package/types/lib/inventory/aiCollector.d.ts.map +1 -0
  457. package/types/lib/inventory/aiInventory.d.ts +103 -0
  458. package/types/lib/inventory/aiInventory.d.ts.map +1 -0
  459. package/types/lib/inventory/aiModelVariants.d.ts +31 -0
  460. package/types/lib/inventory/aiModelVariants.d.ts.map +1 -0
  461. package/types/lib/inventory/aiOversightCollector.d.ts +28 -0
  462. package/types/lib/inventory/aiOversightCollector.d.ts.map +1 -0
  463. package/types/lib/inventory/aiProvenanceCollector.d.ts +13 -0
  464. package/types/lib/inventory/aiProvenanceCollector.d.ts.map +1 -0
  465. package/types/lib/inventory/analyzer.d.ts +157 -0
  466. package/types/lib/inventory/analyzer.d.ts.map +1 -0
  467. package/types/lib/inventory/analyzerScope.d.ts +106 -0
  468. package/types/lib/inventory/analyzerScope.d.ts.map +1 -0
  469. package/types/lib/inventory/astWorker.d.ts +9 -0
  470. package/types/lib/inventory/astWorker.d.ts.map +1 -0
  471. package/types/lib/inventory/atomUtils.d.ts +159 -0
  472. package/types/lib/inventory/atomUtils.d.ts.map +1 -0
  473. package/types/lib/inventory/auditCategories.d.ts +80 -0
  474. package/types/lib/inventory/auditCategories.d.ts.map +1 -0
  475. package/types/lib/inventory/bomUtils.d.ts +145 -0
  476. package/types/lib/inventory/bomUtils.d.ts.map +1 -0
  477. package/types/lib/inventory/cacheCommands.d.ts +28 -0
  478. package/types/lib/inventory/cacheCommands.d.ts.map +1 -0
  479. package/types/lib/inventory/cacheDir.d.ts +55 -0
  480. package/types/lib/inventory/cacheDir.d.ts.map +1 -0
  481. package/types/lib/inventory/cbomutils.d.ts +37 -0
  482. package/types/lib/inventory/cbomutils.d.ts.map +1 -0
  483. package/types/lib/inventory/cdxrs.d.ts +90 -0
  484. package/types/lib/inventory/cdxrs.d.ts.map +1 -0
  485. package/types/lib/inventory/ciParsers/azurePipelines.d.ts +27 -0
  486. package/types/lib/inventory/ciParsers/azurePipelines.d.ts.map +1 -0
  487. package/types/lib/inventory/ciParsers/circleCi.d.ts +27 -0
  488. package/types/lib/inventory/ciParsers/circleCi.d.ts.map +1 -0
  489. package/types/lib/inventory/ciParsers/common.d.ts +11 -0
  490. package/types/lib/inventory/ciParsers/common.d.ts.map +1 -0
  491. package/types/lib/inventory/ciParsers/githubActions.d.ts +38 -0
  492. package/types/lib/inventory/ciParsers/githubActions.d.ts.map +1 -0
  493. package/types/lib/inventory/ciParsers/gitlabCi.d.ts +26 -0
  494. package/types/lib/inventory/ciParsers/gitlabCi.d.ts.map +1 -0
  495. package/types/lib/inventory/ciParsers/jenkins.d.ts +26 -0
  496. package/types/lib/inventory/ciParsers/jenkins.d.ts.map +1 -0
  497. package/types/lib/inventory/citations.d.ts +90 -0
  498. package/types/lib/inventory/citations.d.ts.map +1 -0
  499. package/types/lib/inventory/communityAiConfigParser.d.ts +14 -0
  500. package/types/lib/inventory/communityAiConfigParser.d.ts.map +1 -0
  501. package/types/lib/inventory/containerRisk.d.ts +20 -0
  502. package/types/lib/inventory/containerRisk.d.ts.map +1 -0
  503. package/types/lib/inventory/cryptoAlgorithmFamily.d.ts +37 -0
  504. package/types/lib/inventory/cryptoAlgorithmFamily.d.ts.map +1 -0
  505. package/types/lib/inventory/deps.d.ts +140 -0
  506. package/types/lib/inventory/deps.d.ts.map +1 -0
  507. package/types/lib/inventory/depsUtils.d.ts +74 -0
  508. package/types/lib/inventory/depsUtils.d.ts.map +1 -0
  509. package/types/lib/inventory/display.d.ts +227 -0
  510. package/types/lib/inventory/display.d.ts.map +1 -0
  511. package/types/lib/inventory/dosai.d.ts +130 -0
  512. package/types/lib/inventory/dosai.d.ts.map +1 -0
  513. package/types/lib/inventory/dosaiParsers.d.ts +59 -0
  514. package/types/lib/inventory/dosaiParsers.d.ts.map +1 -0
  515. package/types/lib/inventory/dynamic.d.ts +25 -0
  516. package/types/lib/inventory/dynamic.d.ts.map +1 -0
  517. package/types/lib/inventory/envcontext.d.ts +377 -0
  518. package/types/lib/inventory/envcontext.d.ts.map +1 -0
  519. package/types/lib/inventory/evidenceUtils.d.ts +74 -0
  520. package/types/lib/inventory/evidenceUtils.d.ts.map +1 -0
  521. package/types/lib/inventory/fetchBatch.d.ts +127 -0
  522. package/types/lib/inventory/fetchBatch.d.ts.map +1 -0
  523. package/types/lib/inventory/fetchRate.d.ts +118 -0
  524. package/types/lib/inventory/fetchRate.d.ts.map +1 -0
  525. package/types/lib/inventory/forgeEnricher.d.ts +31 -0
  526. package/types/lib/inventory/forgeEnricher.d.ts.map +1 -0
  527. package/types/lib/inventory/formulationParsers.d.ts +50 -0
  528. package/types/lib/inventory/formulationParsers.d.ts.map +1 -0
  529. package/types/lib/inventory/gtfobins.d.ts +27 -0
  530. package/types/lib/inventory/gtfobins.d.ts.map +1 -0
  531. package/types/lib/inventory/hbom.d.ts +58 -0
  532. package/types/lib/inventory/hbom.d.ts.map +1 -0
  533. package/types/lib/inventory/hbomAnalysis.d.ts +56 -0
  534. package/types/lib/inventory/hbomAnalysis.d.ts.map +1 -0
  535. package/types/lib/inventory/hbomLoader.d.ts +7 -0
  536. package/types/lib/inventory/hbomLoader.d.ts.map +1 -0
  537. package/types/lib/inventory/hostTopology.d.ts +47 -0
  538. package/types/lib/inventory/hostTopology.d.ts.map +1 -0
  539. package/types/lib/inventory/inventoryStats.d.ts +42 -0
  540. package/types/lib/inventory/inventoryStats.d.ts.map +1 -0
  541. package/types/lib/inventory/jsonLike.d.ts +23 -0
  542. package/types/lib/inventory/jsonLike.d.ts.map +1 -0
  543. package/types/lib/inventory/licenseEnhancer.d.ts +70 -0
  544. package/types/lib/inventory/licenseEnhancer.d.ts.map +1 -0
  545. package/types/lib/inventory/lolbas.d.ts +16 -0
  546. package/types/lib/inventory/lolbas.d.ts.map +1 -0
  547. package/types/lib/inventory/mcp.d.ts +29 -0
  548. package/types/lib/inventory/mcp.d.ts.map +1 -0
  549. package/types/lib/inventory/mcpConfigParser.d.ts +20 -0
  550. package/types/lib/inventory/mcpConfigParser.d.ts.map +1 -0
  551. package/types/lib/inventory/mcpDiscovery.d.ts +33 -0
  552. package/types/lib/inventory/mcpDiscovery.d.ts.map +1 -0
  553. package/types/lib/inventory/mcpPinning.d.ts +11 -0
  554. package/types/lib/inventory/mcpPinning.d.ts.map +1 -0
  555. package/types/lib/inventory/osPackageResolver.d.ts +49 -0
  556. package/types/lib/inventory/osPackageResolver.d.ts.map +1 -0
  557. package/types/lib/inventory/osinfo.d.ts +201 -0
  558. package/types/lib/inventory/osinfo.d.ts.map +1 -0
  559. package/types/lib/inventory/osqueryTransform.d.ts +84 -0
  560. package/types/lib/inventory/osqueryTransform.d.ts.map +1 -0
  561. package/types/lib/inventory/plugins.d.ts +58 -0
  562. package/types/lib/inventory/plugins.d.ts.map +1 -0
  563. package/types/lib/inventory/protobom.d.ts +71 -0
  564. package/types/lib/inventory/protobom.d.ts.map +1 -0
  565. package/types/lib/inventory/protobomLoader.d.ts +17 -0
  566. package/types/lib/inventory/protobomLoader.d.ts.map +1 -0
  567. package/types/lib/inventory/provenanceUtils.d.ts +98 -0
  568. package/types/lib/inventory/provenanceUtils.d.ts.map +1 -0
  569. package/types/lib/inventory/purl.d.ts +313 -0
  570. package/types/lib/inventory/purl.d.ts.map +1 -0
  571. package/types/lib/inventory/rustFormulationParser.d.ts +17 -0
  572. package/types/lib/inventory/rustFormulationParser.d.ts.map +1 -0
  573. package/types/lib/inventory/sbomDocument.d.ts +59 -0
  574. package/types/lib/inventory/sbomDocument.d.ts.map +1 -0
  575. package/types/lib/inventory/source.d.ts +163 -0
  576. package/types/lib/inventory/source.d.ts.map +1 -0
  577. package/types/lib/inventory/spdx.d.ts +66 -0
  578. package/types/lib/inventory/spdx.d.ts.map +1 -0
  579. package/types/lib/inventory/spdxExpression.d.ts +58 -0
  580. package/types/lib/inventory/spdxExpression.d.ts.map +1 -0
  581. package/types/lib/inventory/spdxUtils.d.ts +12 -0
  582. package/types/lib/inventory/spdxUtils.d.ts.map +1 -0
  583. package/types/lib/inventory/table.d.ts +22 -0
  584. package/types/lib/inventory/table.d.ts.map +1 -0
  585. package/types/lib/inventory/traceRunner.d.ts +80 -0
  586. package/types/lib/inventory/traceRunner.d.ts.map +1 -0
  587. package/types/lib/inventory/unicodeScan.d.ts +46 -0
  588. package/types/lib/inventory/unicodeScan.d.ts.map +1 -0
  589. package/types/lib/managers/binary.d.ts +147 -0
  590. package/types/lib/managers/binary.d.ts.map +1 -0
  591. package/types/lib/managers/containerutils.d.ts +30 -0
  592. package/types/lib/managers/containerutils.d.ts.map +1 -0
  593. package/types/lib/managers/docker.d.ts +157 -0
  594. package/types/lib/managers/docker.d.ts.map +1 -0
  595. package/types/lib/managers/dockerConnection.d.ts +42 -0
  596. package/types/lib/managers/dockerConnection.d.ts.map +1 -0
  597. package/types/lib/managers/oci.d.ts +21 -0
  598. package/types/lib/managers/oci.d.ts.map +1 -0
  599. package/types/lib/managers/piptree.d.ts +13 -0
  600. package/types/lib/managers/piptree.d.ts.map +1 -0
  601. package/types/lib/parsers/cmakeCache.d.ts +70 -0
  602. package/types/lib/parsers/cmakeCache.d.ts.map +1 -0
  603. package/types/lib/parsers/gguf.d.ts +39 -0
  604. package/types/lib/parsers/gguf.d.ts.map +1 -0
  605. package/types/lib/parsers/gitAiNotes.d.ts +15 -0
  606. package/types/lib/parsers/gitAiNotes.d.ts.map +1 -0
  607. package/types/lib/parsers/gitmodules.d.ts +88 -0
  608. package/types/lib/parsers/gitmodules.d.ts.map +1 -0
  609. package/types/lib/parsers/htmlExtract.d.ts +34 -0
  610. package/types/lib/parsers/htmlExtract.d.ts.map +1 -0
  611. package/types/lib/parsers/huggingfaceManifest.d.ts +153 -0
  612. package/types/lib/parsers/huggingfaceManifest.d.ts.map +1 -0
  613. package/types/lib/parsers/huggingfaceUtils.d.ts +155 -0
  614. package/types/lib/parsers/huggingfaceUtils.d.ts.map +1 -0
  615. package/types/lib/parsers/iri.d.ts +68 -0
  616. package/types/lib/parsers/iri.d.ts.map +1 -0
  617. package/types/lib/parsers/npmrc.d.ts +33 -0
  618. package/types/lib/parsers/npmrc.d.ts.map +1 -0
  619. package/types/lib/parsers/ollama.d.ts +22 -0
  620. package/types/lib/parsers/ollama.d.ts.map +1 -0
  621. package/types/lib/parsers/xml.d.ts +47 -0
  622. package/types/lib/parsers/xml.d.ts.map +1 -0
  623. package/types/lib/server/server.d.ts +51 -0
  624. package/types/lib/server/server.d.ts.map +1 -0
  625. package/types/lib/stages/postgen/annotator.d.ts +36 -0
  626. package/types/lib/stages/postgen/annotator.d.ts.map +1 -0
  627. package/types/lib/stages/postgen/auditBom.d.ts +92 -0
  628. package/types/lib/stages/postgen/auditBom.d.ts.map +1 -0
  629. package/types/lib/stages/postgen/postgen.d.ts +59 -0
  630. package/types/lib/stages/postgen/postgen.d.ts.map +1 -0
  631. package/types/lib/stages/postgen/ruleEngine.d.ts +18 -0
  632. package/types/lib/stages/postgen/ruleEngine.d.ts.map +1 -0
  633. package/types/lib/stages/postgen/sortBom.d.ts +34 -0
  634. package/types/lib/stages/postgen/sortBom.d.ts.map +1 -0
  635. package/types/lib/stages/postgen/spdxConverter.d.ts +11 -0
  636. package/types/lib/stages/postgen/spdxConverter.d.ts.map +1 -0
  637. package/types/lib/stages/postgen/specVersionCompat.d.ts +71 -0
  638. package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -0
  639. package/types/lib/stages/pregen/envAudit.d.ts +14 -0
  640. package/types/lib/stages/pregen/envAudit.d.ts.map +1 -0
  641. package/types/lib/stages/pregen/pregen.d.ts +59 -0
  642. package/types/lib/stages/pregen/pregen.d.ts.map +1 -0
  643. package/types/lib/third-party/arborist/lib/arborist/index.d.ts +47 -0
  644. package/types/lib/third-party/arborist/lib/arborist/index.d.ts.map +1 -0
  645. package/types/lib/third-party/arborist/lib/arborist/load-actual.d.ts +4 -0
  646. package/types/lib/third-party/arborist/lib/arborist/load-actual.d.ts.map +1 -0
  647. package/types/lib/third-party/arborist/lib/arborist/load-virtual.d.ts +4 -0
  648. package/types/lib/third-party/arborist/lib/arborist/load-virtual.d.ts.map +1 -0
  649. package/types/lib/third-party/arborist/lib/bin-links.d.ts +18 -0
  650. package/types/lib/third-party/arborist/lib/bin-links.d.ts.map +1 -0
  651. package/types/lib/third-party/arborist/lib/calc-dep-flags.d.ts +3 -0
  652. package/types/lib/third-party/arborist/lib/calc-dep-flags.d.ts.map +1 -0
  653. package/types/lib/third-party/arborist/lib/case-insensitive-map.d.ts +9 -0
  654. package/types/lib/third-party/arborist/lib/case-insensitive-map.d.ts.map +1 -0
  655. package/types/lib/third-party/arborist/lib/consistent-resolve.d.ts +3 -0
  656. package/types/lib/third-party/arborist/lib/consistent-resolve.d.ts.map +1 -0
  657. package/types/lib/third-party/arborist/lib/debug.d.ts +3 -0
  658. package/types/lib/third-party/arborist/lib/debug.d.ts.map +1 -0
  659. package/types/lib/third-party/arborist/lib/dep-valid.d.ts +3 -0
  660. package/types/lib/third-party/arborist/lib/dep-valid.d.ts.map +1 -0
  661. package/types/lib/third-party/arborist/lib/edge.d.ts +46 -0
  662. package/types/lib/third-party/arborist/lib/edge.d.ts.map +1 -0
  663. package/types/lib/third-party/arborist/lib/from-path.d.ts +3 -0
  664. package/types/lib/third-party/arborist/lib/from-path.d.ts.map +1 -0
  665. package/types/lib/third-party/arborist/lib/gather-dep-set.d.ts +3 -0
  666. package/types/lib/third-party/arborist/lib/gather-dep-set.d.ts.map +1 -0
  667. package/types/lib/third-party/arborist/lib/index.d.ts +3 -0
  668. package/types/lib/third-party/arborist/lib/index.d.ts.map +1 -0
  669. package/types/lib/third-party/arborist/lib/inventory.d.ts +14 -0
  670. package/types/lib/third-party/arborist/lib/inventory.d.ts.map +1 -0
  671. package/types/lib/third-party/arborist/lib/link.d.ts +18 -0
  672. package/types/lib/third-party/arborist/lib/link.d.ts.map +1 -0
  673. package/types/lib/third-party/arborist/lib/node.d.ts +112 -0
  674. package/types/lib/third-party/arborist/lib/node.d.ts.map +1 -0
  675. package/types/lib/third-party/arborist/lib/npm-extension.d.ts +18 -0
  676. package/types/lib/third-party/arborist/lib/npm-extension.d.ts.map +1 -0
  677. package/types/lib/third-party/arborist/lib/override-resolves.d.ts +3 -0
  678. package/types/lib/third-party/arborist/lib/override-resolves.d.ts.map +1 -0
  679. package/types/lib/third-party/arborist/lib/override-set.d.ts +27 -0
  680. package/types/lib/third-party/arborist/lib/override-set.d.ts.map +1 -0
  681. package/types/lib/third-party/arborist/lib/package-extensions.d.ts +36 -0
  682. package/types/lib/third-party/arborist/lib/package-extensions.d.ts.map +1 -0
  683. package/types/lib/third-party/arborist/lib/printable.d.ts +3 -0
  684. package/types/lib/third-party/arborist/lib/printable.d.ts.map +1 -0
  685. package/types/lib/third-party/arborist/lib/proc-log.d.ts +20 -0
  686. package/types/lib/third-party/arborist/lib/proc-log.d.ts.map +1 -0
  687. package/types/lib/third-party/arborist/lib/realpath.d.ts +3 -0
  688. package/types/lib/third-party/arborist/lib/realpath.d.ts.map +1 -0
  689. package/types/lib/third-party/arborist/lib/relpath.d.ts +3 -0
  690. package/types/lib/third-party/arborist/lib/relpath.d.ts.map +1 -0
  691. package/types/lib/third-party/arborist/lib/shrinkwrap.d.ts +54 -0
  692. package/types/lib/third-party/arborist/lib/shrinkwrap.d.ts.map +1 -0
  693. package/types/lib/third-party/arborist/lib/spec-from-lock.d.ts +3 -0
  694. package/types/lib/third-party/arborist/lib/spec-from-lock.d.ts.map +1 -0
  695. package/types/lib/third-party/arborist/lib/tree-check.d.ts +3 -0
  696. package/types/lib/third-party/arborist/lib/tree-check.d.ts.map +1 -0
  697. package/types/lib/third-party/arborist/lib/validate-npm-package-name.d.ts +13 -0
  698. package/types/lib/third-party/arborist/lib/validate-npm-package-name.d.ts.map +1 -0
  699. package/types/lib/third-party/arborist/lib/version-from-tgz.d.ts +6 -0
  700. package/types/lib/third-party/arborist/lib/version-from-tgz.d.ts.map +1 -0
  701. package/types/lib/third-party/arborist/lib/yarn-lock.d.ts +35 -0
  702. package/types/lib/third-party/arborist/lib/yarn-lock.d.ts.map +1 -0
  703. package/types/lib/validator/bomValidator.d.ts +40 -0
  704. package/types/lib/validator/bomValidator.d.ts.map +1 -0
  705. package/types/lib/validator/complianceEngine.d.ts +72 -0
  706. package/types/lib/validator/complianceEngine.d.ts.map +1 -0
  707. package/types/lib/validator/complianceRules.d.ts +61 -0
  708. package/types/lib/validator/complianceRules.d.ts.map +1 -0
  709. package/types/lib/validator/index.d.ts +101 -0
  710. package/types/lib/validator/index.d.ts.map +1 -0
  711. package/types/lib/validator/reporters/annotations.d.ts +37 -0
  712. package/types/lib/validator/reporters/annotations.d.ts.map +1 -0
  713. package/types/lib/validator/reporters/console.d.ts +34 -0
  714. package/types/lib/validator/reporters/console.d.ts.map +1 -0
  715. package/types/lib/validator/reporters/index.d.ts +30 -0
  716. package/types/lib/validator/reporters/index.d.ts.map +1 -0
  717. package/types/lib/validator/reporters/json.d.ts +11 -0
  718. package/types/lib/validator/reporters/json.d.ts.map +1 -0
  719. package/types/lib/validator/reporters/sarif.d.ts +22 -0
  720. package/types/lib/validator/reporters/sarif.d.ts.map +1 -0
  721. package/mod.d.ts +0 -7
  722. package/mod.js +0 -22
@@ -0,0 +1,875 @@
1
+ import { readFileSync } from "node:fs";
2
+
3
+ import { npmPurl, tryBuildPurl } from "../inventory/purl.js";
4
+
5
+ /**
6
+ * Bazel bzlmod dependency extraction.
7
+ *
8
+ * bzlmod (`MODULE.bazel` + `MODULE.bazel.lock`) pulls dependencies from many
9
+ * ecosystems. The whole point of parsing it for an SBOM is to map each
10
+ * resolved dependency onto its true ecosystem purl so vulnerability
11
+ * advisories match — a Maven dependency pulled through bzlmod is a `pkg:maven`
12
+ * package, not a `pkg:bazel` one.
13
+ *
14
+ * Two sources are consulted:
15
+ *
16
+ * - `MODULE.bazel` (Starlark): the manifest. `bazel_dep(name, version)`
17
+ * declares Bazel Central Registry modules, which ARE the registered
18
+ * `bazel` purl type's intended target (flat name, no namespace, default
19
+ * `repository_url = https://bcr.bazel.build`). Extension calls such as
20
+ * `maven.artifact(...)` declare dependencies in their native ecosystem.
21
+ *
22
+ * - `MODULE.bazel.lock` (JSON): the resolved lock. Its structure has changed
23
+ * across `lockFileVersion`, so this parser reads defensively — a legacy
24
+ * `modules` array when present, and the modern `moduleExtensions` whose
25
+ * `generatedRepoSpecs` carry resolved Maven coordinates.
26
+ *
27
+ * `pkg:bazel/...` is used only for BCR modules. Squatting it for a Maven
28
+ * artifact would silently break every vulnerability match.
29
+ */
30
+
31
+ const BCR_DEFAULT_REPOSITORY_URL = "https://bcr.bazel.build";
32
+
33
+ /**
34
+ * Module extensions that resolve the build environment rather than the
35
+ * project's dependencies. They dominate a real lock — a `flatbuffers` lock
36
+ * generates 48 repositories from `rules_java`'s `toolchains` extension alone,
37
+ * every one of them a JDK or a Java tools archive — and listing them as
38
+ * components describes the machine that ran the build, not the software being
39
+ * built.
40
+ *
41
+ * Only `toolchains`-suffixed extensions are excluded by name. The
42
+ * `*_configure_extension` families (cc, xcode, sh, apple_cc) also describe the
43
+ * environment, but they generate `local_config_*` repositories with no
44
+ * coordinates, so they drop out on their own — whereas an extension named
45
+ * `internal_configure_extension` is how pybind11 declares a real dependency.
46
+ */
47
+ const TOOLCHAIN_EXTENSION = /%(?:[a-z_]*_)?toolchains?$/i;
48
+
49
+ /**
50
+ * Parse a `MODULE.bazel` manifest and return its BCR modules and ecosystem
51
+ * dependencies. The MODULE.bazel file is Starlark; this extractor finds calls
52
+ * by name and reads their keyword/string arguments using a balanced-paren scan
53
+ * rather than a regex, because MODULE.bazel calls can nest.
54
+ *
55
+ * @param {string} moduleFile Path to `MODULE.bazel`
56
+ * @returns {{ pkgList: object[], parentComponent: object, rootInputs: string[] }}
57
+ */
58
+ export function parseModuleBazel(moduleFile) {
59
+ let src;
60
+ try {
61
+ src = readFileSync(moduleFile, "utf-8");
62
+ } catch (error) {
63
+ console.warn(`Failed to parse ${moduleFile}: ${error.message}`);
64
+ return { pkgList: [], parentComponent: {}, rootInputs: [] };
65
+ }
66
+
67
+ const pkgList = [];
68
+ const parentComponent = {};
69
+
70
+ const moduleName = scalarArg(findFirstCall(src, "module"), "name");
71
+ const moduleVersion = scalarArg(findFirstCall(src, "module"), "version");
72
+ if (moduleName) {
73
+ Object.assign(parentComponent, {
74
+ type: "application",
75
+ name: moduleName,
76
+ ...(moduleVersion ? { version: moduleVersion } : {}),
77
+ description: `Bazel module: ${moduleName}`,
78
+ properties: [{ name: "internal:SrcFile", value: moduleFile }],
79
+ });
80
+ }
81
+
82
+ for (const call of findAllCalls(src, "bazel_dep")) {
83
+ const name = scalarArg(call, "name");
84
+ const version = scalarArg(call, "version");
85
+ const repoName = scalarArg(call, "repo_name");
86
+ if (!name || !version) continue;
87
+ pkgList.push(buildBcrPackage(repoName || name, name, version, moduleFile));
88
+ }
89
+
90
+ for (const call of findAllCalls(src, "maven.artifact")) {
91
+ const pkg = mavenPackageFromCall(call, moduleFile);
92
+ if (pkg) pkgList.push(pkg);
93
+ }
94
+ // rules_jvm_external exposes `maven.artifact`; some projects call it on a
95
+ // locally aliased handle. Catch the common alias shapes too.
96
+ for (const call of findAllCalls(src, "artifact")) {
97
+ if (looksLikeMavenArtifactCall(call)) {
98
+ const pkg = mavenPackageFromCall(call, moduleFile);
99
+ if (pkg) pkgList.push(pkg);
100
+ }
101
+ }
102
+
103
+ const rootInputs = pkgList.map((p) => p["bom-ref"]);
104
+ return { pkgList, parentComponent, rootInputs };
105
+ }
106
+
107
+ /**
108
+ * Parse a `MODULE.bazel.lock` for resolved dependencies and the module graph.
109
+ *
110
+ * @param {string} lockFile Path to `MODULE.bazel.lock`
111
+ * @returns {{ pkgList: object[], dependencies: object[] }}
112
+ */
113
+ export function parseModuleBazelLock(lockFile) {
114
+ let lock;
115
+ try {
116
+ lock = JSON.parse(readFileSync(lockFile, "utf-8"));
117
+ } catch (error) {
118
+ console.warn(`Failed to parse ${lockFile}: ${error.message}`);
119
+ return { pkgList: [], dependencies: [] };
120
+ }
121
+
122
+ const pkgList = [];
123
+ const dependencies = [];
124
+
125
+ // Legacy lockFileVersion (<= ~9) carries a resolved `modules` array.
126
+ if (Array.isArray(lock.modules)) {
127
+ const byKey = new Map();
128
+ for (const mod of lock.modules) {
129
+ const name = mod.name;
130
+ const version = mod.version;
131
+ if (!name || !version) continue;
132
+ const pkg = buildBcrPackage(
133
+ mod.repoName || name,
134
+ name,
135
+ version,
136
+ lockFile,
137
+ );
138
+ pkgList.push(pkg);
139
+ byKey.set(`${name}@${version}`, pkg["bom-ref"]);
140
+ }
141
+ for (const mod of lock.modules) {
142
+ const ref = byKey.get(`${mod.name}@${mod.version}`);
143
+ if (!ref) continue;
144
+ const dependsOn = (mod.deps || [])
145
+ .map((d) => byKey.get(`${d.name}@${d.version}`))
146
+ .filter(Boolean);
147
+ dependencies.push({ ref, dependsOn: [...new Set(dependsOn)].sort() });
148
+ }
149
+ }
150
+
151
+ // Module extensions record what each extension resolved. The entries are
152
+ // keyed by the repository name the build sees; the rule that generated them
153
+ // says which ecosystem the dependency belongs to.
154
+ for (const spec of iterateRepoSpecs(lock)) {
155
+ const pkg = packageFromRepoSpec(spec.repoName, spec.spec, lockFile);
156
+ if (pkg) pkgList.push(pkg);
157
+ }
158
+
159
+ return { pkgList, dependencies };
160
+ }
161
+
162
+ /**
163
+ * Walk every generated repository spec in a lock, whichever shape the lock
164
+ * uses.
165
+ *
166
+ * A module extension's results are grouped per platform key: `general` when
167
+ * the extension is platform-independent, and an os/arch key otherwise. Reading
168
+ * only `general` would miss every platform-specific dependency, so all groups
169
+ * are walked and duplicates are collapsed by repository name.
170
+ *
171
+ * @param {object} lock Parsed lock file
172
+ * @returns {Array<{repoName: string, spec: object}>} repository specs
173
+ */
174
+ function iterateRepoSpecs(lock) {
175
+ const out = [];
176
+ const seen = new Set();
177
+ const extensions = lock?.moduleExtensions;
178
+ if (!extensions || typeof extensions !== "object") {
179
+ return out;
180
+ }
181
+ for (const [extensionId, ext] of Object.entries(extensions)) {
182
+ if (!ext || typeof ext !== "object") continue;
183
+ if (TOOLCHAIN_EXTENSION.test(extensionId)) continue;
184
+ for (const group of Object.values(ext)) {
185
+ const specs = group?.generatedRepoSpecs;
186
+ if (!specs || typeof specs !== "object") continue;
187
+ for (const [repoName, spec] of Object.entries(specs)) {
188
+ if (seen.has(repoName)) continue;
189
+ seen.add(repoName);
190
+ out.push({ repoName, spec });
191
+ }
192
+ }
193
+ }
194
+ return out;
195
+ }
196
+
197
+ /**
198
+ * Name the repository rule that produced a generated repository.
199
+ *
200
+ * Lock format 20 and later name the rule in `repoRuleId`
201
+ * (`@@repo//path:file.bzl%rule_name`); earlier formats split it across
202
+ * `bzlFile` and `ruleClassName`. Both are still in circulation, so both are
203
+ * read.
204
+ *
205
+ * @param {object} spec A generatedRepoSpec value
206
+ * @returns {string} bare rule name, or an empty string
207
+ */
208
+ function repoRuleName(spec) {
209
+ const id = `${spec?.repoRuleId || ""}`;
210
+ if (id) {
211
+ return id.split("%").pop();
212
+ }
213
+ return `${spec?.ruleClassName || ""}`;
214
+ }
215
+
216
+ /**
217
+ * Build a component from a generated repository spec, mapping it to the purl
218
+ * type of the ecosystem it actually came from.
219
+ *
220
+ * Only rules whose coordinates are unambiguous produce a component. A
221
+ * repository generated by a toolchain or platform-detection rule describes the
222
+ * build environment rather than a dependency, and is skipped.
223
+ *
224
+ * @param {string} repoName Repository name the build sees
225
+ * @param {object} spec A generatedRepoSpec value
226
+ * @param {string} srcFile Lock file path for evidence
227
+ * @returns {object|null} Package record, or null when the rule carries no dependency
228
+ */
229
+ function packageFromRepoSpec(repoName, spec, srcFile) {
230
+ if (!spec || typeof spec !== "object") return null;
231
+ const rule = repoRuleName(spec);
232
+ const attrs = spec.attributes || {};
233
+ if (!rule) return null;
234
+
235
+ if (/maven|jvm_import_external/.test(rule)) {
236
+ const parsed = parseMavenCoordinates(attrs.artifact, attrs);
237
+ return parsed
238
+ ? buildMavenPackage(parsed.group, parsed.name, parsed.version, srcFile)
239
+ : null;
240
+ }
241
+ if (rule === "go_repository" && attrs.importpath) {
242
+ // A Go module path is a namespace plus a final segment, and the purl keeps
243
+ // its slashes unescaped, exactly as the Go collectors build it.
244
+ const importPath = `${attrs.importpath}`;
245
+ const slash = importPath.lastIndexOf("/");
246
+ return buildEcosystemPackage(
247
+ {
248
+ type: "golang",
249
+ namespace: slash > -1 ? importPath.slice(0, slash) : null,
250
+ name: slash > -1 ? importPath.slice(slash + 1) : importPath,
251
+ version: attrs.version,
252
+ displayName: importPath,
253
+ },
254
+ { ecosystem: "go", repoName, srcFile, sum: attrs.sum },
255
+ );
256
+ }
257
+ if (rule === "whl_library" || rule === "pypi_file") {
258
+ const parsed = parsePipRequirement(attrs.requirement || attrs.whl_name);
259
+ return parsed
260
+ ? buildEcosystemPackage(
261
+ { type: "pypi", name: parsed.name, version: parsed.version },
262
+ { ecosystem: "pypi", repoName, srcFile, sha256: attrs.sha256 },
263
+ )
264
+ : null;
265
+ }
266
+ if (rule === "npm_import" && attrs.package) {
267
+ // A scoped npm name is a namespace plus a name; npmPurl owns that split.
268
+ const packageName = `${attrs.package}`;
269
+ return buildEcosystemPackage(
270
+ {
271
+ type: "npm",
272
+ purlString: npmPurl(
273
+ packageName,
274
+ attrs.version ? `${attrs.version}` : undefined,
275
+ ),
276
+ name: packageName,
277
+ version: attrs.version,
278
+ },
279
+ { ecosystem: "npm", repoName, srcFile, integrity: attrs.integrity },
280
+ );
281
+ }
282
+ if (rule === "crate_repository" || rule === "cargo_bootstrap_repository") {
283
+ // rules_rust vendors an entire crate universe behind one repository, so
284
+ // the spec names the vendoring rule rather than any single crate. Cargo
285
+ // dependencies are read from the vendored Cargo.lock by the Rust
286
+ // collector instead.
287
+ return null;
288
+ }
289
+ if (rule === "http_archive" || rule === "http_file") {
290
+ return httpArchivePackage(repoName, attrs, srcFile);
291
+ }
292
+ return null;
293
+ }
294
+
295
+ /**
296
+ * Build a component for a dependency fetched by `http_archive`/`http_file`.
297
+ *
298
+ * These carry no ecosystem identity — just a URL and a checksum — so they are
299
+ * `pkg:generic` with a `download_url` qualifier. The version is taken from
300
+ * `strip_prefix` (which conventionally embeds the release, as in
301
+ * `buildtools-8.5.1`) or from a version-shaped segment of the URL.
302
+ *
303
+ * @param {string} repoName Repository name, used as the component name
304
+ * @param {object} attrs Rule attributes
305
+ * @param {string} srcFile Lock file path for evidence
306
+ * @returns {object|null} Package record, or null without a usable URL
307
+ */
308
+ function httpArchivePackage(repoName, attrs, srcFile) {
309
+ const urls = Array.isArray(attrs.urls)
310
+ ? attrs.urls
311
+ : attrs.url
312
+ ? [`${attrs.url}`]
313
+ : [];
314
+ const url = urls.find((u) => typeof u === "string" && u.length);
315
+ if (!url) return null;
316
+ const version = archiveVersion(attrs.strip_prefix, url);
317
+ const pkg = buildEcosystemPackage(
318
+ {
319
+ type: "generic",
320
+ name: repoName,
321
+ version,
322
+ qualifiers: { download_url: url },
323
+ },
324
+ { ecosystem: "http_archive", repoName, srcFile, sha256: attrs.sha256 },
325
+ );
326
+ return pkg;
327
+ }
328
+
329
+ /**
330
+ * Derive a version for an archive dependency.
331
+ *
332
+ * @param {string|undefined} stripPrefix `strip_prefix` attribute
333
+ * @param {string} url Download URL
334
+ * @returns {string|undefined} version, or undefined when none is discernible
335
+ */
336
+ function archiveVersion(stripPrefix, url) {
337
+ const fromPrefix = `${stripPrefix || ""}`.match(/-(v?\d+(?:\.\d+)*)$/);
338
+ if (fromPrefix) {
339
+ return fromPrefix[1].replace(/^v/, "");
340
+ }
341
+ const cleaned = url
342
+ .split("?")[0]
343
+ .replace(/\.(tar\.gz|tgz|tar\.xz|zip)$/i, "");
344
+ const last = cleaned.split("/").pop() || "";
345
+ const fromUrl = last.match(/^v?(\d+(?:\.\d+)+)$/);
346
+ return fromUrl ? fromUrl[1] : undefined;
347
+ }
348
+
349
+ /**
350
+ * Split a pip requirement (`name==version`) into its parts.
351
+ *
352
+ * @param {string|undefined} requirement Requirement string
353
+ * @returns {{name: string, version: string|undefined}|null}
354
+ */
355
+ function parsePipRequirement(requirement) {
356
+ const value = `${requirement || ""}`.trim();
357
+ if (!value) return null;
358
+ const match = value.match(/^([A-Za-z0-9._-]+)\s*==\s*([^\s;]+)/);
359
+ if (match) {
360
+ return { name: match[1], version: match[2] };
361
+ }
362
+ const bare = value.match(/^([A-Za-z0-9._-]+)$/);
363
+ return bare ? { name: bare[1], version: undefined } : null;
364
+ }
365
+
366
+ /**
367
+ * Build a component for a bzlmod dependency that belongs to a known ecosystem.
368
+ *
369
+ * @param {{type: string, name: string, version?: string, namespace?: string, qualifiers?: object}} coords purl coordinates
370
+ * @param {{ecosystem: string, repoName: string, srcFile: string, sha256?: string, integrity?: string, sum?: string}} context Evidence context
371
+ * @returns {object|null} Package record, or null when the purl cannot be built
372
+ */
373
+ function buildEcosystemPackage(coords, context) {
374
+ const version = coords.version ? `${coords.version}` : undefined;
375
+ const { displayName, purlString, ...purlParts } = coords;
376
+ // Go purls keep their path separators readable, matching the Go collectors
377
+ // so one module resolves to one bom-ref however it was discovered.
378
+ const purl =
379
+ purlString ||
380
+ tryBuildPurl({ ...purlParts, version })?.replace(
381
+ coords.type === "golang" ? /%2F/g : /$^/,
382
+ "/",
383
+ );
384
+ if (!purl) return null;
385
+ const properties = [
386
+ { name: "internal:SrcFile", value: context.srcFile },
387
+ { name: "cdx:bazel:ecosystem", value: context.ecosystem },
388
+ { name: "cdx:bazel:repo_name", value: context.repoName },
389
+ ];
390
+ const pkg = {
391
+ name: displayName || coords.name,
392
+ ...(version ? { version } : {}),
393
+ type: "library",
394
+ scope: "required",
395
+ ...(coords.namespace ? { group: coords.namespace } : {}),
396
+ purl,
397
+ "bom-ref": decodeURIComponent(purl),
398
+ properties,
399
+ evidence: {
400
+ identity: {
401
+ field: "purl",
402
+ confidence: 1.0,
403
+ methods: [
404
+ {
405
+ technique: "manifest-analysis",
406
+ confidence: 1.0,
407
+ value: context.srcFile,
408
+ },
409
+ ],
410
+ },
411
+ },
412
+ };
413
+ if (context.sha256 && /^[a-f0-9]{64}$/i.test(`${context.sha256}`)) {
414
+ pkg.hashes = [{ alg: "SHA-256", content: `${context.sha256}` }];
415
+ } else if (context.integrity) {
416
+ // npm records an ssri string (`sha512-<base64>`). `processHashes` turns it
417
+ // into a CycloneDX `hashes[]` entry with the digest hex-encoded.
418
+ pkg._integrity = `${context.integrity}`;
419
+ } else if (context.sum) {
420
+ // A go.sum line is `h1:<base64>`, a SHA-256 dirhash over the module
421
+ // contents. cdxgen carries it in the same `sha256-<base64>` form the Go
422
+ // collectors use, so both paths produce identical hashes for one module.
423
+ pkg._integrity = `${context.sum}`.replace(/^h1:/, "sha256-");
424
+ }
425
+ return pkg;
426
+ }
427
+
428
+ /**
429
+ * Build a component record for a BCR (Bazel Central Registry) module.
430
+ *
431
+ * BCR modules are the registered `bazel` purl type's intended target: a flat
432
+ * module name, no namespace, and the BCR as the default repository.
433
+ *
434
+ * @param {string} displayRepoName Repository name used in the build (for SrcFile context)
435
+ * @param {string} moduleName Canonical module name
436
+ * @param {string} version Resolved version
437
+ * @param {string} srcFile Source file for evidence
438
+ * @returns {object} Package record
439
+ */
440
+ function buildBcrPackage(displayRepoName, moduleName, version, srcFile) {
441
+ const purl = tryBuildPurl({
442
+ type: "bazel",
443
+ name: moduleName,
444
+ version,
445
+ qualifiers: { repository_url: BCR_DEFAULT_REPOSITORY_URL },
446
+ });
447
+ return {
448
+ name: moduleName,
449
+ version,
450
+ type: "library",
451
+ scope: "required",
452
+ purl,
453
+ "bom-ref": decodeURIComponent(purl),
454
+ properties: [
455
+ { name: "internal:SrcFile", value: srcFile },
456
+ { name: "cdx:bazel:module", value: moduleName },
457
+ { name: "cdx:bazel:repository_url", value: BCR_DEFAULT_REPOSITORY_URL },
458
+ ...(displayRepoName !== moduleName
459
+ ? [{ name: "cdx:bazel:repo_name", value: displayRepoName }]
460
+ : []),
461
+ ],
462
+ evidence: {
463
+ identity: {
464
+ field: "purl",
465
+ confidence: 1.0,
466
+ methods: [
467
+ {
468
+ technique: "manifest-analysis",
469
+ confidence: 1.0,
470
+ value: srcFile,
471
+ },
472
+ ],
473
+ },
474
+ },
475
+ };
476
+ }
477
+
478
+ /**
479
+ * Build a Maven package from a Starlark `maven.artifact(...)` call.
480
+ *
481
+ * rules_jvm_external accepts either a coordinate string
482
+ * (`"group:artifact:version"`) or separate `group`/`artifact`/`version`
483
+ * keyword arguments.
484
+ *
485
+ * @param {Map<string, string|string[]>} call Parsed call arguments
486
+ * @param {string} srcFile Source file for evidence
487
+ * @returns {object|null} Package record, or null when no coordinates parse
488
+ */
489
+ function mavenPackageFromCall(call, srcFile) {
490
+ const parsed = parseMavenCoordinates(
491
+ scalarArg(call, "artifact") ||
492
+ scalarArg(call, "coord") ||
493
+ scalarArg(call, "coordinates") ||
494
+ scalarArg(call, ""),
495
+ call,
496
+ );
497
+ if (!parsed) return null;
498
+ return buildMavenPackage(parsed.group, parsed.name, parsed.version, srcFile);
499
+ }
500
+
501
+ /**
502
+ * Parse Maven coordinates from a coordinate string or a set of attributes.
503
+ *
504
+ * @param {string|undefined} coordStr A `group:artifact:version` string
505
+ * @param {object|Map} attrs Attribute map with group/artifact/version keys
506
+ * @returns {{group: string, name: string, version: string}|null}
507
+ */
508
+ function parseMavenCoordinates(coordStr, attrs) {
509
+ if (coordStr && typeof coordStr === "string") {
510
+ const parts = coordStr.split(":");
511
+ if (parts.length >= 3) {
512
+ return { group: parts[0], name: parts[1], version: parts[2] };
513
+ }
514
+ }
515
+ const group = scalarArg(attrs, "group");
516
+ const name = scalarArg(attrs, "artifact") || scalarArg(attrs, "name");
517
+ const version = scalarArg(attrs, "version");
518
+ if (group && name && version) {
519
+ return { group, name, version };
520
+ }
521
+ return null;
522
+ }
523
+
524
+ /**
525
+ * Construct a Maven package record. Maven purls require a group (namespace).
526
+ *
527
+ * @param {string} group Group ID
528
+ * @param {string} name Artifact ID
529
+ * @param {string} version Version
530
+ * @param {string} srcFile Source file for evidence
531
+ * @returns {object} Package record
532
+ */
533
+ function buildMavenPackage(group, name, version, srcFile) {
534
+ const purl = tryBuildPurl({
535
+ type: "maven",
536
+ namespace: group,
537
+ name,
538
+ version,
539
+ });
540
+ const pkg = {
541
+ name,
542
+ version,
543
+ type: "library",
544
+ scope: "required",
545
+ group,
546
+ properties: [
547
+ { name: "internal:SrcFile", value: srcFile },
548
+ { name: "cdx:bazel:ecosystem", value: "maven" },
549
+ ],
550
+ };
551
+ if (purl) {
552
+ pkg.purl = purl;
553
+ pkg["bom-ref"] = decodeURIComponent(purl);
554
+ } else {
555
+ pkg["bom-ref"] = `library:${group}:${name}:${version}`;
556
+ }
557
+ return pkg;
558
+ }
559
+
560
+ /**
561
+ * Heuristic: does an `artifact(...)` call look like a Maven artifact
562
+ * declaration? Used to avoid treating unrelated `artifact` calls (e.g. test
563
+ * fixtures) as Maven coordinates. A Maven coordinate string has at least two
564
+ * colons; separate group/artifact/version args are a stronger signal.
565
+ *
566
+ * @param {Map<string, string|string[]>} call Parsed call arguments
567
+ * @returns {boolean}
568
+ */
569
+ function looksLikeMavenArtifactCall(call) {
570
+ const coord =
571
+ scalarArg(call, "artifact") ||
572
+ scalarArg(call, "coord") ||
573
+ scalarArg(call, "coordinates");
574
+ if (coord && coord.split(":").length >= 3) {
575
+ return true;
576
+ }
577
+ return !!(
578
+ scalarArg(call, "group") &&
579
+ (scalarArg(call, "artifact") || scalarArg(call, "name")) &&
580
+ scalarArg(call, "version")
581
+ );
582
+ }
583
+
584
+ // ---------------------------------------------------------------------------
585
+ // Starlark call extraction
586
+ // ---------------------------------------------------------------------------
587
+
588
+ /**
589
+ * Find every top-level call to `name(...)` in Starlark source and return the
590
+ * parsed keyword/string arguments of each. Scanning uses a balanced-paren
591
+ * counter rather than a regex, because MODULE.bazel calls can nest other calls
592
+ * inside their argument lists.
593
+ *
594
+ * @param {string} src Starlark source
595
+ * @param {string} name Function name to match (dotted names supported)
596
+ * @returns {Array<Map<string, string|string[]>>} one argument map per call
597
+ */
598
+ export function findAllCalls(src, name) {
599
+ const calls = [];
600
+ let i = 0;
601
+ while (i < src.length) {
602
+ const hit = src.indexOf(name, i);
603
+ if (hit === -1) break;
604
+ // Ensure the match is a whole token, not a suffix of a longer identifier.
605
+ const before = hit > 0 ? src[hit - 1] : "";
606
+ if (/[A-Za-z0-9_.]/.test(before)) {
607
+ i = hit + 1;
608
+ continue;
609
+ }
610
+ let j = hit + name.length;
611
+ while (j < src.length && (src[j] === " " || src[j] === "\t")) j++;
612
+ if (src[j] !== "(") {
613
+ i = hit + 1;
614
+ continue;
615
+ }
616
+ const close = matchingParen(src, j);
617
+ if (close === -1) break;
618
+ const argSrc = src.substring(j + 1, close);
619
+ calls.push(parseCallArgs(argSrc));
620
+ i = close + 1;
621
+ }
622
+ return calls;
623
+ }
624
+
625
+ /**
626
+ * Find the first call to `name(...)` and return its arguments, or null.
627
+ *
628
+ * @param {string} src Starlark source
629
+ * @param {string} name Function name
630
+ * @returns {Map<string, string|string[]>|null}
631
+ */
632
+ function findFirstCall(src, name) {
633
+ return findAllCalls(src, name)[0] || null;
634
+ }
635
+
636
+ /**
637
+ * Return the index of the closing paren that matches the opening paren at
638
+ * `open`, skipping string literals. Returns -1 if unbalanced.
639
+ *
640
+ * @param {string} src Source
641
+ * @param {number} open Index of the opening `(`
642
+ * @returns {number} index of the matching `)`, or -1
643
+ */
644
+ function matchingParen(src, open) {
645
+ let depth = 0;
646
+ let i = open;
647
+ while (i < src.length) {
648
+ const c = src[i];
649
+ if (c === '"' || c === "'") {
650
+ i = skipString(src, i);
651
+ continue;
652
+ }
653
+ if (c === "#") {
654
+ // Line comment; skip to end of line.
655
+ i = src.indexOf("\n", i);
656
+ if (i === -1) return -1;
657
+ i++;
658
+ continue;
659
+ }
660
+ if (c === "(") depth++;
661
+ else if (c === ")") {
662
+ depth--;
663
+ if (depth === 0) return i;
664
+ }
665
+ i++;
666
+ }
667
+ return -1;
668
+ }
669
+
670
+ /**
671
+ * Advance past a string literal starting at `start` (the opening quote),
672
+ * respecting backslash escapes. Returns the index after the closing quote.
673
+ *
674
+ * @param {string} src Source
675
+ * @param {number} start Index of the opening quote
676
+ * @returns {number} index after the closing quote
677
+ */
678
+ function skipString(src, start) {
679
+ const quote = src[start];
680
+ let i = start + 1;
681
+ while (i < src.length) {
682
+ if (src[i] === "\\") {
683
+ i += 2;
684
+ continue;
685
+ }
686
+ if (src[i] === quote) {
687
+ return i + 1;
688
+ }
689
+ i++;
690
+ }
691
+ return i;
692
+ }
693
+
694
+ /**
695
+ * Parse the argument list of a Starlark call into a map of keyword arguments.
696
+ *
697
+ * Handles `key = "value"`, `key = [list, of, values]`, bare positional string
698
+ * arguments (collected under the special `""` key), and nested calls (the
699
+ * value is captured as the raw source span). Only the constructs that appear
700
+ * in MODULE.bazel are supported.
701
+ *
702
+ * @param {string} argSrc Source inside the call's parentheses
703
+ * @returns {Map<string, string|string[]>} parsed arguments
704
+ */
705
+ function parseCallArgs(argSrc) {
706
+ const args = new Map();
707
+ let i = 0;
708
+ while (i < argSrc.length) {
709
+ i = skipSpaceAndComments(argSrc, i);
710
+ if (i >= argSrc.length || argSrc[i] === ",") {
711
+ i++;
712
+ continue;
713
+ }
714
+ // Read a key (identifier) when followed by '='.
715
+ let key = "";
716
+ while (i < argSrc.length && /[A-Za-z0-9_.]/.test(argSrc[i])) {
717
+ key += argSrc[i];
718
+ i++;
719
+ }
720
+ const afterKey = skipSpaceAndComments(argSrc, i);
721
+ if (key && argSrc[afterKey] === "=") {
722
+ i = skipSpaceAndComments(argSrc, afterKey + 1);
723
+ const { value, end } = readValue(argSrc, i);
724
+ args.set(key, value);
725
+ i = end;
726
+ } else {
727
+ // Positional argument; capture as a bare value under "".
728
+ const { value, end } = readValue(argSrc, key ? i - key.length : i);
729
+ const existing = args.get("");
730
+ const next = value;
731
+ args.set(
732
+ "",
733
+ Array.isArray(existing)
734
+ ? [...existing, next]
735
+ : existing !== undefined
736
+ ? [existing, next]
737
+ : next,
738
+ );
739
+ i = end;
740
+ }
741
+ }
742
+ return args;
743
+ }
744
+
745
+ /**
746
+ * Read a single Starlark value (string, list, or nested call span) starting at
747
+ * `start`, returning the decoded value and the index past it.
748
+ *
749
+ * @param {string} src Source
750
+ * @param {number} start Start index
751
+ * @returns {{value: string|string[], end: number}}
752
+ */
753
+ function readValue(src, start) {
754
+ const i = skipSpaceAndComments(src, start);
755
+ const c = src[i];
756
+ if (c === '"' || c === "'") {
757
+ const end = skipString(src, i);
758
+ return { value: unquote(src.substring(i, end)), end };
759
+ }
760
+ if (c === "[") {
761
+ return readList(src, i);
762
+ }
763
+ // A nested call or bare token: read until a top-level comma or closing paren.
764
+ let depth = 0;
765
+ let j = i;
766
+ while (j < src.length) {
767
+ const ch = src[j];
768
+ if (ch === '"' || ch === "'") {
769
+ j = skipString(src, j);
770
+ continue;
771
+ }
772
+ if (ch === "[" || ch === "(") {
773
+ depth++;
774
+ } else if (ch === "]" || ch === ")") {
775
+ if (depth === 0) break;
776
+ depth--;
777
+ } else if (ch === "," && depth === 0) {
778
+ break;
779
+ }
780
+ j++;
781
+ }
782
+ return { value: src.substring(i, j).trim(), end: j };
783
+ }
784
+
785
+ /**
786
+ * Read a Starlark list literal, returning its string elements.
787
+ *
788
+ * @param {string} src Source
789
+ * @param {number} start Index of the opening `[`
790
+ * @returns {{value: string[], end: number}}
791
+ */
792
+ function readList(src, start) {
793
+ const items = [];
794
+ let i = start + 1;
795
+ while (i < src.length && src[i] !== "]") {
796
+ i = skipSpaceAndComments(src, i);
797
+ if (src[i] === ",") {
798
+ i++;
799
+ continue;
800
+ }
801
+ if (src[i] === "]") break;
802
+ const { value, end } = readValue(src, i);
803
+ if (typeof value === "string" && value) {
804
+ items.push(value);
805
+ } else if (Array.isArray(value)) {
806
+ items.push(...value);
807
+ }
808
+ i = end;
809
+ }
810
+ return { value: items, end: i < src.length ? i + 1 : i };
811
+ }
812
+
813
+ /**
814
+ * Skip whitespace and Starlark line comments, returning the next significant
815
+ * index.
816
+ *
817
+ * @param {string} src Source
818
+ * @param {number} i Current index
819
+ * @returns {number} next significant index
820
+ */
821
+ function skipSpaceAndComments(src, i) {
822
+ while (i < src.length) {
823
+ const c = src[i];
824
+ if (c === " " || c === "\t" || c === "\r" || c === "\n") {
825
+ i++;
826
+ } else if (c === "#") {
827
+ const nl = src.indexOf("\n", i);
828
+ i = nl === -1 ? src.length : nl + 1;
829
+ } else if (c === "\\" && src[i + 1] === "\n") {
830
+ // Line continuation.
831
+ i += 2;
832
+ } else {
833
+ return i;
834
+ }
835
+ }
836
+ return i;
837
+ }
838
+
839
+ /**
840
+ * Remove surrounding quotes and resolve backslash escapes from a string token.
841
+ *
842
+ * @param {string} token A quoted string token including the quotes
843
+ * @returns {string} the decoded string value
844
+ */
845
+ function unquote(token) {
846
+ if (!token) return "";
847
+ const quote = token[0];
848
+ if (quote !== '"' && quote !== "'") return token;
849
+ const inner = token.slice(1, -1);
850
+ return inner.replace(/\\(.)/g, (_m, ch) =>
851
+ ch === "n" ? "\n" : ch === "t" ? "\t" : ch,
852
+ );
853
+ }
854
+
855
+ /**
856
+ * Extract a scalar string value for a key from a parsed call argument map,
857
+ * accepting either a plain object or a Map (so the same helper works for
858
+ * Starlark call args and lock attribute objects).
859
+ *
860
+ * @param {Map|object} call Parsed arguments
861
+ * @param {string} key Argument name
862
+ * @returns {string|undefined}
863
+ */
864
+ function scalarArg(call, key) {
865
+ if (!call) return undefined;
866
+ let v;
867
+ if (typeof call.get === "function") {
868
+ v = call.get(key);
869
+ } else {
870
+ v = call[key];
871
+ }
872
+ if (v == null) return undefined;
873
+ if (Array.isArray(v)) return `${v[0]}`;
874
+ return `${v}`;
875
+ }