@cdxgen/cdxgen 0.0.1 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (722) hide show
  1. package/README.md +921 -87
  2. package/bin/audit.js +239 -0
  3. package/bin/cdxgen.js +2324 -0
  4. package/bin/convert.js +213 -0
  5. package/bin/evinse.js +353 -0
  6. package/bin/hbom.js +495 -0
  7. package/bin/repl.js +2224 -0
  8. package/bin/sign.js +195 -0
  9. package/bin/tracebom.js +295 -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 +1833 -0
  85. package/lib/cli/cliOptions.js +513 -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 +142 -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 +876 -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 +575 -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 +1789 -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 +277 -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 +263 -0
  215. package/lib/inventory/traceRunner.js +439 -0
  216. package/lib/inventory/unicodeScan.js +147 -0
  217. package/lib/managers/binary.js +3307 -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 +315 -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 +28 -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 +120 -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 +19 -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 +76 -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,1239 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { basename, join, relative, sep } from "node:path";
3
+ import process from "node:process";
4
+
5
+ import { Purl } from "@cdxgen/cdx-purl";
6
+
7
+ import {
8
+ DEBUG_MODE,
9
+ isDryRun,
10
+ readEnvironmentVariable,
11
+ resetActivityContext,
12
+ setActivityContext,
13
+ } from "../../core/activity.js";
14
+ import { hasAnyProjectType } from "../../core/env.js";
15
+ import {
16
+ getTimestamp,
17
+ getTmpDir,
18
+ safeExistsSync,
19
+ safeRmSync,
20
+ } from "../../core/fs.js";
21
+ import { thoughtLog } from "../../core/logger.js";
22
+ import { dirNameStr } from "../../core/paths.js";
23
+ import { CDXGEN_TOOL_GROUP, CDXGEN_TOOL_NAME } from "../../core/state.js";
24
+ import {
25
+ AI_INVENTORY_PROJECT_TYPES,
26
+ matchesAiInventoryExcludeType,
27
+ optionIncludesAiInventoryProjectType,
28
+ } from "../../inventory/aiInventory.js";
29
+ import {
30
+ DEFAULT_CDX_SPEC_VERSION,
31
+ normalizeCycloneDxComponentTypeFilter,
32
+ normalizeCycloneDxSpecVersion,
33
+ } from "../../inventory/bomUtils.js";
34
+ import {
35
+ attachCitations,
36
+ buildInventoryCitation,
37
+ createCitation,
38
+ findCdxgenToolBomRef,
39
+ } from "../../inventory/citations.js";
40
+ import { mergeDependencies, mergeServices } from "../../inventory/depsUtils.js";
41
+ import { addFormulationSection } from "../../inventory/formulationParsers.js";
42
+ import { getContainerFileInventoryStats } from "../../inventory/inventoryStats.js";
43
+ import { enhanceBom } from "../../inventory/licenseEnhancer.js";
44
+ import { applyMcpPinningState } from "../../inventory/mcpPinning.js";
45
+ import { buildReleaseNotesFromGit } from "../../inventory/source.js";
46
+ import { extractTags, findBomType, textualMetadata } from "./annotator.js";
47
+ import { sortBomCollections } from "./sortBom.js";
48
+ import {
49
+ applyComponentTypeFilter,
50
+ applySpecVersionCompatibility,
51
+ } from "./specVersionCompat.js";
52
+
53
+ /**
54
+ * Convert directories to relative dir format carefully avoiding arbitrary relativization for unrelated directories.
55
+ *
56
+ * @param d Directory to convert
57
+ * @param options CLI options
58
+ *
59
+ * @returns {string} Relative directory
60
+ */
61
+ function relativeDir(d, options) {
62
+ // Container images might have such directories
63
+ if (/^\/(usr|lib|root|bin)/.test(d)) {
64
+ return d;
65
+ }
66
+ const tmpDir = getTmpDir();
67
+ if (d.startsWith(tmpDir)) {
68
+ const rd = relative(tmpDir, d);
69
+ return rd.includes("all-layers") ? rd.split("all-layers").pop() : rd;
70
+ }
71
+ const baseDir = options.filePath || process.cwd();
72
+ if (safeExistsSync(baseDir)) {
73
+ const rdir = relative(baseDir, d);
74
+ return rdir.startsWith(join("..", "..")) ? d : rdir;
75
+ }
76
+ return d;
77
+ }
78
+
79
+ /**
80
+ * Attach the CycloneDX formulation section to an already-built BOM JSON object.
81
+ *
82
+ * This is intentionally called once, from {@link postProcess}, so that the
83
+ * formulation section is added exactly once regardless of how many per-language
84
+ * `buildBomNSData` calls were made during BOM generation.
85
+ *
86
+ * @param {Object} bomJson The assembled BOM JSON object (mutated in place).
87
+ * @param {Object} options CLI options.
88
+ * @param {string} filePath File path.
89
+ * @param {Array} [formulationList] Optional language-specific formulation
90
+ * data (e.g. from Pixi) carried on `bomNSData`.
91
+ * @returns {Object} The same `bomJson` with `formulation` populated.
92
+ */
93
+ function applyFormulation(bomJson, options, filePath, formulationList) {
94
+ if (
95
+ !options.includeFormulation ||
96
+ options.specVersion < 1.5 ||
97
+ !bomJson ||
98
+ bomJson.formulation !== undefined
99
+ ) {
100
+ return bomJson;
101
+ }
102
+ const context = formulationList?.length ? { formulationList } : {};
103
+ context.executeOsQuery = options.executeOsQuery;
104
+ setActivityContext({
105
+ bomMutation: "formulation",
106
+ capability: "bom-mutation",
107
+ projectType: "Formulation",
108
+ sourcePath: filePath || options.filePath || process.cwd(),
109
+ });
110
+ let formulationData;
111
+ try {
112
+ formulationData = addFormulationSection(filePath, options, context);
113
+ } finally {
114
+ resetActivityContext();
115
+ }
116
+ if (!formulationData) {
117
+ return bomJson;
118
+ }
119
+ bomJson.formulation = formulationData.formulation;
120
+ const formulationServices = formulationData.formulation.flatMap(
121
+ (entry) => entry?.services || [],
122
+ );
123
+ if (formulationServices.length) {
124
+ bomJson.services = mergeServices(
125
+ bomJson.services || [],
126
+ formulationServices,
127
+ );
128
+ }
129
+ if (formulationData.dependencies?.length) {
130
+ bomJson.dependencies = mergeDependencies(
131
+ bomJson.dependencies || [],
132
+ formulationData.dependencies,
133
+ );
134
+ }
135
+ return bomJson;
136
+ }
137
+
138
+ const WEAK_TLP_CLASSIFICATIONS = new Set(["CLEAR", "GREEN", "AMBER"]);
139
+ const SENSITIVE_PROPERTY_NAMES = new Set([
140
+ "cdx:agent:description",
141
+ "cdx:agent:hiddenMcpUrls",
142
+ "cdx:agent:permission",
143
+ "cdx:mcp:command",
144
+ "cdx:mcp:configuredEndpoints",
145
+ "cdx:mcp:description",
146
+ "cdx:mcp:resourceUri",
147
+ "cdx:skill:metadata",
148
+ ]);
149
+ const SENSITIVE_PROPERTY_PREFIXES = ["cdx:crewai:", "cdx:mcp:auth:"];
150
+ const SECRET_ASSIGNMENT_PATTERN =
151
+ /(?:^|[\s,{\[])(?:authorization|password|passwd|pwd|token|access[_-]?token|id[_-]?token|refresh[_-]?token|api[_-]?key|client[_-]?secret|secret|session(?:id)?|cookie)\s*(?:[:=]|=>)\s*["'`]?[^"'`\s,}\]]{4,}/iu;
152
+ const ENV_SECRET_PATTERN =
153
+ /\b[A-Z0-9_]*(?:TOKEN|PASSWORD|SECRET|API_KEY|CLIENT_SECRET|SESSION|COOKIE)[A-Z0-9_]*=\S+/u;
154
+ const AUTH_HEADER_PATTERN =
155
+ /\bAuthorization\s*:\s*(?:Bearer|Basic)\s+[A-Za-z0-9._~+/=-]{8,}/iu;
156
+ const BEARER_TOKEN_PATTERN = /\b(?:Bearer|Basic)\s+[A-Za-z0-9._~+/=-]{12,}/u;
157
+ const PRIVATE_KEY_PATTERN =
158
+ /-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----/u;
159
+ const SIGNED_URL_PARAM_NAMES = new Set([
160
+ "access_token",
161
+ "api_key",
162
+ "client_secret",
163
+ "id_token",
164
+ "signature",
165
+ "sig",
166
+ "token",
167
+ "x-amz-signature",
168
+ "x-goog-signature",
169
+ ]);
170
+
171
+ function normalizeTlpClassification(tlpClassification) {
172
+ return String(tlpClassification || "")
173
+ .trim()
174
+ .toUpperCase();
175
+ }
176
+
177
+ function hasSensitivePropertyName(propertyName) {
178
+ if (SENSITIVE_PROPERTY_NAMES.has(propertyName)) {
179
+ return true;
180
+ }
181
+ return SENSITIVE_PROPERTY_PREFIXES.some((prefix) =>
182
+ propertyName.startsWith(prefix),
183
+ );
184
+ }
185
+
186
+ function extractUrlCandidates(value) {
187
+ return Array.from(value.matchAll(/https?:\/\/[^\s]+/gu), (match) =>
188
+ match[0].replace(/[),.;]+$/u, ""),
189
+ );
190
+ }
191
+
192
+ function hasSensitiveUrlValue(value) {
193
+ for (const candidate of extractUrlCandidates(value)) {
194
+ if (!URL.canParse(candidate)) {
195
+ continue;
196
+ }
197
+ const parsedUrl = new URL(candidate);
198
+ if (parsedUrl.username || parsedUrl.password || parsedUrl.hash) {
199
+ return true;
200
+ }
201
+ for (const [paramName] of parsedUrl.searchParams) {
202
+ if (SIGNED_URL_PARAM_NAMES.has(paramName.toLowerCase())) {
203
+ return true;
204
+ }
205
+ }
206
+ }
207
+ return false;
208
+ }
209
+
210
+ function hasKnownSensitiveText(value) {
211
+ return (
212
+ SECRET_ASSIGNMENT_PATTERN.test(value) ||
213
+ ENV_SECRET_PATTERN.test(value) ||
214
+ AUTH_HEADER_PATTERN.test(value) ||
215
+ BEARER_TOKEN_PATTERN.test(value) ||
216
+ PRIVATE_KEY_PATTERN.test(value)
217
+ );
218
+ }
219
+
220
+ function propertyContainsSensitiveValue(propertyName, propertyValue) {
221
+ if (!hasSensitivePropertyName(propertyName) || !propertyValue?.trim()) {
222
+ return false;
223
+ }
224
+ return (
225
+ hasSensitiveUrlValue(propertyValue) || hasKnownSensitiveText(propertyValue)
226
+ );
227
+ }
228
+
229
+ function collectSensitivePropertyViolations(
230
+ subject,
231
+ violations = [],
232
+ location = "bom",
233
+ seen = new Set(),
234
+ ) {
235
+ if (!subject || typeof subject !== "object" || seen.has(subject)) {
236
+ return violations;
237
+ }
238
+ seen.add(subject);
239
+ if (Array.isArray(subject.properties)) {
240
+ const subjectLabel = subject["bom-ref"] || subject.name || location;
241
+ for (const property of subject.properties) {
242
+ if (
243
+ typeof property?.name === "string" &&
244
+ typeof property?.value === "string" &&
245
+ propertyContainsSensitiveValue(property.name, property.value)
246
+ ) {
247
+ violations.push({
248
+ propertyName: property.name,
249
+ subjectLabel,
250
+ });
251
+ }
252
+ }
253
+ }
254
+ if (Array.isArray(subject)) {
255
+ subject.forEach((entry, index) => {
256
+ collectSensitivePropertyViolations(
257
+ entry,
258
+ violations,
259
+ `${location}[${index}]`,
260
+ seen,
261
+ );
262
+ });
263
+ return violations;
264
+ }
265
+ for (const [key, value] of Object.entries(subject)) {
266
+ if (key === "properties") {
267
+ continue;
268
+ }
269
+ collectSensitivePropertyViolations(
270
+ value,
271
+ violations,
272
+ `${location}.${key}`,
273
+ seen,
274
+ );
275
+ }
276
+ return violations;
277
+ }
278
+
279
+ function validateTlpClassification(bomJson, options) {
280
+ const specVersion =
281
+ normalizeCycloneDxSpecVersion(
282
+ bomJson?.specVersion || options?.specVersion,
283
+ ) || 0;
284
+ if (specVersion < 1.7) {
285
+ return bomJson;
286
+ }
287
+ const tlpClassification = normalizeTlpClassification(
288
+ bomJson?.metadata?.distributionConstraints?.tlp ||
289
+ bomJson?.metadata?.distribution ||
290
+ options?.tlpClassification,
291
+ );
292
+ if (!WEAK_TLP_CLASSIFICATIONS.has(tlpClassification)) {
293
+ return bomJson;
294
+ }
295
+ const violations = collectSensitivePropertyViolations(bomJson);
296
+ if (!violations.length) {
297
+ return bomJson;
298
+ }
299
+ const uniqueViolations = [
300
+ ...new Set(
301
+ violations.map(
302
+ ({ propertyName, subjectLabel }) =>
303
+ `${propertyName} on ${subjectLabel}`,
304
+ ),
305
+ ),
306
+ ];
307
+ const errorMessage =
308
+ `CycloneDX 1.7+ BOMs with TLP classification '${tlpClassification}' must not include known sensitive property values. ` +
309
+ "Redact the values or raise the TLP classification to AMBER_AND_STRICT or RED. " +
310
+ `Found: ${uniqueViolations.slice(0, 5).join("; ")}${uniqueViolations.length > 5 ? `; and ${uniqueViolations.length - 5} more` : ""}`;
311
+ if (options?.failOnError) {
312
+ throw new Error(errorMessage);
313
+ }
314
+ console.warn(errorMessage);
315
+ return bomJson;
316
+ }
317
+
318
+ function applyContainerInventoryMetadata(bomJson) {
319
+ if (!bomJson?.metadata) {
320
+ return bomJson;
321
+ }
322
+ const { unpackagedExecutableCount, unpackagedSharedLibraryCount } =
323
+ getContainerFileInventoryStats(bomJson.components);
324
+ const metadataProperties = Array.isArray(bomJson.metadata.properties)
325
+ ? [...bomJson.metadata.properties]
326
+ : [];
327
+ const propertyNamesToReplace = new Set([
328
+ "cdx:container:unpackagedExecutableCount",
329
+ "cdx:container:unpackagedSharedLibraryCount",
330
+ ]);
331
+ const retainedProperties = metadataProperties.filter(
332
+ (property) => !propertyNamesToReplace.has(property?.name),
333
+ );
334
+ if (
335
+ unpackagedExecutableCount ||
336
+ metadataProperties.some(
337
+ (property) =>
338
+ property?.name === "cdx:container:unpackagedExecutableCount",
339
+ )
340
+ ) {
341
+ retainedProperties.push({
342
+ name: "cdx:container:unpackagedExecutableCount",
343
+ value: String(unpackagedExecutableCount),
344
+ });
345
+ }
346
+ if (
347
+ unpackagedSharedLibraryCount ||
348
+ metadataProperties.some(
349
+ (property) =>
350
+ property?.name === "cdx:container:unpackagedSharedLibraryCount",
351
+ )
352
+ ) {
353
+ retainedProperties.push({
354
+ name: "cdx:container:unpackagedSharedLibraryCount",
355
+ value: String(unpackagedSharedLibraryCount),
356
+ });
357
+ }
358
+ if (retainedProperties.length) {
359
+ bomJson.metadata.properties = retainedProperties;
360
+ }
361
+ return bomJson;
362
+ }
363
+
364
+ /**
365
+ * Assemble CycloneDX 1.7 citations from the provenance that cdxgen already
366
+ * holds. Citations are emitted only at spec version 1.7 and above; the
367
+ * downgrade path strips them for older documents.
368
+ *
369
+ * Two honest attribution sources are wired here:
370
+ * - the component inventory is attributed to the cdxgen tool component, and
371
+ * - when `--bom-audit` produced findings, the audit properties are attributed
372
+ * to the cdxgen tool with a note naming the rule engine.
373
+ *
374
+ * Additional provenance (embedded SBOMs, TEA collections, MCP server artefacts)
375
+ * is appended via the per-stage `bomNSData.citations` channel by collectors.
376
+ *
377
+ * @param {Object} bomJson CycloneDX BOM
378
+ * @param {Object} options CLI options
379
+ * @param {Object[]} [extraCitations] Citations produced by per-stage collectors
380
+ * @returns {Object} The mutated BOM
381
+ */
382
+ function applyCitations(bomJson, options = {}, extraCitations = []) {
383
+ if (!bomJson) {
384
+ return bomJson;
385
+ }
386
+ const specVersion = options.specVersion || bomJson.specVersion;
387
+ if (!specVersion || Number(specVersion) < 1.7) {
388
+ return bomJson;
389
+ }
390
+ const citations = [];
391
+ const inventoryCitation = buildInventoryCitation(bomJson);
392
+ if (inventoryCitation) {
393
+ citations.push(inventoryCitation);
394
+ }
395
+ const auditCitation = buildAuditFindingsCitation(bomJson);
396
+ if (auditCitation) {
397
+ citations.push(auditCitation);
398
+ }
399
+ for (const citation of Array.isArray(extraCitations) ? extraCitations : []) {
400
+ if (citation) {
401
+ citations.push(citation);
402
+ }
403
+ }
404
+ return attachCitations(bomJson, citations, options);
405
+ }
406
+
407
+ /**
408
+ * Build a citation for the `cdx:audit:*` properties emitted by the BOM audit
409
+ * rule engine. The data source is cdxgen's own rule packs under data/rules.
410
+ *
411
+ * @param {Object} bomJson CycloneDX BOM
412
+ * @returns {Object|null} A citation, or null when no audit properties are present
413
+ */
414
+ function buildAuditFindingsCitation(bomJson) {
415
+ const hasAuditProperties =
416
+ Array.isArray(bomJson.components) &&
417
+ bomJson.components.some(
418
+ (component) =>
419
+ Array.isArray(component?.properties) &&
420
+ component.properties.some((property) =>
421
+ property?.name?.startsWith("cdx:audit:"),
422
+ ),
423
+ );
424
+ if (!hasAuditProperties) {
425
+ return null;
426
+ }
427
+ const attributedTo = findCdxgenToolBomRef(bomJson);
428
+ if (!attributedTo) {
429
+ return null;
430
+ }
431
+ return createCitation({
432
+ expressions: ["$.components[*].properties[?(@.name =~ /^cdx:audit:/)]"],
433
+ attributedTo,
434
+ note: "Audit findings attributed to the cdxgen BOM audit rule engine.",
435
+ });
436
+ }
437
+
438
+ /**
439
+ * Filter and enhance BOM post generation.
440
+ *
441
+ * @param {Object} bomNSData BOM with namespaces object
442
+ * @param {Object} options CLI options
443
+ * @param {string} [filePath] Source path used for formulation and metadata context
444
+ *
445
+ * @returns {Object} Modified bomNSData
446
+ */
447
+ export function postProcess(bomNSData, options, filePath) {
448
+ let jsonPayload = bomNSData.bomJson;
449
+ if (
450
+ typeof bomNSData.bomJson === "string" ||
451
+ bomNSData.bomJson instanceof String
452
+ ) {
453
+ jsonPayload = JSON.parse(bomNSData.bomJson);
454
+ }
455
+
456
+ bomNSData.bomJson = filterBom(jsonPayload, options);
457
+ bomNSData.bomJson = applyStandards(bomNSData.bomJson, options);
458
+ bomNSData.bomJson = applyMetadata(bomNSData.bomJson, options);
459
+ bomNSData.bomJson = applyLicenseEnhancement(bomNSData.bomJson, options);
460
+ bomNSData.bomJson = applyContainerInventoryMetadata(bomNSData.bomJson);
461
+ bomNSData.bomJson = applyFormulation(
462
+ bomNSData.bomJson,
463
+ options,
464
+ filePath,
465
+ bomNSData.formulationList,
466
+ );
467
+ bomNSData.bomJson = applyReleaseNotes(bomNSData.bomJson, options, filePath);
468
+ bomNSData.bomJson = applyComponentTypeFilter(bomNSData.bomJson, options);
469
+ bomNSData.bomJson = applySpecVersionCompatibility(bomNSData.bomJson, options);
470
+ bomNSData.bomJson = validateTlpClassification(bomNSData.bomJson, options);
471
+ // Support for automatic annotations
472
+ if (options.specVersion >= 1.6) {
473
+ setActivityContext({
474
+ bomMutation: "annotations",
475
+ capability: "bom-mutation",
476
+ projectType: "Annotations",
477
+ sourcePath: filePath || options.filePath || process.cwd(),
478
+ });
479
+ try {
480
+ bomNSData.bomJson = annotate(bomNSData.bomJson, options);
481
+ } finally {
482
+ resetActivityContext();
483
+ }
484
+ }
485
+ // Experimental MCP server pinning/composition enrichment. Gated by an
486
+ // off-by-default flag; returns citation hints that applyCitations merges in.
487
+ const mcpPinningCitations = applyMcpPinningState(bomNSData.bomJson, options);
488
+ // CycloneDX 1.7 citations record where each attributed assertion came from.
489
+ // Attached after spec-version compatibility so a 1.6 downgrade never carries
490
+ // a 1.7-only root element, and after annotations so audit findings can be cited.
491
+ bomNSData.bomJson = applyCitations(bomNSData.bomJson, options, [
492
+ ...(mcpPinningCitations || []),
493
+ ...(bomNSData.citations || []),
494
+ ]);
495
+ cleanupEnv(options);
496
+ cleanupTmpDir();
497
+ sortBomCollections(bomNSData.bomJson);
498
+ return bomNSData;
499
+ }
500
+
501
+ function applyLicenseEnhancement(bomJson, options) {
502
+ const licenseEnhance =
503
+ options?.licenseEnhance !== false &&
504
+ readEnvironmentVariable("CDXGEN_LICENSE_ENHANCE") !== "false";
505
+ if (!licenseEnhance || !bomJson) {
506
+ return bomJson;
507
+ }
508
+ const licensePolicy =
509
+ options?.licensePolicy || readEnvironmentVariable("CDXGEN_LICENSE_POLICY");
510
+ enhanceBom(bomJson, {
511
+ licenseEnrich:
512
+ options?.licenseEnrich !== false &&
513
+ readEnvironmentVariable("CDXGEN_LICENSE_ENRICH") !== "false",
514
+ licensePolicy,
515
+ licenseRef:
516
+ options?.licenseRef ||
517
+ readEnvironmentVariable("CDXGEN_LICENSE_REF") === "true",
518
+ specVersion: options?.specVersion || bomJson.specVersion,
519
+ });
520
+ // When a policy is supplied, surface any prohibited (error-level) licenses.
521
+ // With --fail-on-error this aborts BOM generation; otherwise it warns.
522
+ if (licensePolicy) {
523
+ const violations = collectLicensePolicyViolations(bomJson);
524
+ if (violations.length) {
525
+ const shown = violations.slice(0, 5).join("; ");
526
+ const errorMessage =
527
+ `License policy violation: ${violations.length} component(s) use a prohibited license. ` +
528
+ `Found: ${shown}${violations.length > 5 ? `; and ${violations.length - 5} more` : ""}`;
529
+ if (options?.failOnError) {
530
+ throw new Error(errorMessage);
531
+ }
532
+ console.warn(errorMessage);
533
+ }
534
+ }
535
+ return bomJson;
536
+ }
537
+
538
+ /**
539
+ * Collects the identifiers of components whose licenses violate the configured
540
+ * policy, i.e. carry a `cdx:license:complianceAlert` property set to `error`.
541
+ *
542
+ * @param {Object} bomJson CycloneDX BOM
543
+ * @returns {string[]} Sorted, de-duplicated component identifiers
544
+ */
545
+ function collectLicensePolicyViolations(bomJson) {
546
+ const violations = new Set();
547
+ const hasErrorAlert = (properties) =>
548
+ Array.isArray(properties) &&
549
+ properties.some(
550
+ (p) => p.name === "cdx:license:complianceAlert" && p.value === "error",
551
+ );
552
+ const visit = (component) => {
553
+ if (!component) {
554
+ return;
555
+ }
556
+ if (hasErrorAlert(component.properties)) {
557
+ violations.add(
558
+ component.purl || component["bom-ref"] || component.name || "unknown",
559
+ );
560
+ }
561
+ for (const sub of component.components || []) {
562
+ visit(sub);
563
+ }
564
+ };
565
+ visit(bomJson?.metadata?.component);
566
+ for (const component of bomJson?.components || []) {
567
+ visit(component);
568
+ }
569
+ return [...violations].sort();
570
+ }
571
+
572
+ function applyReleaseNotes(bomJson, options, filePath) {
573
+ if (!options?.includeReleaseNotes) {
574
+ return bomJson;
575
+ }
576
+ const specVersion = Number(options.specVersion || DEFAULT_CDX_SPEC_VERSION);
577
+ if (specVersion < 1.6) {
578
+ const errorMessage =
579
+ "releaseNotes in metadata.tools.components requires CycloneDX spec version 1.6 or above.";
580
+ if (options.failOnError) {
581
+ throw new Error(errorMessage);
582
+ }
583
+ console.warn(errorMessage);
584
+ return bomJson;
585
+ }
586
+ const toolComponents = bomJson?.metadata?.tools?.components;
587
+ if (!Array.isArray(toolComponents) || !toolComponents.length) {
588
+ return bomJson;
589
+ }
590
+ const cdxgenToolComponent = toolComponents.find(
591
+ (comp) =>
592
+ comp?.group === CDXGEN_TOOL_GROUP && comp?.name === CDXGEN_TOOL_NAME,
593
+ );
594
+ if (!cdxgenToolComponent) {
595
+ return bomJson;
596
+ }
597
+ const releaseNotes = buildReleaseNotesFromGit(filePath, options);
598
+ if (!releaseNotes) {
599
+ const errorMessage =
600
+ "Unable to compute release notes. Provide --release-notes-current-tag and optionally --release-notes-previous-tag.";
601
+ if (options.failOnError) {
602
+ throw new Error(errorMessage);
603
+ }
604
+ console.warn(errorMessage);
605
+ return bomJson;
606
+ }
607
+ cdxgenToolComponent.releaseNotes = releaseNotes;
608
+ return bomJson;
609
+ }
610
+
611
+ /**
612
+ * Apply additional metadata based on components
613
+ *
614
+ * @param {Object} bomJson BOM JSON Object
615
+ * @param {Object} options CLI options
616
+ *
617
+ * @returns {Object} Filtered BOM JSON
618
+ */
619
+ export function applyMetadata(bomJson, options) {
620
+ if (!bomJson?.components) {
621
+ return bomJson;
622
+ }
623
+ const bomPkgTypes = new Set();
624
+ const bomPkgNamespaces = new Set();
625
+ const bomSrcFiles = new Set();
626
+ for (const comp of bomJson.components) {
627
+ if (comp.purl) {
628
+ try {
629
+ const purlObj = Purl.parse(comp.purl);
630
+ if (purlObj?.type) {
631
+ bomPkgTypes.add(purlObj.type);
632
+ }
633
+ if (purlObj?.namespace) {
634
+ bomPkgNamespaces.add(purlObj.namespace);
635
+ }
636
+ } catch (_e) {
637
+ // ignore
638
+ }
639
+ }
640
+ if (comp.properties) {
641
+ for (const aprop of comp.properties) {
642
+ if (aprop.name === "internal:SrcFile" && aprop.value) {
643
+ const rdir = relativeDir(aprop.value, options);
644
+ if (comp.type !== "file") {
645
+ bomSrcFiles.add(rdir);
646
+ }
647
+ // Fix the filename to use relative directory
648
+ if (rdir !== aprop.value) {
649
+ aprop.value = rdir;
650
+ }
651
+ }
652
+ }
653
+ }
654
+ if (comp?.evidence?.identity && Array.isArray(comp.evidence.identity)) {
655
+ for (const aidentityEvidence of comp.evidence.identity) {
656
+ if (aidentityEvidence.concludedValue) {
657
+ const rdir = relativeDir(aidentityEvidence.concludedValue, options);
658
+ if (comp.type !== "file") {
659
+ bomSrcFiles.add(rdir);
660
+ }
661
+ if (rdir !== aidentityEvidence.concludedValue) {
662
+ aidentityEvidence.concludedValue = rdir;
663
+ }
664
+ }
665
+ if (
666
+ aidentityEvidence.methods &&
667
+ Array.isArray(aidentityEvidence.methods)
668
+ ) {
669
+ for (const amethod of aidentityEvidence.methods) {
670
+ const rdir = relativeDir(amethod.value, options);
671
+ if (
672
+ comp.type !== "file" &&
673
+ ["manifest-analysis"].includes(amethod.technique) &&
674
+ amethod.value
675
+ ) {
676
+ bomSrcFiles.add(rdir);
677
+ }
678
+ // Fix the filename to use relative directory
679
+ if (rdir !== amethod.value) {
680
+ amethod.value = rdir;
681
+ }
682
+ }
683
+ }
684
+ }
685
+ }
686
+ }
687
+ if (!bomJson.metadata.properties) {
688
+ bomJson.metadata.properties = [];
689
+ }
690
+ if (bomPkgTypes.size) {
691
+ const componentTypesArray = Array.from(bomPkgTypes).sort();
692
+ // Check if cdx:bom:componentTypes property already exists
693
+ const existingTypesProperty = bomJson.metadata.properties.find(
694
+ (p) => p.name === "cdx:bom:componentTypes",
695
+ );
696
+ if (!existingTypesProperty) {
697
+ bomJson.metadata.properties.push({
698
+ name: "cdx:bom:componentTypes",
699
+ value: componentTypesArray.join("\\n"),
700
+ });
701
+ }
702
+ if (componentTypesArray.length > 1) {
703
+ thoughtLog(
704
+ `BOM includes the ${componentTypesArray.length} component types: ${componentTypesArray.join(", ")}`,
705
+ );
706
+ }
707
+ }
708
+ if (bomPkgNamespaces.size) {
709
+ // Check if cdx:bom:componentNamespaces property already exists
710
+ const existingNamespacesProperty = bomJson.metadata.properties.find(
711
+ (p) => p.name === "cdx:bom:componentNamespaces",
712
+ );
713
+ if (!existingNamespacesProperty) {
714
+ bomJson.metadata.properties.push({
715
+ name: "cdx:bom:componentNamespaces",
716
+ value: Array.from(bomPkgNamespaces).sort().join("\\n"),
717
+ });
718
+ }
719
+ }
720
+ if (bomSrcFiles.size) {
721
+ const bomSrcFilesArray = Array.from(bomSrcFiles).sort();
722
+ // Check if cdx:bom:componentSrcFiles property already exists
723
+ const existingSrcFilesProperty = bomJson.metadata.properties.find(
724
+ (p) => p.name === "cdx:bom:componentSrcFiles",
725
+ );
726
+ if (!existingSrcFilesProperty) {
727
+ bomJson.metadata.properties.push({
728
+ name: "cdx:bom:componentSrcFiles",
729
+ value: bomSrcFilesArray.join("\\n"),
730
+ });
731
+ }
732
+ if (bomSrcFilesArray.length > 1 && bomSrcFilesArray.length < 5) {
733
+ thoughtLog(
734
+ `BOM includes information from ${bomSrcFilesArray.length} manifest files: ${bomSrcFilesArray.join(", ")}`,
735
+ );
736
+ }
737
+ } else {
738
+ if (!bomPkgTypes.has("oci")) {
739
+ thoughtLog("BOM lacks package manifest details. Please help us improve!");
740
+ }
741
+ }
742
+ return bomJson;
743
+ }
744
+
745
+ /**
746
+ * Apply definitions.standards based on options
747
+ *
748
+ * @param {Object} bomJson BOM JSON Object
749
+ * @param {Object} options CLI options
750
+ *
751
+ * @returns {Object} Filtered BOM JSON
752
+ */
753
+ export function applyStandards(bomJson, options) {
754
+ if (options.standard && Array.isArray(options.standard)) {
755
+ for (let astandard of options.standard) {
756
+ // See issue: #1953
757
+ if (astandard.includes(sep)) {
758
+ astandard = basename(astandard);
759
+ }
760
+ const templateFile = join(
761
+ dirNameStr,
762
+ "data",
763
+ "templates",
764
+ `${astandard}.cdx.json`,
765
+ );
766
+ if (safeExistsSync(templateFile)) {
767
+ const templateData = JSON.parse(readFileSync(templateFile, "utf-8"));
768
+ if (templateData?.metadata?.licenses) {
769
+ if (!bomJson.metadata.licenses) {
770
+ bomJson.metadata.licenses = [];
771
+ }
772
+ bomJson.metadata.licenses = bomJson.metadata.licenses.concat(
773
+ templateData.metadata.licenses,
774
+ );
775
+ }
776
+ if (templateData?.definitions?.standards) {
777
+ if (!bomJson.definitions) {
778
+ bomJson.definitions = { standards: [] };
779
+ }
780
+ bomJson.definitions.standards = bomJson.definitions.standards.concat(
781
+ templateData.definitions.standards,
782
+ );
783
+ }
784
+ }
785
+ }
786
+ }
787
+ return bomJson;
788
+ }
789
+
790
+ /**
791
+ * Method to normalize the identity field from a component's evidence block.
792
+ *
793
+ * In different versions of CycloneDX, the `identity` field can be either a single object or an array of objects.
794
+ * This function ensures that the result is always an array for consistent processing.
795
+ *
796
+ * @param {Object} comp - The component object potentially containing evidence.identity.
797
+ * @returns {Array} An array of identity objects (empty if none are present).
798
+ */
799
+ function normalizeIdentities(comp) {
800
+ const identity = comp?.evidence?.identity;
801
+ if (Array.isArray(identity)) {
802
+ return identity;
803
+ }
804
+ if (identity) {
805
+ return [identity];
806
+ }
807
+ return [];
808
+ }
809
+
810
+ /**
811
+ * Method to get the purl identity confidence.
812
+ *
813
+ * @param comp Component
814
+ * @returns {undefined|number} Max of all the available purl identity confidence or undefined
815
+ */
816
+ function getIdentityConfidence(comp) {
817
+ if (!comp.evidence) {
818
+ return undefined;
819
+ }
820
+ let confidence;
821
+ for (const aidentity of normalizeIdentities(comp)) {
822
+ if (aidentity?.field === "purl") {
823
+ if (confidence === undefined) {
824
+ confidence = aidentity.confidence || 0;
825
+ } else {
826
+ confidence = Math.max(aidentity.confidence, confidence);
827
+ }
828
+ }
829
+ }
830
+ return confidence;
831
+ }
832
+
833
+ /**
834
+ * Method to get the list of techniques used for identity.
835
+ *
836
+ * @param comp Component
837
+ * @returns {Set|undefined} Set of technique. evidence.identity.methods.technique
838
+ */
839
+ function getIdentityTechniques(comp) {
840
+ if (!comp.evidence) {
841
+ return undefined;
842
+ }
843
+ const techniques = new Set();
844
+ for (const aidentity of normalizeIdentities(comp)) {
845
+ if (aidentity?.field === "purl") {
846
+ for (const amethod of aidentity.methods || []) {
847
+ techniques.add(amethod?.technique);
848
+ }
849
+ }
850
+ }
851
+ return techniques;
852
+ }
853
+
854
+ /**
855
+ * Filter BOM based on options
856
+ *
857
+ * @param {Object} bomJson BOM JSON Object
858
+ * @param {Object} options CLI options
859
+ *
860
+ * @returns {Object} Filtered BOM JSON
861
+ */
862
+ export function filterBom(bomJson, options) {
863
+ const newPkgMap = {};
864
+ const newServices = [];
865
+ let filtered = false;
866
+ let anyFiltered = false;
867
+ if (!bomJson?.components) {
868
+ return bomJson;
869
+ }
870
+ const allowedComponentTypes = new Set(
871
+ normalizeCycloneDxComponentTypeFilter(options?.componentType),
872
+ );
873
+ for (const comp of bomJson.components) {
874
+ if (shouldExcludeInventoryType(comp, options)) {
875
+ filtered = true;
876
+ continue;
877
+ }
878
+ if (
879
+ allowedComponentTypes.size &&
880
+ (!comp.type || !allowedComponentTypes.has(comp.type))
881
+ ) {
882
+ filtered = true;
883
+ continue;
884
+ }
885
+ // minimum confidence filter
886
+ if (options?.minConfidence > 0) {
887
+ const confidence = Math.min(options.minConfidence, 1);
888
+ const identityConfidence = getIdentityConfidence(comp);
889
+ if (identityConfidence !== undefined && identityConfidence < confidence) {
890
+ filtered = true;
891
+ continue;
892
+ }
893
+ }
894
+ // identity technique filter
895
+ if (options?.technique?.length && !options.technique.includes("auto")) {
896
+ const allowedTechniques = new Set(
897
+ Array.isArray(options.technique)
898
+ ? options.technique
899
+ : [options.technique],
900
+ );
901
+ const usedTechniques = getIdentityTechniques(comp);
902
+ if (
903
+ usedTechniques &&
904
+ // `intersection` is a Set prototype method; there is no static
905
+ // `Set.intersection`, so the old form threw whenever `--technique` was
906
+ // passed with anything other than `auto`.
907
+ usedTechniques.intersection(allowedTechniques).size === 0
908
+ ) {
909
+ filtered = true;
910
+ continue;
911
+ }
912
+ }
913
+ if (
914
+ options.requiredOnly &&
915
+ comp.scope &&
916
+ ["optional", "excluded"].includes(comp.scope)
917
+ ) {
918
+ filtered = true;
919
+ } else if (options.only?.length) {
920
+ const componentPurl = comp.purl?.toLowerCase?.() || "";
921
+ if (!Array.isArray(options.only)) {
922
+ options.only = [options.only];
923
+ }
924
+ // See issue: #1962
925
+ let purlfiltered = true;
926
+ for (const filterstr of options.only) {
927
+ if (
928
+ filterstr.length &&
929
+ componentPurl.includes(filterstr.toLowerCase())
930
+ ) {
931
+ filtered = true;
932
+ purlfiltered = false;
933
+ break;
934
+ }
935
+ }
936
+ if (!purlfiltered) {
937
+ newPkgMap[comp["bom-ref"]] = comp;
938
+ }
939
+ } else if (options.filter?.length) {
940
+ if (!Array.isArray(options.filter)) {
941
+ options.filter = [options.filter];
942
+ }
943
+ let purlfiltered = false;
944
+ const componentPurl = comp.purl?.toLowerCase?.() || "";
945
+ for (const filterstr of options.filter) {
946
+ // Check the purl
947
+ if (
948
+ filterstr.length &&
949
+ componentPurl.includes(filterstr.toLowerCase())
950
+ ) {
951
+ filtered = true;
952
+ purlfiltered = true;
953
+ continue;
954
+ }
955
+ // Look for any properties value matching the string
956
+ const properties = comp.properties || [];
957
+ for (const aprop of properties) {
958
+ if (
959
+ filterstr.length &&
960
+ aprop?.value?.toLowerCase().includes(filterstr.toLowerCase())
961
+ ) {
962
+ filtered = true;
963
+ purlfiltered = true;
964
+ }
965
+ }
966
+ }
967
+ if (!purlfiltered) {
968
+ newPkgMap[comp["bom-ref"]] = comp;
969
+ }
970
+ } else {
971
+ newPkgMap[comp["bom-ref"]] = comp;
972
+ }
973
+ }
974
+ for (const service of bomJson.services || []) {
975
+ if (shouldExcludeInventoryType(service, options)) {
976
+ filtered = true;
977
+ continue;
978
+ }
979
+ newServices.push(service);
980
+ }
981
+ if (filtered) {
982
+ if (!anyFiltered) {
983
+ anyFiltered = true;
984
+ }
985
+ const newcomponents = [];
986
+ const newdependencies = [];
987
+ const retainedRefs = new Set();
988
+ for (const aref of Object.keys(newPkgMap).sort()) {
989
+ newcomponents.push(newPkgMap[aref]);
990
+ retainedRefs.add(aref);
991
+ }
992
+ for (const service of newServices) {
993
+ if (service?.["bom-ref"]) {
994
+ retainedRefs.add(service["bom-ref"]);
995
+ }
996
+ }
997
+ if (bomJson.metadata?.component?.["bom-ref"]) {
998
+ newPkgMap[bomJson.metadata.component["bom-ref"]] =
999
+ bomJson.metadata.component;
1000
+ retainedRefs.add(bomJson.metadata.component["bom-ref"]);
1001
+ }
1002
+ if (bomJson.metadata?.component?.components) {
1003
+ for (const comp of bomJson.metadata.component.components) {
1004
+ newPkgMap[comp["bom-ref"]] = comp;
1005
+ retainedRefs.add(comp["bom-ref"]);
1006
+ }
1007
+ }
1008
+ for (const adep of bomJson.dependencies || []) {
1009
+ if (retainedRefs.has(adep.ref)) {
1010
+ const newdepson = (adep.dependsOn || []).filter((d) =>
1011
+ retainedRefs.has(d),
1012
+ );
1013
+ const obj = {
1014
+ ref: adep.ref,
1015
+ dependsOn: newdepson,
1016
+ };
1017
+ // Filter provides array if needed
1018
+ if (adep.provides?.length) {
1019
+ obj.provides = adep.provides.filter((d) => retainedRefs.has(d));
1020
+ }
1021
+ newdependencies.push(obj);
1022
+ }
1023
+ }
1024
+ bomJson.components = newcomponents;
1025
+ bomJson.dependencies = newdependencies;
1026
+ bomJson.services = newServices;
1027
+ // We set the compositions.aggregate to incomplete by default
1028
+ if (
1029
+ options.specVersion >= 1.5 &&
1030
+ options.autoCompositions &&
1031
+ bomJson.metadata?.component
1032
+ ) {
1033
+ if (!bomJson.compositions) {
1034
+ bomJson.compositions = [];
1035
+ }
1036
+ bomJson.compositions.push({
1037
+ "bom-ref": bomJson.metadata.component["bom-ref"],
1038
+ aggregate: options.only ? "incomplete_first_party_only" : "incomplete",
1039
+ });
1040
+ }
1041
+ }
1042
+ if (!anyFiltered && DEBUG_MODE) {
1043
+ if (
1044
+ options.requiredOnly &&
1045
+ !options.deep &&
1046
+ hasAnyProjectType(["python"], options, false)
1047
+ ) {
1048
+ console.log(
1049
+ "TIP: Try running cdxgen with --deep argument to identify component usages with atom.",
1050
+ );
1051
+ } else if (
1052
+ options.requiredOnly &&
1053
+ options.noBabel &&
1054
+ hasAnyProjectType(["js"], options, false)
1055
+ ) {
1056
+ console.log(
1057
+ "Enable babel by removing the --no-babel argument to improve usage detection.",
1058
+ );
1059
+ }
1060
+ }
1061
+ return bomJson;
1062
+ }
1063
+
1064
+ function shouldExcludeInventoryType(subject, options) {
1065
+ return AI_INVENTORY_PROJECT_TYPES.some(
1066
+ (type) =>
1067
+ optionIncludesAiInventoryProjectType(options?.excludeType, type) &&
1068
+ matchesAiInventoryExcludeType(subject, type),
1069
+ );
1070
+ }
1071
+
1072
+ /**
1073
+ * Clean up
1074
+ */
1075
+ export function cleanupEnv(_options) {
1076
+ if (isDryRun) {
1077
+ return;
1078
+ }
1079
+ if (readEnvironmentVariable("PIP_TARGET")?.startsWith(getTmpDir())) {
1080
+ safeRmSync(readEnvironmentVariable("PIP_TARGET"), {
1081
+ recursive: true,
1082
+ force: true,
1083
+ });
1084
+ }
1085
+ }
1086
+
1087
+ /**
1088
+ * Removes the cdxgen temporary directory if it was created inside the system
1089
+ * temp directory (as indicated by `CDXGEN_TMP_DIR`). No-ops when the variable
1090
+ * is unset or points outside the system temp directory.
1091
+ *
1092
+ * @returns {void}
1093
+ */
1094
+ export function cleanupTmpDir() {
1095
+ if (isDryRun) {
1096
+ return;
1097
+ }
1098
+ if (readEnvironmentVariable("CDXGEN_TMP_DIR")?.startsWith(getTmpDir())) {
1099
+ safeRmSync(readEnvironmentVariable("CDXGEN_TMP_DIR"), {
1100
+ recursive: true,
1101
+ force: true,
1102
+ });
1103
+ }
1104
+ }
1105
+
1106
+ function stripBomLink(serialNumber, version, ref) {
1107
+ return ref.replace(`${serialNumber}/${version - 1}/`, "");
1108
+ }
1109
+
1110
+ /**
1111
+ * Annotate the document with annotator
1112
+ *
1113
+ * @param {Object} bomJson BOM JSON Object
1114
+ * @param {Object} options CLI options
1115
+ *
1116
+ * @returns {Object} Annotated BOM JSON
1117
+ */
1118
+ export function annotate(bomJson, options) {
1119
+ if (!bomJson?.components) {
1120
+ return bomJson;
1121
+ }
1122
+ const bomAnnotations = bomJson?.annotations || [];
1123
+ const cdxgenAnnotator = (bomJson.metadata?.tools?.components || []).filter(
1124
+ (c) => c.name === "cdxgen",
1125
+ );
1126
+ if (!cdxgenAnnotator.length) {
1127
+ return bomJson;
1128
+ }
1129
+ const { bomType } = findBomType(bomJson);
1130
+ const requiresContextTuning = [
1131
+ "deep-learning",
1132
+ "machine-learning",
1133
+ "ml",
1134
+ "ml-deep",
1135
+ "ml-tiny",
1136
+ ].includes(options?.profile);
1137
+ const requiresContextTrimming =
1138
+ (requiresContextTuning && ["saasbom"].includes(bomType.toLowerCase())) ||
1139
+ ["ml-tiny"].includes(options?.profile);
1140
+ // Construct the bom-link prefix to use for context tuning
1141
+ const bomLinkPrefix = `${bomJson.serialNumber}/${bomJson.version}/`;
1142
+ const metadataAnnotations = textualMetadata(bomJson);
1143
+ let parentBomRef;
1144
+ if (bomJson.metadata?.component?.["bom-ref"]) {
1145
+ if (requiresContextTuning) {
1146
+ bomJson.metadata.component["bom-ref"] =
1147
+ `${bomLinkPrefix}${stripBomLink(bomJson.serialNumber, bomJson.version, bomJson.metadata.component["bom-ref"])}`;
1148
+ }
1149
+ parentBomRef = bomJson.metadata.component["bom-ref"];
1150
+ }
1151
+ if (metadataAnnotations) {
1152
+ bomAnnotations.push({
1153
+ "bom-ref": "metadata-annotations",
1154
+ subjects: parentBomRef ? [parentBomRef] : [bomJson.serialNumber],
1155
+ annotator: {
1156
+ component: cdxgenAnnotator[0],
1157
+ },
1158
+ // An annotation describes the document it is attached to, so it carries
1159
+ // that document's timestamp rather than the moment postgen ran.
1160
+ timestamp: bomJson.metadata?.timestamp || getTimestamp(),
1161
+ text: metadataAnnotations,
1162
+ });
1163
+ }
1164
+ bomJson.annotations = bomAnnotations;
1165
+ // Shall we trim the metadata section
1166
+ if (requiresContextTrimming) {
1167
+ if (bomJson?.metadata?.component?.components) {
1168
+ bomJson.metadata.component.components = undefined;
1169
+ }
1170
+ if (bomJson?.metadata?.component?.["bom-ref"]) {
1171
+ bomJson.metadata.component["bom-ref"] = undefined;
1172
+ }
1173
+ if (bomJson?.metadata?.component?.properties) {
1174
+ bomJson.metadata.component.properties = undefined;
1175
+ }
1176
+ if (bomJson?.metadata?.properties) {
1177
+ bomJson.metadata.properties = undefined;
1178
+ }
1179
+ }
1180
+ // Tag the components
1181
+ for (const comp of bomJson.components) {
1182
+ const tags = extractTags(comp, bomType, bomJson.metadata?.component?.type);
1183
+ if (tags?.length) {
1184
+ comp.tags = tags;
1185
+ }
1186
+ if (requiresContextTuning) {
1187
+ comp["bom-ref"] =
1188
+ `${bomLinkPrefix}${stripBomLink(bomJson.serialNumber, bomJson.version, comp["bom-ref"])}`;
1189
+ comp.description = undefined;
1190
+ comp.properties = undefined;
1191
+ comp.evidence = undefined;
1192
+ }
1193
+ if (requiresContextTrimming) {
1194
+ comp.authors = undefined;
1195
+ comp.supplier = undefined;
1196
+ comp.publisher = undefined;
1197
+ comp["bom-ref"] = undefined;
1198
+ comp.externalReferences = undefined;
1199
+ comp.description = undefined;
1200
+ comp.properties = undefined;
1201
+ comp.evidence = undefined;
1202
+ // We will lose information about nested components, such as the files in case of poetry.lock
1203
+ comp.components = undefined;
1204
+ }
1205
+ }
1206
+ // For tiny models, we can remove the dependencies section
1207
+ if (requiresContextTrimming) {
1208
+ bomJson.dependencies = undefined;
1209
+ if (bomType.toLowerCase() === "saasbom") {
1210
+ bomJson.components = undefined;
1211
+ let i = 0;
1212
+ for (const aserv of bomJson.services) {
1213
+ aserv.name = `service-${i++}`;
1214
+ }
1215
+ }
1216
+ }
1217
+ // Problem: information such as the dependency tree are specific to an sbom
1218
+ // To prevent the models from incorrectly learning about the trees, we automatically convert all bom-ref
1219
+ // references to [bom-link](https://cyclonedx.org/capabilities/bomlink/) format
1220
+ if (requiresContextTuning && bomJson?.dependencies?.length) {
1221
+ const newDeps = [];
1222
+ for (const dep of bomJson.dependencies) {
1223
+ const newRef = `${bomLinkPrefix}${stripBomLink(bomJson.serialNumber, bomJson.version, dep.ref)}`;
1224
+ const newDependsOn = [];
1225
+ for (const adon of dep.dependsOn) {
1226
+ newDependsOn.push(
1227
+ `${bomLinkPrefix}${stripBomLink(bomJson.serialNumber, bomJson.version, adon)}`,
1228
+ );
1229
+ }
1230
+ newDeps.push({
1231
+ ref: newRef,
1232
+ dependsOn: newDependsOn.sort(),
1233
+ });
1234
+ }
1235
+ // Overwrite the dependencies
1236
+ bomJson.dependencies = newDeps;
1237
+ }
1238
+ return bomJson;
1239
+ }