@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,1048 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { chmodSync } from "node:fs";
3
+ import { homedir, platform } from "node:os";
4
+ import { basename, join, resolve } from "node:path";
5
+
6
+ import { build } from "@cdxgen/cdx-purl";
7
+
8
+ import {
9
+ DEBUG_MODE,
10
+ readEnvironmentVariable,
11
+ recordDecisionActivity,
12
+ } from "../core/activity.js";
13
+ import { getAllFiles, safeExistsSync, safeSpawnSync } from "../core/fs.js";
14
+ import { thoughtLog } from "../core/logger.js";
15
+ import { isWin } from "../core/paths.js";
16
+ import { collectJarNS } from "../inventory/deps.js";
17
+ import { applyPurl } from "../inventory/purl.js";
18
+ import { parsePkgJson } from "./parsers-js.js";
19
+
20
+ /**
21
+ * Method to return the gradle command to use.
22
+ *
23
+ * @param {string} srcPath Path to look for gradlew wrapper
24
+ * @param {string|null} rootPath Root directory to look for gradlew wrapper
25
+ */
26
+ export function getGradleCommand(srcPath, rootPath) {
27
+ let gradleCmd = "gradle";
28
+
29
+ let findGradleFile = "gradlew";
30
+ if (platform() === "win32") {
31
+ findGradleFile = "gradlew.bat";
32
+ }
33
+
34
+ if (safeExistsSync(join(srcPath, findGradleFile))) {
35
+ // Use local gradle wrapper if available
36
+ // Enable execute permission
37
+ try {
38
+ chmodSync(join(srcPath, findGradleFile), 0o775);
39
+ } catch (_e) {
40
+ // continue regardless of error
41
+ }
42
+ gradleCmd = resolve(join(srcPath, findGradleFile));
43
+ recordDecisionActivity(gradleCmd, {
44
+ metadata: {
45
+ decisionType: "path-resolution",
46
+ selectedSource: "project-wrapper",
47
+ tool: "gradle",
48
+ },
49
+ reason: `Selected project-local Gradle wrapper ${gradleCmd}.`,
50
+ });
51
+ } else if (rootPath && safeExistsSync(join(rootPath, findGradleFile))) {
52
+ // Check if the root directory has a wrapper script
53
+ try {
54
+ chmodSync(join(rootPath, findGradleFile), 0o775);
55
+ } catch (_e) {
56
+ // continue regardless of error
57
+ }
58
+ gradleCmd = resolve(join(rootPath, findGradleFile));
59
+ recordDecisionActivity(gradleCmd, {
60
+ metadata: {
61
+ decisionType: "path-resolution",
62
+ selectedSource: "root-wrapper",
63
+ tool: "gradle",
64
+ },
65
+ reason: `Selected root-level Gradle wrapper ${gradleCmd}.`,
66
+ });
67
+ } else if (readEnvironmentVariable("GRADLE_CMD")) {
68
+ gradleCmd = readEnvironmentVariable("GRADLE_CMD");
69
+ recordDecisionActivity(gradleCmd, {
70
+ metadata: {
71
+ decisionType: "path-resolution",
72
+ selectedSource: "GRADLE_CMD",
73
+ tool: "gradle",
74
+ },
75
+ reason: `Selected Gradle command from GRADLE_CMD (${gradleCmd}).`,
76
+ });
77
+ } else if (readEnvironmentVariable("GRADLE_HOME")) {
78
+ gradleCmd = join(readEnvironmentVariable("GRADLE_HOME"), "bin", "gradle");
79
+ recordDecisionActivity(gradleCmd, {
80
+ metadata: {
81
+ decisionType: "path-resolution",
82
+ selectedSource: "GRADLE_HOME",
83
+ tool: "gradle",
84
+ },
85
+ reason: `Selected Gradle command from GRADLE_HOME (${gradleCmd}).`,
86
+ });
87
+ } else {
88
+ recordDecisionActivity(gradleCmd, {
89
+ metadata: {
90
+ decisionType: "path-resolution",
91
+ selectedSource: "PATH",
92
+ tool: "gradle",
93
+ },
94
+ reason: "Falling back to Gradle from PATH.",
95
+ });
96
+ }
97
+ return gradleCmd;
98
+ }
99
+
100
+ /**
101
+ * Method to combine the general gradle arguments, the sub-commands and the sub-commands' arguments in the correct way
102
+ *
103
+ * @param {string[]} gradleArguments The general gradle arguments, which must only be added once
104
+ * @param {string[]} gradleSubCommands The sub-commands that are to be executed by gradle
105
+ * @param {string[]} gradleSubCommandArguments The arguments specific to the sub-command(s), which much be added PER sub-command
106
+ * @param {int} gradleCommandLength The length of the full gradle-command
107
+ *
108
+ * @returns {string[]} Array of arrays of arguments to be added to the gradle command
109
+ */
110
+ export function buildGradleCommandArguments(
111
+ gradleArguments,
112
+ gradleSubCommands,
113
+ gradleSubCommandArguments,
114
+ gradleCommandLength,
115
+ ) {
116
+ const mainGradleArguments = [
117
+ "--build-cache",
118
+ "--console",
119
+ "plain",
120
+ "--no-parallel",
121
+ ]
122
+ .concat(getGradleDaemonParameter())
123
+ .concat(gradleArguments);
124
+ const maxCliArgsLength = isWin
125
+ ? 7500 - gradleCommandLength - mainGradleArguments.join(" ").length - 2
126
+ : -1;
127
+ if (DEBUG_MODE && maxCliArgsLength !== -1) {
128
+ console.log(
129
+ "Running on Windows with a very long command -- splitting into multiple commands",
130
+ );
131
+ }
132
+ const splitArgs = [];
133
+ let allGradleArguments = [].concat(mainGradleArguments);
134
+ let remainingLength = maxCliArgsLength;
135
+ for (const gradleSubCommand of gradleSubCommands) {
136
+ const subCommandLength =
137
+ [gradleSubCommand, ...gradleSubCommandArguments].join(" ").length + 1;
138
+ if (maxCliArgsLength !== -1 && remainingLength - subCommandLength < 0) {
139
+ splitArgs.push(allGradleArguments);
140
+ allGradleArguments = [].concat(mainGradleArguments);
141
+ remainingLength = maxCliArgsLength;
142
+ }
143
+ allGradleArguments.push(gradleSubCommand);
144
+ allGradleArguments = allGradleArguments.concat(gradleSubCommandArguments);
145
+ remainingLength -= subCommandLength;
146
+ }
147
+ if (allGradleArguments.length !== mainGradleArguments.length) {
148
+ splitArgs.push(allGradleArguments);
149
+ }
150
+ return splitArgs;
151
+ }
152
+
153
+ function getGradleDaemonParameter() {
154
+ switch (readEnvironmentVariable("GRADLE_USE_DAEMON")) {
155
+ case "default":
156
+ return [];
157
+ case "false":
158
+ case "1":
159
+ return ["--no-daemon"];
160
+ default:
161
+ return ["--daemon"];
162
+ }
163
+ }
164
+
165
+ /**
166
+ * Method to split the output produced by Gradle using parallel processing by project
167
+ *
168
+ * @param {string} rawOutput Full output produced by Gradle using parallel processing
169
+ * @param {string[]} relevantTasks The list of gradle tasks whose output need to be considered.
170
+ * @returns {map} Map with subProject names as keys and corresponding dependency task outputs as values.
171
+ */
172
+ export function splitOutputByGradleProjects(rawOutput, relevantTasks) {
173
+ const outputSplitBySubprojects = new Map();
174
+ let subProjectOut = "";
175
+ const outSplitByLine = rawOutput.split("\n");
176
+ let currentProjectName = "root";
177
+ const regexPatternForRelevantTasks = `.*:(${relevantTasks.join("|")})(?=s|\r|$)`;
178
+ const regexForRelevantTasks = new RegExp(regexPatternForRelevantTasks);
179
+ for (const [i, line] of outSplitByLine.entries()) {
180
+ //filter out everything before first task output
181
+ if (!line.startsWith("> Task :") && subProjectOut === "") {
182
+ continue;
183
+ }
184
+
185
+ //ignore output of irrelevant tasks
186
+ if (line.startsWith("> Task :") && !regexForRelevantTasks.test(line)) {
187
+ continue;
188
+ }
189
+
190
+ if (line.startsWith("Root project '") || line.startsWith("Project ':")) {
191
+ currentProjectName = line.split("'")[1];
192
+ outputSplitBySubprojects.set(currentProjectName, "");
193
+ }
194
+ // if previous subProject has ended, push to array and reset subProject string
195
+ if (line.startsWith("> Task :") && subProjectOut !== "") {
196
+ outputSplitBySubprojects.set(currentProjectName, subProjectOut);
197
+ subProjectOut = "";
198
+ }
199
+ //if in subproject block, keep appending to string
200
+ subProjectOut += `${line}\n`;
201
+ //if end of last dependencies output block, push to array
202
+ if (i === outSplitByLine.length - 1) {
203
+ outputSplitBySubprojects.set(currentProjectName, subProjectOut);
204
+ }
205
+ }
206
+ return outputSplitBySubprojects;
207
+ }
208
+
209
+ /**
210
+ * Parse gradle projects output
211
+ *
212
+ * @param {string} rawOutput Raw string output
213
+ */
214
+ export function parseGradleProjects(rawOutput) {
215
+ let rootProject = "root";
216
+ const projects = new Set();
217
+ if (typeof rawOutput === "string") {
218
+ const tmpA = rawOutput.split("\n");
219
+ tmpA.forEach((l) => {
220
+ l = l.replaceAll("\r", "");
221
+ if (l.startsWith("Root project ")) {
222
+ rootProject = l
223
+ .split("Root project ")[1]
224
+ .split(" ")[0]
225
+ .replace(/'/g, "");
226
+ } else if (l.includes("--- Project")) {
227
+ const tmpB = l.split("Project ");
228
+ if (tmpB && tmpB.length > 1) {
229
+ const projName = tmpB[1].split(" ")[0].replace(/'/g, "");
230
+ // Include all projects including test projects
231
+ if (projName.startsWith(":")) {
232
+ // Handle the case where the project name could have a space. Eg: +--- project :app (*)
233
+ const tmpName = projName.split(" ")[0];
234
+ if (tmpName.length > 1) {
235
+ projects.add(tmpName);
236
+ }
237
+ }
238
+ }
239
+ } else if (l.includes("--- project ")) {
240
+ const tmpB = l.split("--- project ");
241
+ if (tmpB && tmpB.length > 1) {
242
+ const projName = tmpB[1];
243
+ if (projName.startsWith(":")) {
244
+ const tmpName = projName.split(" ")[0];
245
+ if (tmpName.length > 1) {
246
+ projects.add(tmpName);
247
+ }
248
+ }
249
+ }
250
+ } else if (l.includes("-> project ")) {
251
+ const tmpB = l.split("-> project ");
252
+ if (tmpB && tmpB.length > 1) {
253
+ const projName = tmpB[1];
254
+ if (projName.startsWith(":")) {
255
+ const tmpName = projName.split(" ")[0];
256
+ if (tmpName.length > 1) {
257
+ projects.add(tmpName);
258
+ }
259
+ }
260
+ }
261
+ }
262
+ });
263
+ }
264
+ return {
265
+ rootProject,
266
+ projects: Array.from(projects),
267
+ };
268
+ }
269
+
270
+ /**
271
+ * Parse gradle properties output
272
+ *
273
+ * @param {string} rawOutput Raw string output
274
+ * @param {string} gradleModuleName The name (or 'path') of the module as seen from the root of the project
275
+ */
276
+ export function parseGradleProperties(rawOutput, gradleModuleName = null) {
277
+ let rootProject = "root";
278
+ const projects = new Set();
279
+ const metadata = { group: "", version: "latest", properties: [] };
280
+ if (gradleModuleName) {
281
+ metadata.properties.push({
282
+ name: "internal:GradleModule",
283
+ value: gradleModuleName,
284
+ });
285
+ }
286
+ if (typeof rawOutput === "string") {
287
+ const tmpA = rawOutput.split("\n");
288
+ tmpA.forEach((l) => {
289
+ l = l.replaceAll("\r", "");
290
+ if (
291
+ !gradleModuleName &&
292
+ (l.startsWith("Root project '") || l.startsWith("Project '"))
293
+ ) {
294
+ metadata.properties.push({
295
+ name: "internal:GradleModule",
296
+ value: l.split("'")[1],
297
+ });
298
+ return;
299
+ }
300
+ if (l.startsWith("----") || l.startsWith(">") || !l.includes(": ")) {
301
+ return;
302
+ }
303
+ const tmpB = l.split(": ");
304
+ if (tmpB && tmpB.length === 2) {
305
+ if (tmpB[0] === "name") {
306
+ rootProject = tmpB[1].trim();
307
+ } else if (tmpB[0] === "group") {
308
+ metadata[tmpB[0]] = tmpB[1];
309
+ } else if (tmpB[0] === "version") {
310
+ metadata[tmpB[0]] = tmpB[1].trim().replace("unspecified", "latest");
311
+ } else if (["buildFile", "projectDir", "rootDir"].includes(tmpB[0])) {
312
+ metadata.properties.push({ name: tmpB[0], value: tmpB[1].trim() });
313
+ } else if (tmpB[0] === "subprojects") {
314
+ const spStrs = tmpB[1].replace(/[[\]']/g, "").split(", ");
315
+ const tmpprojects = spStrs
316
+ .flatMap((s) => s.replace("project ", ""))
317
+ .filter((s) => ![""].includes(s.trim()));
318
+ tmpprojects.forEach(projects.add, projects);
319
+ }
320
+ }
321
+ });
322
+ }
323
+ return {
324
+ rootProject,
325
+ projects: Array.from(projects),
326
+ metadata,
327
+ };
328
+ }
329
+
330
+ /**
331
+ * Execute gradle properties command using multi-threading and return parsed output
332
+ *
333
+ * @param {string} dir Directory to execute the command
334
+ * @param {array} allProjectsStr List of all sub-projects (including the preceding `:`)
335
+ * @param {array} extraArgs List of extra arguments to use when calling gradle
336
+ *
337
+ * @returns {string} The combined output for all subprojects of the Gradle properties task
338
+ */
339
+ export function executeParallelGradleProperties(
340
+ dir,
341
+ allProjectsStr,
342
+ extraArgs = [],
343
+ ) {
344
+ const gradleCmd = getGradleCommand(dir, null);
345
+ const gradleArgs = buildGradleCommandArguments(
346
+ extraArgs.concat(
347
+ readEnvironmentVariable("GRADLE_ARGS")
348
+ ? readEnvironmentVariable("GRADLE_ARGS").split(" ")
349
+ : [],
350
+ ),
351
+ allProjectsStr.map((project) =>
352
+ project ? `${project}:properties` : "properties",
353
+ ),
354
+ readEnvironmentVariable("GRADLE_ARGS_PROPERTIES")
355
+ ? readEnvironmentVariable("GRADLE_ARGS_PROPERTIES").split(" ")
356
+ : [],
357
+ gradleCmd.length,
358
+ );
359
+ const allOutputs = [];
360
+ for (const gradleArg of gradleArgs) {
361
+ if (DEBUG_MODE) {
362
+ console.log(
363
+ `Executing ${gradleCmd} with arguments ${gradleArg.join(" ").substring(0, 150)}... in ${dir}`,
364
+ );
365
+ }
366
+ const result = safeSpawnSync(gradleCmd, gradleArg, {
367
+ cwd: dir,
368
+ shell: isWin,
369
+ });
370
+ if (result.status !== 0 || result.error) {
371
+ if (readEnvironmentVariable("CDXGEN_IN_CONTAINER") === "true") {
372
+ thoughtLog(
373
+ "Gradle build has failed. Perhaps the user is using the wrong container image?",
374
+ );
375
+ } else {
376
+ thoughtLog(
377
+ "Gradle build has failed. I recommend using Java container images.",
378
+ );
379
+ }
380
+ if (result.stderr) {
381
+ console.group("*** GRADLE BUILD ERRORS ***");
382
+ console.error(result.stdout, result.stderr);
383
+ console.groupEnd();
384
+ console.log(
385
+ "1. Check if the correct version of java and gradle are installed and available in PATH. For example, some project might require Java 11 with gradle 7.\n cdxgen container image bundles Java 23 with gradle 8 which might be incompatible.",
386
+ );
387
+ console.log(
388
+ "2. Try running cdxgen with the custom JDK11-based image `ghcr.io/cdxgen/cdxgen-java11:v13`.",
389
+ );
390
+ if (result.stderr?.includes("not get unknown property")) {
391
+ console.log(
392
+ "3. Check if the SBOM is generated for the correct root project for your application.",
393
+ );
394
+ } else if (
395
+ result.stderr?.includes(
396
+ "In version catalog libs, import of external catalog file failed",
397
+ )
398
+ ) {
399
+ console.log(
400
+ "3. Catalog file is required for gradle dependency resolution to succeed.",
401
+ );
402
+ } else if (result.stderr?.includes("Unrecognized option")) {
403
+ console.log(
404
+ "3. Try removing the unrecognized options to improve compatibility with a range of Java versions. Refer to the error message above.",
405
+ );
406
+ }
407
+ if (result.stderr.includes("does not exist")) {
408
+ return "";
409
+ }
410
+ }
411
+ }
412
+ if (result.stdout !== null) {
413
+ allOutputs.push(result.stdout);
414
+ }
415
+ }
416
+ const stdout = allOutputs.join("\n");
417
+ if (stdout) {
418
+ return Buffer.from(stdout).toString();
419
+ }
420
+ return "";
421
+ }
422
+
423
+ /**
424
+ * Method to resolve dependencies from a gradle output
425
+ *
426
+ * @param {string} rawOutput Text output from gradle dependencies task
427
+ * @param {string} rootProjectName Name of the root project
428
+ * @param {map} gradleModules Cache with all gradle modules that have already been read
429
+ * @param {string} gradleRootPath Root path where Gradle is to be run when getting module information
430
+ */
431
+ export async function parseGradleDep(
432
+ rawOutput,
433
+ rootProjectName = "root",
434
+ gradleModules = new Map(),
435
+ gradleRootPath = "",
436
+ ) {
437
+ if (typeof rawOutput === "string") {
438
+ // Bug: 249. Get any sub-projects refered here
439
+ const retMap = parseGradleProjects(rawOutput);
440
+ // Issue #289. Work hard to find the root project name
441
+ if (
442
+ !rootProjectName ||
443
+ (rootProjectName === "root" &&
444
+ retMap &&
445
+ retMap.rootProject &&
446
+ retMap.rootProject !== "root")
447
+ ) {
448
+ rootProjectName = retMap.rootProject;
449
+ }
450
+ let match = "";
451
+ // To render dependency tree we need a root project
452
+ const rootProject = gradleModules.get(rootProjectName);
453
+ const deps = [];
454
+ const dependenciesList = [];
455
+ const keys_cache = {};
456
+ const deps_keys_cache = {};
457
+ let last_level = 0;
458
+ let last_bomref = rootProject["bom-ref"];
459
+ const first_bomref = last_bomref;
460
+ let last_project_bomref = first_bomref;
461
+ const level_trees = {};
462
+ level_trees[last_bomref] = [];
463
+ let scope;
464
+ let profileName;
465
+ if (retMap?.projects) {
466
+ const modulesToSkip = readEnvironmentVariable("GRADLE_SKIP_MODULES")
467
+ ? readEnvironmentVariable("GRADLE_SKIP_MODULES").split(",")
468
+ : [];
469
+ const modulesToScan = retMap.projects.filter(
470
+ (module) => !gradleModules.has(module),
471
+ );
472
+ if (modulesToScan.length > 0) {
473
+ const parallelPropTaskOut = executeParallelGradleProperties(
474
+ gradleRootPath,
475
+ modulesToScan.filter((module) => !modulesToSkip.includes(module)),
476
+ );
477
+ const splitPropTaskOut = splitOutputByGradleProjects(
478
+ parallelPropTaskOut,
479
+ ["properties"],
480
+ );
481
+
482
+ for (const module of modulesToScan) {
483
+ const propMap = parseGradleProperties(
484
+ splitPropTaskOut.get(module),
485
+ module,
486
+ );
487
+ const rootSubProject = propMap.rootProject;
488
+ if (rootSubProject) {
489
+ const rootSubProjectObj = await buildObjectForGradleModule(
490
+ rootSubProject === "root" ? module : rootSubProject,
491
+ propMap.metadata,
492
+ );
493
+ gradleModules.set(module, rootSubProjectObj);
494
+ }
495
+ }
496
+ }
497
+ const subDependsOn = [];
498
+ for (const sd of retMap.projects) {
499
+ if (gradleModules.has(sd)) {
500
+ subDependsOn.push(gradleModules.get(sd)["bom-ref"]);
501
+ }
502
+ }
503
+ level_trees[last_bomref] = subDependsOn;
504
+ }
505
+ let stack = [last_bomref];
506
+ const depRegex =
507
+ /^.*?--- +(?<groupspecified>[^\s:]+) ?:(?<namespecified>[^\s:]+)(?::(?:{strictly [[]?)?(?<versionspecified>[^,\s:}]+))?(?:})?(?:[^->]* +-> +(?:(?<groupoverride>[^\s:]+):(?<nameoverride>[^\s:]+):)?(?<versionoverride>[^\s:]+))?/gm;
508
+ for (let rline of rawOutput.split("\n")) {
509
+ if (!rline) {
510
+ continue;
511
+ }
512
+ rline = rline.replaceAll("\r", "");
513
+ const trimmedLine = rline.trim();
514
+ if (
515
+ trimmedLine.endsWith("(n)") ||
516
+ ((rline.startsWith("+--- ") || rline.startsWith("\\--- ")) &&
517
+ rline.includes("{strictly") &&
518
+ rline.includes("(c)"))
519
+ ) {
520
+ continue;
521
+ }
522
+ if (
523
+ trimmedLine === "" ||
524
+ rline.startsWith("+--- ") ||
525
+ rline.startsWith("\\--- ")
526
+ ) {
527
+ last_level = 1;
528
+ last_project_bomref = first_bomref;
529
+ last_bomref = last_project_bomref;
530
+ stack = [first_bomref];
531
+ }
532
+ if (rline.includes(" - ") && !rline.startsWith("Project ':")) {
533
+ profileName = rline.split(" - ")[0];
534
+ if (profileName.toLowerCase().includes("test")) {
535
+ scope = "optional";
536
+ } else if (profileName.toLowerCase().includes("runtime")) {
537
+ scope = "required";
538
+ } else {
539
+ scope = undefined;
540
+ }
541
+ }
542
+ while ((match = depRegex.exec(rline))) {
543
+ const [
544
+ _line,
545
+ groupspecified,
546
+ namespecified,
547
+ versionspecified,
548
+ groupoverride,
549
+ nameoverride,
550
+ versionoverride,
551
+ ] = match;
552
+ let group = groupoverride || groupspecified;
553
+ let name = nameoverride || namespecified;
554
+ let version = versionoverride || versionspecified;
555
+ const prefix = rline.split("---")[0];
556
+ const level = Math.floor(prefix.length / 5) + 1;
557
+ if (version !== undefined || group === "project") {
558
+ // Project line has no version
559
+ // For multi sub-module projects such as :module:dummy:starter the regex is producing incorrect values
560
+ if (rline.includes("project ")) {
561
+ const tmpA = rline.split("project ");
562
+ if (tmpA && tmpA.length > 1) {
563
+ group = rootProject.group;
564
+ name = tmpA[1].split(" ")[0];
565
+ version = undefined;
566
+ }
567
+ }
568
+ let purl;
569
+ let bomRef;
570
+ if (gradleModules.has(name)) {
571
+ purl = gradleModules.get(name)["purl"];
572
+ bomRef = gradleModules.get(name)["bom-ref"];
573
+ } else {
574
+ try {
575
+ purl = build({
576
+ type: "maven",
577
+ namespace:
578
+ group !== "project" ? group : rootProject.group || null,
579
+ name: name.replace(/^:/, ""),
580
+ version:
581
+ version !== undefined ? version : rootProject.version || null,
582
+ qualifiers: { type: "jar" },
583
+ });
584
+ bomRef = decodeURIComponent(purl);
585
+ } catch {
586
+ purl = undefined;
587
+ bomRef = name.replace(/^:/, "");
588
+ }
589
+ }
590
+ keys_cache[`${bomRef}_${last_bomref}`] = true;
591
+ // Filter duplicates
592
+ if (!deps_keys_cache[bomRef]) {
593
+ deps_keys_cache[bomRef] = true;
594
+ let adep;
595
+ if (gradleModules.has(name)) {
596
+ adep = gradleModules.get(name);
597
+ } else {
598
+ adep = {
599
+ group: group !== "project" ? group : rootProject.group,
600
+ name: name,
601
+ version: version !== undefined ? version : rootProject.version,
602
+ qualifiers: { type: "jar" },
603
+ };
604
+ adep["purl"] = purl;
605
+ adep["bom-ref"] = bomRef;
606
+ if (scope) {
607
+ adep["scope"] = scope;
608
+ }
609
+ adep.properties = [];
610
+ if (profileName) {
611
+ adep.properties.push({
612
+ name: "internal:GradleProfileName",
613
+ value: profileName,
614
+ });
615
+ }
616
+ if (gradleRootPath && gradleRootPath !== ".") {
617
+ adep.properties.push({
618
+ name: "cdx:gradle:GradleRootPath",
619
+ value: gradleRootPath,
620
+ });
621
+ }
622
+ }
623
+ if (adep?.properties?.length === 0) {
624
+ delete adep.properties;
625
+ }
626
+ deps.push(adep);
627
+ }
628
+ if (!level_trees[bomRef]) {
629
+ level_trees[bomRef] = [];
630
+ }
631
+ if (level === 0) {
632
+ stack = [first_bomref];
633
+ stack.push(bomRef);
634
+ } else if (last_bomref === "") {
635
+ stack.push(bomRef);
636
+ } else if (level > last_level) {
637
+ const cnodes = level_trees[last_bomref] || [];
638
+ if (!cnodes.includes(bomRef)) {
639
+ cnodes.push(bomRef);
640
+ }
641
+ level_trees[last_bomref] = cnodes;
642
+ if (stack[stack.length - 1] !== bomRef) {
643
+ stack.push(bomRef);
644
+ }
645
+ } else {
646
+ for (let i = level; i <= last_level; i++) {
647
+ stack.pop();
648
+ }
649
+ const last_stack =
650
+ stack.length > 0 ? stack[stack.length - 1] : last_project_bomref;
651
+ const cnodes = level_trees[last_stack] || [];
652
+ if (!cnodes.includes(bomRef)) {
653
+ cnodes.push(bomRef);
654
+ }
655
+ level_trees[last_stack] = cnodes;
656
+ stack.push(bomRef);
657
+ }
658
+ last_level = level;
659
+ last_bomref = bomRef;
660
+ }
661
+ }
662
+ }
663
+ for (const lk of Object.keys(level_trees)) {
664
+ dependenciesList.push({
665
+ ref: lk,
666
+ dependsOn: [...new Set(level_trees[lk])].sort(),
667
+ });
668
+ }
669
+ return {
670
+ pkgList: deps,
671
+ dependenciesList,
672
+ };
673
+ }
674
+ return {};
675
+ }
676
+
677
+ /**
678
+ * Method that handles object creation for gradle modules.
679
+ *
680
+ * @param {string} name The simple name of the module
681
+ * @param {object} metadata Object with all other parsed data for the gradle module
682
+ * @returns {object} An object representing the gradle module in SBOM-format
683
+ */
684
+ export async function buildObjectForGradleModule(name, metadata) {
685
+ let component;
686
+ if (
687
+ !["false", "0"].includes(
688
+ readEnvironmentVariable("GRADLE_RESOLVE_FROM_NODE"),
689
+ ) &&
690
+ metadata.properties?.find(({ name }) => name === "projectDir")
691
+ ) {
692
+ let tmpDir = metadata.properties?.find(
693
+ ({ name }) => name === "projectDir",
694
+ ).value;
695
+ if (tmpDir.indexOf("node_modules") !== -1) {
696
+ do {
697
+ const npmPackages = await parsePkgJson(join(tmpDir, "package.json"));
698
+ if (npmPackages.length === 1) {
699
+ component = { ...npmPackages[0] };
700
+ component.type = "library";
701
+ component.properties = component.properties.concat(
702
+ metadata.properties,
703
+ );
704
+ tmpDir = undefined;
705
+ } else {
706
+ tmpDir = tmpDir.substring(0, tmpDir.lastIndexOf("/"));
707
+ }
708
+ } while (tmpDir && tmpDir.indexOf("node_modules") !== -1);
709
+ }
710
+ }
711
+ if (!component) {
712
+ component = {
713
+ name: name,
714
+ type: "application",
715
+ ...metadata,
716
+ };
717
+ try {
718
+ const purl = build({
719
+ type: "maven",
720
+ namespace: component.group || null,
721
+ name: component.name,
722
+ version: component.version || null,
723
+ qualifiers: { type: "jar" },
724
+ });
725
+ applyPurl(component, purl);
726
+ } catch {
727
+ applyPurl(component, null);
728
+ }
729
+ }
730
+ return component;
731
+ }
732
+
733
+ /**
734
+ * Extract Gradle repository URLs from the evaluation output properties.
735
+ *
736
+ * @param {string} propertiesOutput Properties command output containing repository lines
737
+ * @returns {Object} Map of repository names to their URLs
738
+ */
739
+ export function extractGradleRepositoryUrls(propertiesOutput) {
740
+ const repos = {};
741
+ if (!propertiesOutput) {
742
+ return repos;
743
+ }
744
+ for (const line of propertiesOutput.split("\n")) {
745
+ if (line.includes("<CDXGEN:repository>:")) {
746
+ const parts = line.split("<CDXGEN:repository>:")[1].split(":");
747
+ if (parts.length >= 2) {
748
+ const repoName = parts[0].trim();
749
+ const repoUrl = parts.slice(1).join(":").trim();
750
+ repos[repoName] = repoUrl;
751
+ }
752
+ }
753
+ }
754
+ return repos;
755
+ }
756
+
757
+ /**
758
+ * Parse the distribution URLs resolved by the init script when the
759
+ * `resolve-gradle-distribution` feature flag is enabled. The init script emits lines of
760
+ * the form `<CDXGEN:distribution>:group:name:version -> https://.../name-version.jar`.
761
+ *
762
+ * @param {string} stdout Gradle stdout logs containing the distribution markers
763
+ * @returns {Object} Map of `group:name:version` keys to their resolved distribution URLs
764
+ */
765
+ export function parseGradleResolvedDistributions(stdout) {
766
+ const distMap = {};
767
+ if (!stdout) {
768
+ return distMap;
769
+ }
770
+ for (const line of stdout.split("\n")) {
771
+ if (!line.includes("<CDXGEN:distribution>:")) {
772
+ continue;
773
+ }
774
+ const payload = line.split("<CDXGEN:distribution>:")[1];
775
+ const sepIndex = payload.indexOf(" -> ");
776
+ if (sepIndex === -1) {
777
+ continue;
778
+ }
779
+ const key = payload.substring(0, sepIndex).trim();
780
+ const url = payload.substring(sepIndex + 4).trim();
781
+ if (key && url) {
782
+ distMap[key] = url;
783
+ }
784
+ }
785
+ return distMap;
786
+ }
787
+
788
+ /**
789
+ * Parse Gradle info logs to capture HTTP URLs of resolved dependency artifacts.
790
+ *
791
+ * @param {string} stdout Gradle stdout logs under --info
792
+ * @returns {Object} Map of filenames to their resolved distribution URLs
793
+ */
794
+ export function parseGradleInfoLogsForUrls(stdout) {
795
+ const fileToUrlMap = {};
796
+ if (!stdout) {
797
+ return fileToUrlMap;
798
+ }
799
+ // Pattern 1: Resource found. [HTTP GET: https://...]
800
+ const getRegex =
801
+ /Resource found\. \[HTTP (?:GET|HEAD): (https?:\/\/[^\s]+?)\.jar\]/g;
802
+ let match;
803
+ while ((match = getRegex.exec(stdout)) !== null) {
804
+ const jarUrl = `${match[1]}.jar`;
805
+ const filename = jarUrl.substring(jarUrl.lastIndexOf("/") + 1);
806
+ fileToUrlMap[filename] = jarUrl;
807
+ }
808
+ // Pattern 2: Cached resource https://... is up-to-date
809
+ const cachedRegex =
810
+ /Cached resource (https?:\/\/[^\s]+?)\.pom is up-to-date/g;
811
+ while ((match = cachedRegex.exec(stdout)) !== null) {
812
+ const pomUrl = `${match[1]}.pom`;
813
+ const base = pomUrl.substring(0, pomUrl.lastIndexOf(".pom"));
814
+ const filename = `${base.substring(base.lastIndexOf("/") + 1)}.jar`;
815
+ const jarUrl = `${base}.jar`;
816
+ fileToUrlMap[filename] = jarUrl;
817
+ }
818
+ // Pattern 3: Cached resource https://...module is up-to-date
819
+ const cachedModuleRegex =
820
+ /Cached resource (https?:\/\/[^\s]+?)\.module is up-to-date/g;
821
+ while ((match = cachedModuleRegex.exec(stdout)) !== null) {
822
+ const moduleUrl = `${match[1]}.module`;
823
+ const base = moduleUrl.substring(0, moduleUrl.lastIndexOf(".module"));
824
+ const filename = `${base.substring(base.lastIndexOf("/") + 1)}.jar`;
825
+ const jarUrl = `${base}.jar`;
826
+ fileToUrlMap[filename] = jarUrl;
827
+ }
828
+ // Pattern 4: Found locally available resource with matching checksum: [https://...pom/jar/module, ...]
829
+ const foundRegex =
830
+ /Found locally available resource with matching checksum: \[(https?:\/\/[^\s]+?)\.(?:pom|jar|module)/g;
831
+ while ((match = foundRegex.exec(stdout)) !== null) {
832
+ const base = match[1];
833
+ const filename = `${base.substring(base.lastIndexOf("/") + 1)}.jar`;
834
+ const jarUrl = `${base}.jar`;
835
+ fileToUrlMap[filename] = jarUrl;
836
+ }
837
+ return fileToUrlMap;
838
+ }
839
+
840
+ /**
841
+ * Collect Gradle project dependencies by scanning the Gradle cache directory for JAR files
842
+ * and their associated POM files.
843
+ *
844
+ * Uses the `GRADLE_CACHE_DIR` or `GRADLE_USER_HOME` environment variables to locate the
845
+ * Gradle files-2.1 cache, then delegates to {@link collectJarNS} to extract namespace
846
+ * and purl information from those JARs.
847
+ *
848
+ * @param {string} _gradleCmd Gradle command (unused; reserved for future use)
849
+ * @param {string} _basePath Base project path (unused; reserved for future use)
850
+ * @param {boolean} _cleanup Whether to clean up temporary files (unused; reserved for future use)
851
+ * @param {boolean} _includeCacheDir Whether to include cache directory (unused; reserved for future use)
852
+ * @returns {Promise<Object>} JAR namespace mapping object returned by collectJarNS
853
+ */
854
+ export async function collectGradleDependencies(
855
+ _gradleCmd,
856
+ _basePath,
857
+ _cleanup = true, // eslint-disable-line no-unused-vars
858
+ _includeCacheDir = false, // eslint-disable-line no-unused-vars
859
+ ) {
860
+ // Construct gradle cache directory
861
+ let GRADLE_CACHE_DIR =
862
+ readEnvironmentVariable("GRADLE_CACHE_DIR") ||
863
+ join(homedir(), ".gradle", "caches", "modules-2", "files-2.1");
864
+ if (readEnvironmentVariable("GRADLE_USER_HOME")) {
865
+ GRADLE_CACHE_DIR = join(
866
+ readEnvironmentVariable("GRADLE_USER_HOME"),
867
+ "caches",
868
+ "modules-2",
869
+ "files-2.1",
870
+ );
871
+ }
872
+ if (DEBUG_MODE) {
873
+ console.log("Collecting jars from", GRADLE_CACHE_DIR);
874
+ console.log(
875
+ "To improve performance, ensure only the project dependencies are present in this cache location.",
876
+ );
877
+ }
878
+ const pomPathMap = {};
879
+ const pomFiles = getAllFiles(GRADLE_CACHE_DIR, "**/*.pom");
880
+ for (const apom of pomFiles) {
881
+ pomPathMap[basename(apom)] = apom;
882
+ }
883
+ return await collectJarNS(GRADLE_CACHE_DIR, pomPathMap);
884
+ }
885
+
886
+ /**
887
+ * Method to return the mill command to use.
888
+ *
889
+ * @param {string} srcPath Path to look for mill wrapper
890
+ */
891
+ export function getMillCommand(srcPath) {
892
+ let millCmd = `mill${platform() === "win32" ? ".bat" : ""}`;
893
+ if (safeExistsSync(join(srcPath, millCmd))) {
894
+ // Use local mill wrapper if available
895
+ // Enable execute permission
896
+ try {
897
+ chmodSync(join(srcPath, millCmd), 0o775);
898
+ } catch (_e) {
899
+ // continue regardless of error
900
+ }
901
+ millCmd = resolve(join(srcPath, millCmd));
902
+ }
903
+ return millCmd;
904
+ }
905
+
906
+ /**
907
+ * Method to return the maven command to use.
908
+ *
909
+ * @param {string} srcPath Path to look for maven wrapper
910
+ * @param {string} rootPath Root directory to look for maven wrapper
911
+ */
912
+ export function getMavenCommand(srcPath, rootPath) {
913
+ let mavenCmd = "mvn";
914
+ // Check if the wrapper script is both available and functional
915
+ let isWrapperReady = false;
916
+ let isWrapperFound = false;
917
+ let findMavenFile = "mvnw";
918
+ let mavenWrapperCmd = null;
919
+ if (platform() === "win32") {
920
+ findMavenFile = "mvnw.bat";
921
+ if (
922
+ !safeExistsSync(join(srcPath, findMavenFile)) &&
923
+ safeExistsSync(join(srcPath, "mvnw.cmd"))
924
+ ) {
925
+ findMavenFile = "mvnw.cmd";
926
+ }
927
+ }
928
+
929
+ if (safeExistsSync(join(srcPath, findMavenFile))) {
930
+ // Use local maven wrapper if available
931
+ // Enable execute permission
932
+ try {
933
+ chmodSync(join(srcPath, findMavenFile), 0o775);
934
+ } catch (_e) {
935
+ // continue regardless of error
936
+ }
937
+ mavenWrapperCmd = resolve(join(srcPath, findMavenFile));
938
+ isWrapperFound = true;
939
+ recordDecisionActivity(mavenWrapperCmd, {
940
+ metadata: {
941
+ decisionType: "path-resolution",
942
+ selectedSource: "project-wrapper-candidate",
943
+ tool: "maven",
944
+ },
945
+ reason: `Found Maven wrapper candidate ${mavenWrapperCmd}.`,
946
+ });
947
+ } else if (rootPath && safeExistsSync(join(rootPath, findMavenFile))) {
948
+ // Check if the root directory has a wrapper script
949
+ try {
950
+ chmodSync(join(rootPath, findMavenFile), 0o775);
951
+ } catch (_e) {
952
+ // continue regardless of error
953
+ }
954
+ mavenWrapperCmd = resolve(join(rootPath, findMavenFile));
955
+ isWrapperFound = true;
956
+ recordDecisionActivity(mavenWrapperCmd, {
957
+ metadata: {
958
+ decisionType: "path-resolution",
959
+ selectedSource: "root-wrapper-candidate",
960
+ tool: "maven",
961
+ },
962
+ reason: `Found root-level Maven wrapper candidate ${mavenWrapperCmd}.`,
963
+ });
964
+ }
965
+ if (isWrapperFound) {
966
+ if (DEBUG_MODE) {
967
+ console.log("Testing the wrapper script by invoking --version");
968
+ }
969
+ const result = safeSpawnSync(mavenWrapperCmd, ["--version"], {
970
+ cdxgenActivity: {
971
+ kind: "probe",
972
+ metadata: {
973
+ tool: "maven",
974
+ },
975
+ probeType: "wrapper-readiness",
976
+ },
977
+ cwd: rootPath,
978
+ shell: isWin,
979
+ });
980
+ if (!result.error && !result.status) {
981
+ isWrapperReady = true;
982
+ mavenCmd = mavenWrapperCmd;
983
+ recordDecisionActivity(mavenCmd, {
984
+ metadata: {
985
+ decisionType: "path-resolution",
986
+ selectedSource: "wrapper",
987
+ tool: "maven",
988
+ },
989
+ reason: `Selected Maven wrapper ${mavenCmd} after readiness probe.`,
990
+ });
991
+ } else {
992
+ if (DEBUG_MODE) {
993
+ console.log(
994
+ "Maven wrapper script test has failed. Will use the installed version of maven.",
995
+ );
996
+ }
997
+ recordDecisionActivity(mavenWrapperCmd, {
998
+ metadata: {
999
+ decisionType: "fallback",
1000
+ selectedSource: "PATH",
1001
+ skippedSource: "wrapper",
1002
+ tool: "maven",
1003
+ },
1004
+ reason: `Maven wrapper readiness probe failed for ${mavenWrapperCmd}; falling back to installed Maven.`,
1005
+ });
1006
+ }
1007
+ }
1008
+ if (!isWrapperFound || !isWrapperReady) {
1009
+ if (
1010
+ readEnvironmentVariable("MVN_CMD") ||
1011
+ readEnvironmentVariable("MAVEN_CMD")
1012
+ ) {
1013
+ mavenCmd =
1014
+ readEnvironmentVariable("MVN_CMD") ||
1015
+ readEnvironmentVariable("MAVEN_CMD");
1016
+ recordDecisionActivity(mavenCmd, {
1017
+ metadata: {
1018
+ decisionType: "path-resolution",
1019
+ selectedSource: readEnvironmentVariable("MVN_CMD")
1020
+ ? "MVN_CMD"
1021
+ : "MAVEN_CMD",
1022
+ tool: "maven",
1023
+ },
1024
+ reason: `Selected Maven command from environment (${mavenCmd}).`,
1025
+ });
1026
+ } else if (readEnvironmentVariable("MAVEN_HOME")) {
1027
+ mavenCmd = join(readEnvironmentVariable("MAVEN_HOME"), "bin", "mvn");
1028
+ recordDecisionActivity(mavenCmd, {
1029
+ metadata: {
1030
+ decisionType: "path-resolution",
1031
+ selectedSource: "MAVEN_HOME",
1032
+ tool: "maven",
1033
+ },
1034
+ reason: `Selected Maven command from MAVEN_HOME (${mavenCmd}).`,
1035
+ });
1036
+ } else {
1037
+ recordDecisionActivity(mavenCmd, {
1038
+ metadata: {
1039
+ decisionType: "path-resolution",
1040
+ selectedSource: "PATH",
1041
+ tool: "maven",
1042
+ },
1043
+ reason: "Falling back to Maven from PATH.",
1044
+ });
1045
+ }
1046
+ }
1047
+ return mavenCmd;
1048
+ }