@cdxgen/cdxgen 0.0.1 → 13.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (722) hide show
  1. package/README.md +921 -87
  2. package/bin/audit.js +239 -0
  3. package/bin/cdxgen.js +2335 -0
  4. package/bin/convert.js +220 -0
  5. package/bin/evinse.js +353 -0
  6. package/bin/hbom.js +504 -0
  7. package/bin/repl.js +2224 -0
  8. package/bin/sign.js +195 -0
  9. package/bin/tracebom.js +303 -0
  10. package/bin/validate.js +268 -0
  11. package/bin/verify.js +189 -0
  12. package/data/README.md +307 -0
  13. package/data/bom-1.4.schema.json +1605 -0
  14. package/data/bom-1.5.schema.json +3660 -0
  15. package/data/bom-1.6.schema.json +5511 -0
  16. package/data/bom-1.7.schema.json +6700 -0
  17. package/data/cbomosdb-queries.json +68 -0
  18. package/data/component-tags.json +339 -0
  19. package/data/container-knowledge-index.json +125 -0
  20. package/data/cosdb-queries.json +17 -0
  21. package/data/crypto-oid.json +1998 -0
  22. package/data/cryptography-defs.json +3793 -0
  23. package/data/cryptography-defs.schema.json +576 -0
  24. package/data/cyclonedx-2.0-bundled.schema.json +7182 -0
  25. package/data/frameworks-list.json +219 -0
  26. package/data/glibc-stdlib.json +117 -0
  27. package/data/gtfobins-index.json +6296 -0
  28. package/data/helpers/init.gradle +71 -0
  29. package/data/jsf-0.82.schema.json +211 -0
  30. package/data/known-licenses.json +82 -0
  31. package/data/lic-mapping.json +338 -0
  32. package/data/license-aliases.json +6624 -0
  33. package/data/license-db.json +39059 -0
  34. package/data/license-deprecations.json +302 -0
  35. package/data/lolbas-index.json +150 -0
  36. package/data/predictive-audit-allowlist.json +11 -0
  37. package/data/pypi-pkg-aliases.json +1199 -0
  38. package/data/python-stdlib.json +308 -0
  39. package/data/queries-darwin.json +193 -0
  40. package/data/queries-win.json +257 -0
  41. package/data/queries.json +268 -0
  42. package/data/ruby-known-modules.json +281 -0
  43. package/data/rules/ai-agent-governance.yaml +323 -0
  44. package/data/rules/ai-bom.yaml +268 -0
  45. package/data/rules/ai-oversight.yaml +186 -0
  46. package/data/rules/ai-provenance.yaml +92 -0
  47. package/data/rules/asar-archives.yaml +150 -0
  48. package/data/rules/cbom-security.yaml +165 -0
  49. package/data/rules/chrome-extensions.yaml +248 -0
  50. package/data/rules/ci-permissions.yaml +802 -0
  51. package/data/rules/container-risk.yaml +353 -0
  52. package/data/rules/dependency-sources.yaml +236 -0
  53. package/data/rules/golem-go.yaml +229 -0
  54. package/data/rules/hbom-compliance.yaml +325 -0
  55. package/data/rules/hbom-performance.yaml +307 -0
  56. package/data/rules/hbom-security.yaml +248 -0
  57. package/data/rules/host-topology.yaml +165 -0
  58. package/data/rules/mcp-servers.yaml +388 -0
  59. package/data/rules/obom-runtime.yaml +1776 -0
  60. package/data/rules/package-integrity.yaml +364 -0
  61. package/data/rules/rootfs-hardening.yaml +179 -0
  62. package/data/rules/vscode-extensions.yaml +237 -0
  63. package/data/spdx-export.schema.json +6794 -0
  64. package/data/spdx-license-list.json +7449 -0
  65. package/data/spdx-licenses.json +759 -0
  66. package/data/spdx.schema.json +819 -0
  67. package/data/templates/README.md +3 -0
  68. package/data/templates/asvs-4.0.3.cdx.json +2943 -0
  69. package/data/templates/asvs-5.0.cdx.json +3046 -0
  70. package/data/templates/bsimm-v13.cdx.json +1008 -0
  71. package/data/templates/masvs-2.0.0.cdx.json +225 -0
  72. package/data/templates/nist-ssdf-1.1.cdx.json +828 -0
  73. package/data/templates/pcissc-secure-slc-1.1.cdx.json +1027 -0
  74. package/data/templates/scvs-1.0.0.cdx.json +813 -0
  75. package/data/templates/ssaf-DRAFT-2023-11.cdx.json +127 -0
  76. package/data/vendor-alias.json +41967 -0
  77. package/data/wrapdb-releases.json +4227 -0
  78. package/index.cjs +15 -0
  79. package/lib/audit/index.js +2800 -0
  80. package/lib/audit/progress.js +114 -0
  81. package/lib/audit/reporters.js +937 -0
  82. package/lib/audit/scoring.js +560 -0
  83. package/lib/audit/targets.js +798 -0
  84. package/lib/cli/bomAssembly.js +1882 -0
  85. package/lib/cli/cliOptions.js +543 -0
  86. package/lib/cli/index.js +2759 -0
  87. package/lib/cli/jsBom.js +2087 -0
  88. package/lib/cli/jvmBom.js +1858 -0
  89. package/lib/cli/managedBom.js +2083 -0
  90. package/lib/cli/nativeBom.js +2125 -0
  91. package/lib/core/activity.js +1087 -0
  92. package/lib/core/env.js +719 -0
  93. package/lib/core/fs.js +1058 -0
  94. package/lib/core/httpClient.js +730 -0
  95. package/lib/core/logger.js +280 -0
  96. package/lib/core/parallel.js +323 -0
  97. package/lib/core/paths.js +70 -0
  98. package/lib/core/projectConfig.js +122 -0
  99. package/lib/core/propertySanitizer.js +174 -0
  100. package/lib/core/spdx.js +5 -0
  101. package/lib/core/state.js +59 -0
  102. package/lib/core/text.js +207 -0
  103. package/lib/core/ui.js +920 -0
  104. package/lib/core/urls.js +84 -0
  105. package/lib/ecosystems/asarutils.js +1636 -0
  106. package/lib/ecosystems/bunutils.js +402 -0
  107. package/lib/ecosystems/caxa.js +77 -0
  108. package/lib/ecosystems/chromextutils.js +1174 -0
  109. package/lib/ecosystems/cmakeResolver.js +587 -0
  110. package/lib/ecosystems/cppEvidence.js +305 -0
  111. package/lib/ecosystems/denoutils.js +1094 -0
  112. package/lib/ecosystems/dotnetutils.js +132 -0
  113. package/lib/ecosystems/ecosystems.js +2772 -0
  114. package/lib/ecosystems/golem.js +1807 -0
  115. package/lib/ecosystems/gradleutils.js +1048 -0
  116. package/lib/ecosystems/jsEvidence.js +317 -0
  117. package/lib/ecosystems/npmutils.js +586 -0
  118. package/lib/ecosystems/parsers-bazel.js +875 -0
  119. package/lib/ecosystems/parsers-dotnet.js +1430 -0
  120. package/lib/ecosystems/parsers-gleam.js +302 -0
  121. package/lib/ecosystems/parsers-go.js +818 -0
  122. package/lib/ecosystems/parsers-js.js +4222 -0
  123. package/lib/ecosystems/parsers-jvm.js +948 -0
  124. package/lib/ecosystems/parsers-misc.js +3191 -0
  125. package/lib/ecosystems/parsers-python.js +2070 -0
  126. package/lib/ecosystems/parsers-rust.js +1294 -0
  127. package/lib/ecosystems/parsers-zig.js +861 -0
  128. package/lib/ecosystems/pep770.js +341 -0
  129. package/lib/ecosystems/pylockutils.js +427 -0
  130. package/lib/ecosystems/pythonutils.js +1281 -0
  131. package/lib/ecosystems/registryProvenance.js +1003 -0
  132. package/lib/ecosystems/remote/huggingface.js +1343 -0
  133. package/lib/ecosystems/rubyutils.js +1629 -0
  134. package/lib/ecosystems/rusi.js +820 -0
  135. package/lib/ecosystems/sbtutils.js +972 -0
  136. package/lib/ecosystems/tea.js +607 -0
  137. package/lib/ecosystems/utils.js +583 -0
  138. package/lib/ecosystems/zigResolver.js +410 -0
  139. package/lib/evinser/db.js +145 -0
  140. package/lib/evinser/evinser.js +2362 -0
  141. package/lib/evinser/scalasem.js +65 -0
  142. package/lib/evinser/swiftsem.js +767 -0
  143. package/lib/helpers/annotationFormatter.js +84 -0
  144. package/lib/helpers/bomSigner.js +312 -0
  145. package/lib/helpers/exportUtils.js +160 -0
  146. package/lib/helpers/remote/dependency-track.js +117 -0
  147. package/lib/helpers/versutils.js +202 -0
  148. package/lib/helpers/vsixutils.js +1069 -0
  149. package/lib/inventory/agentFormulationParser.js +322 -0
  150. package/lib/inventory/aiCollector.js +2140 -0
  151. package/lib/inventory/aiInventory.js +414 -0
  152. package/lib/inventory/aiModelVariants.js +121 -0
  153. package/lib/inventory/aiOversightCollector.js +661 -0
  154. package/lib/inventory/aiProvenanceCollector.js +822 -0
  155. package/lib/inventory/analyzer.js +6089 -0
  156. package/lib/inventory/analyzerScope.js +807 -0
  157. package/lib/inventory/astWorker.js +20 -0
  158. package/lib/inventory/atomUtils.js +1092 -0
  159. package/lib/inventory/auditCategories.js +192 -0
  160. package/lib/inventory/bomUtils.js +369 -0
  161. package/lib/inventory/cacheCommands.js +182 -0
  162. package/lib/inventory/cacheDir.js +104 -0
  163. package/lib/inventory/cbomutils.js +590 -0
  164. package/lib/inventory/cdxrs.js +434 -0
  165. package/lib/inventory/ciParsers/azurePipelines.js +295 -0
  166. package/lib/inventory/ciParsers/circleCi.js +286 -0
  167. package/lib/inventory/ciParsers/common.js +24 -0
  168. package/lib/inventory/ciParsers/githubActions.js +2434 -0
  169. package/lib/inventory/ciParsers/gitlabCi.js +213 -0
  170. package/lib/inventory/ciParsers/jenkins.js +180 -0
  171. package/lib/inventory/citations.js +234 -0
  172. package/lib/inventory/communityAiConfigParser.js +756 -0
  173. package/lib/inventory/containerRisk.js +204 -0
  174. package/lib/inventory/cryptoAlgorithmFamily.js +258 -0
  175. package/lib/inventory/deps.js +807 -0
  176. package/lib/inventory/depsUtils.js +588 -0
  177. package/lib/inventory/display.js +2128 -0
  178. package/lib/inventory/dosai.js +601 -0
  179. package/lib/inventory/dosaiParsers.js +154 -0
  180. package/lib/inventory/dynamic.js +145 -0
  181. package/lib/inventory/envcontext.js +1793 -0
  182. package/lib/inventory/evidenceUtils.js +774 -0
  183. package/lib/inventory/fetchBatch.js +779 -0
  184. package/lib/inventory/fetchRate.js +255 -0
  185. package/lib/inventory/forgeEnricher.js +300 -0
  186. package/lib/inventory/formulationParsers.js +422 -0
  187. package/lib/inventory/gtfobins.js +339 -0
  188. package/lib/inventory/hbom.js +719 -0
  189. package/lib/inventory/hbomAnalysis.js +310 -0
  190. package/lib/inventory/hbomLoader.js +35 -0
  191. package/lib/inventory/hostTopology.js +835 -0
  192. package/lib/inventory/inventoryStats.js +100 -0
  193. package/lib/inventory/jsonLike.js +121 -0
  194. package/lib/inventory/licenseEnhancer.js +918 -0
  195. package/lib/inventory/lolbas.js +285 -0
  196. package/lib/inventory/mcp.js +253 -0
  197. package/lib/inventory/mcpConfigParser.js +683 -0
  198. package/lib/inventory/mcpDiscovery.js +112 -0
  199. package/lib/inventory/mcpPinning.js +209 -0
  200. package/lib/inventory/osPackageResolver.js +493 -0
  201. package/lib/inventory/osinfo.js +383 -0
  202. package/lib/inventory/osqueryTransform.js +274 -0
  203. package/lib/inventory/plugins.js +466 -0
  204. package/lib/inventory/protobom.js +231 -0
  205. package/lib/inventory/protobomLoader.js +43 -0
  206. package/lib/inventory/provenanceUtils.js +224 -0
  207. package/lib/inventory/purl.js +749 -0
  208. package/lib/inventory/rustFormulationParser.js +339 -0
  209. package/lib/inventory/sbomDocument.js +340 -0
  210. package/lib/inventory/source.js +1488 -0
  211. package/lib/inventory/spdx.js +361 -0
  212. package/lib/inventory/spdxExpression.js +512 -0
  213. package/lib/inventory/spdxUtils.js +107 -0
  214. package/lib/inventory/table.js +267 -0
  215. package/lib/inventory/traceRunner.js +439 -0
  216. package/lib/inventory/unicodeScan.js +147 -0
  217. package/lib/managers/binary.js +3459 -0
  218. package/lib/managers/containerutils.js +125 -0
  219. package/lib/managers/docker.js +2145 -0
  220. package/lib/managers/dockerConnection.js +162 -0
  221. package/lib/managers/oci.js +704 -0
  222. package/lib/managers/piptree.js +267 -0
  223. package/lib/parsers/cmakeCache.js +199 -0
  224. package/lib/parsers/gguf.js +492 -0
  225. package/lib/parsers/gitAiNotes.js +233 -0
  226. package/lib/parsers/gitmodules.js +239 -0
  227. package/lib/parsers/htmlExtract.js +610 -0
  228. package/lib/parsers/huggingfaceManifest.js +551 -0
  229. package/lib/parsers/huggingfaceUtils.js +506 -0
  230. package/lib/parsers/iri.js +618 -0
  231. package/lib/parsers/npmrc.js +99 -0
  232. package/lib/parsers/ollama.js +101 -0
  233. package/lib/parsers/xml.js +841 -0
  234. package/lib/server/openapi.yaml +433 -0
  235. package/lib/server/server.js +616 -0
  236. package/lib/stages/postgen/annotator.js +977 -0
  237. package/lib/stages/postgen/auditBom.js +468 -0
  238. package/lib/stages/postgen/postgen.js +1239 -0
  239. package/lib/stages/postgen/ruleEngine.js +731 -0
  240. package/lib/stages/postgen/sortBom.js +195 -0
  241. package/lib/stages/postgen/spdxConverter.js +796 -0
  242. package/lib/stages/postgen/specVersionCompat.js +703 -0
  243. package/lib/stages/pregen/envAudit.js +388 -0
  244. package/lib/stages/pregen/pregen.js +637 -0
  245. package/lib/third-party/README.md +9 -0
  246. package/lib/third-party/arborist/CHANGELOG.md +1109 -0
  247. package/lib/third-party/arborist/LICENSE.md +20 -0
  248. package/lib/third-party/arborist/README.md +315 -0
  249. package/lib/third-party/arborist/lib/arborist/index.js +258 -0
  250. package/lib/third-party/arborist/lib/arborist/load-actual.js +605 -0
  251. package/lib/third-party/arborist/lib/arborist/load-virtual.js +300 -0
  252. package/lib/third-party/arborist/lib/bin-links.js +120 -0
  253. package/lib/third-party/arborist/lib/calc-dep-flags.js +130 -0
  254. package/lib/third-party/arborist/lib/case-insensitive-map.js +51 -0
  255. package/lib/third-party/arborist/lib/consistent-resolve.js +42 -0
  256. package/lib/third-party/arborist/lib/debug.js +50 -0
  257. package/lib/third-party/arborist/lib/dep-valid.js +190 -0
  258. package/lib/third-party/arborist/lib/edge.js +417 -0
  259. package/lib/third-party/arborist/lib/from-path.js +36 -0
  260. package/lib/third-party/arborist/lib/gather-dep-set.js +43 -0
  261. package/lib/third-party/arborist/lib/index.js +22 -0
  262. package/lib/third-party/arborist/lib/inventory.js +138 -0
  263. package/lib/third-party/arborist/lib/link.js +169 -0
  264. package/lib/third-party/arborist/lib/node.js +1673 -0
  265. package/lib/third-party/arborist/lib/npm-extension.js +45 -0
  266. package/lib/third-party/arborist/lib/override-resolves.js +11 -0
  267. package/lib/third-party/arborist/lib/override-set.js +319 -0
  268. package/lib/third-party/arborist/lib/package-extensions.js +289 -0
  269. package/lib/third-party/arborist/lib/printable.js +210 -0
  270. package/lib/third-party/arborist/lib/proc-log.js +30 -0
  271. package/lib/third-party/arborist/lib/realpath.js +100 -0
  272. package/lib/third-party/arborist/lib/relpath.js +4 -0
  273. package/lib/third-party/arborist/lib/shrinkwrap.js +1291 -0
  274. package/lib/third-party/arborist/lib/spec-from-lock.js +34 -0
  275. package/lib/third-party/arborist/lib/tree-check.js +165 -0
  276. package/lib/third-party/arborist/lib/validate-npm-package-name.js +107 -0
  277. package/lib/third-party/arborist/lib/version-from-tgz.js +51 -0
  278. package/lib/third-party/arborist/lib/yarn-lock.js +397 -0
  279. package/lib/validator/bomValidator.js +985 -0
  280. package/lib/validator/complianceEngine.js +241 -0
  281. package/lib/validator/complianceRules.js +1680 -0
  282. package/lib/validator/generated/runtime.mjs +17 -0
  283. package/lib/validator/generated/validate-1.6.mjs +21258 -0
  284. package/lib/validator/generated/validate-1.7.mjs +24803 -0
  285. package/lib/validator/generated/validate-2.0.mjs +22931 -0
  286. package/lib/validator/index.js +246 -0
  287. package/lib/validator/reporters/annotations.js +142 -0
  288. package/lib/validator/reporters/console.js +160 -0
  289. package/lib/validator/reporters/index.js +41 -0
  290. package/lib/validator/reporters/json.js +37 -0
  291. package/lib/validator/reporters/sarif.js +184 -0
  292. package/package.json +209 -26
  293. package/types/bin/audit.d.ts +3 -0
  294. package/types/bin/audit.d.ts.map +1 -0
  295. package/types/bin/cdxgen.d.ts +3 -0
  296. package/types/bin/cdxgen.d.ts.map +1 -0
  297. package/types/bin/convert.d.ts +3 -0
  298. package/types/bin/convert.d.ts.map +1 -0
  299. package/types/bin/evinse.d.ts +3 -0
  300. package/types/bin/evinse.d.ts.map +1 -0
  301. package/types/bin/hbom.d.ts +3 -0
  302. package/types/bin/hbom.d.ts.map +1 -0
  303. package/types/bin/repl.d.ts +3 -0
  304. package/types/bin/repl.d.ts.map +1 -0
  305. package/types/bin/sign.d.ts +3 -0
  306. package/types/bin/sign.d.ts.map +1 -0
  307. package/types/bin/tracebom.d.ts +3 -0
  308. package/types/bin/tracebom.d.ts.map +1 -0
  309. package/types/bin/validate.d.ts +14 -0
  310. package/types/bin/validate.d.ts.map +1 -0
  311. package/types/bin/verify.d.ts +3 -0
  312. package/types/bin/verify.d.ts.map +1 -0
  313. package/types/lib/audit/index.d.ts +153 -0
  314. package/types/lib/audit/index.d.ts.map +1 -0
  315. package/types/lib/audit/progress.d.ts +31 -0
  316. package/types/lib/audit/progress.d.ts.map +1 -0
  317. package/types/lib/audit/reporters.d.ts +62 -0
  318. package/types/lib/audit/reporters.d.ts.map +1 -0
  319. package/types/lib/audit/scoring.d.ts +36 -0
  320. package/types/lib/audit/scoring.d.ts.map +1 -0
  321. package/types/lib/audit/targets.d.ts +77 -0
  322. package/types/lib/audit/targets.d.ts.map +1 -0
  323. package/types/lib/cli/bomAssembly.d.ts +329 -0
  324. package/types/lib/cli/bomAssembly.d.ts.map +1 -0
  325. package/types/lib/cli/cliOptions.d.ts +156 -0
  326. package/types/lib/cli/cliOptions.d.ts.map +1 -0
  327. package/types/lib/cli/index.d.ts +107 -0
  328. package/types/lib/cli/index.d.ts.map +1 -0
  329. package/types/lib/cli/jsBom.d.ts +94 -0
  330. package/types/lib/cli/jsBom.d.ts.map +1 -0
  331. package/types/lib/cli/jvmBom.d.ts +54 -0
  332. package/types/lib/cli/jvmBom.d.ts.map +1 -0
  333. package/types/lib/cli/managedBom.d.ts +105 -0
  334. package/types/lib/cli/managedBom.d.ts.map +1 -0
  335. package/types/lib/cli/nativeBom.d.ts +143 -0
  336. package/types/lib/cli/nativeBom.d.ts.map +1 -0
  337. package/types/lib/core/activity.d.ts +178 -0
  338. package/types/lib/core/activity.d.ts.map +1 -0
  339. package/types/lib/core/env.d.ts +192 -0
  340. package/types/lib/core/env.d.ts.map +1 -0
  341. package/types/lib/core/fs.d.ts +158 -0
  342. package/types/lib/core/fs.d.ts.map +1 -0
  343. package/types/lib/core/httpClient.d.ts +149 -0
  344. package/types/lib/core/httpClient.d.ts.map +1 -0
  345. package/types/lib/core/logger.d.ts +50 -0
  346. package/types/lib/core/logger.d.ts.map +1 -0
  347. package/types/lib/core/parallel.d.ts +95 -0
  348. package/types/lib/core/parallel.d.ts.map +1 -0
  349. package/types/lib/core/paths.d.ts +36 -0
  350. package/types/lib/core/paths.d.ts.map +1 -0
  351. package/types/lib/core/projectConfig.d.ts +23 -0
  352. package/types/lib/core/projectConfig.d.ts.map +1 -0
  353. package/types/lib/core/propertySanitizer.d.ts +23 -0
  354. package/types/lib/core/propertySanitizer.d.ts.map +1 -0
  355. package/types/lib/core/spdx.d.ts +5 -0
  356. package/types/lib/core/spdx.d.ts.map +1 -0
  357. package/types/lib/core/state.d.ts +20 -0
  358. package/types/lib/core/state.d.ts.map +1 -0
  359. package/types/lib/core/text.d.ts +78 -0
  360. package/types/lib/core/text.d.ts.map +1 -0
  361. package/types/lib/core/ui.d.ts +87 -0
  362. package/types/lib/core/ui.d.ts.map +1 -0
  363. package/types/lib/core/urls.d.ts +43 -0
  364. package/types/lib/core/urls.d.ts.map +1 -0
  365. package/types/lib/ecosystems/asarutils.d.ts +71 -0
  366. package/types/lib/ecosystems/asarutils.d.ts.map +1 -0
  367. package/types/lib/ecosystems/bunutils.d.ts +38 -0
  368. package/types/lib/ecosystems/bunutils.d.ts.map +1 -0
  369. package/types/lib/ecosystems/caxa.d.ts +8 -0
  370. package/types/lib/ecosystems/caxa.d.ts.map +1 -0
  371. package/types/lib/ecosystems/chromextutils.d.ts +97 -0
  372. package/types/lib/ecosystems/chromextutils.d.ts.map +1 -0
  373. package/types/lib/ecosystems/cmakeResolver.d.ts +176 -0
  374. package/types/lib/ecosystems/cmakeResolver.d.ts.map +1 -0
  375. package/types/lib/ecosystems/cppEvidence.d.ts +35 -0
  376. package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -0
  377. package/types/lib/ecosystems/denoutils.d.ts +76 -0
  378. package/types/lib/ecosystems/denoutils.d.ts.map +1 -0
  379. package/types/lib/ecosystems/dotnetutils.d.ts +45 -0
  380. package/types/lib/ecosystems/dotnetutils.d.ts.map +1 -0
  381. package/types/lib/ecosystems/ecosystems.d.ts +279 -0
  382. package/types/lib/ecosystems/ecosystems.d.ts.map +1 -0
  383. package/types/lib/ecosystems/golem.d.ts +60 -0
  384. package/types/lib/ecosystems/golem.d.ts.map +1 -0
  385. package/types/lib/ecosystems/gradleutils.d.ts +139 -0
  386. package/types/lib/ecosystems/gradleutils.d.ts.map +1 -0
  387. package/types/lib/ecosystems/jsEvidence.d.ts +17 -0
  388. package/types/lib/ecosystems/jsEvidence.d.ts.map +1 -0
  389. package/types/lib/ecosystems/npmutils.d.ts +183 -0
  390. package/types/lib/ecosystems/npmutils.d.ts.map +1 -0
  391. package/types/lib/ecosystems/parsers-bazel.d.ts +36 -0
  392. package/types/lib/ecosystems/parsers-bazel.d.ts.map +1 -0
  393. package/types/lib/ecosystems/parsers-dotnet.d.ts +116 -0
  394. package/types/lib/ecosystems/parsers-dotnet.d.ts.map +1 -0
  395. package/types/lib/ecosystems/parsers-gleam.d.ts +33 -0
  396. package/types/lib/ecosystems/parsers-gleam.d.ts.map +1 -0
  397. package/types/lib/ecosystems/parsers-go.d.ts +92 -0
  398. package/types/lib/ecosystems/parsers-go.d.ts.map +1 -0
  399. package/types/lib/ecosystems/parsers-js.d.ts +242 -0
  400. package/types/lib/ecosystems/parsers-js.d.ts.map +1 -0
  401. package/types/lib/ecosystems/parsers-jvm.d.ts +100 -0
  402. package/types/lib/ecosystems/parsers-jvm.d.ts.map +1 -0
  403. package/types/lib/ecosystems/parsers-misc.d.ts +450 -0
  404. package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -0
  405. package/types/lib/ecosystems/parsers-python.d.ts +145 -0
  406. package/types/lib/ecosystems/parsers-python.d.ts.map +1 -0
  407. package/types/lib/ecosystems/parsers-rust.d.ts +56 -0
  408. package/types/lib/ecosystems/parsers-rust.d.ts.map +1 -0
  409. package/types/lib/ecosystems/parsers-zig.d.ts +83 -0
  410. package/types/lib/ecosystems/parsers-zig.d.ts.map +1 -0
  411. package/types/lib/ecosystems/pep770.d.ts +38 -0
  412. package/types/lib/ecosystems/pep770.d.ts.map +1 -0
  413. package/types/lib/ecosystems/pylockutils.d.ts +68 -0
  414. package/types/lib/ecosystems/pylockutils.d.ts.map +1 -0
  415. package/types/lib/ecosystems/pythonutils.d.ts +70 -0
  416. package/types/lib/ecosystems/pythonutils.d.ts.map +1 -0
  417. package/types/lib/ecosystems/registryProvenance.d.ts +26 -0
  418. package/types/lib/ecosystems/registryProvenance.d.ts.map +1 -0
  419. package/types/lib/ecosystems/remote/huggingface.d.ts +31 -0
  420. package/types/lib/ecosystems/remote/huggingface.d.ts.map +1 -0
  421. package/types/lib/ecosystems/rubyutils.d.ts +182 -0
  422. package/types/lib/ecosystems/rubyutils.d.ts.map +1 -0
  423. package/types/lib/ecosystems/rusi.d.ts +40 -0
  424. package/types/lib/ecosystems/rusi.d.ts.map +1 -0
  425. package/types/lib/ecosystems/sbtutils.d.ts +179 -0
  426. package/types/lib/ecosystems/sbtutils.d.ts.map +1 -0
  427. package/types/lib/ecosystems/tea.d.ts +180 -0
  428. package/types/lib/ecosystems/tea.d.ts.map +1 -0
  429. package/types/lib/ecosystems/utils.d.ts +41 -0
  430. package/types/lib/ecosystems/utils.d.ts.map +1 -0
  431. package/types/lib/ecosystems/zigResolver.d.ts +70 -0
  432. package/types/lib/ecosystems/zigResolver.d.ts.map +1 -0
  433. package/types/lib/evinser/db.d.ts +17 -0
  434. package/types/lib/evinser/db.d.ts.map +1 -0
  435. package/types/lib/evinser/evinser.d.ts +354 -0
  436. package/types/lib/evinser/evinser.d.ts.map +1 -0
  437. package/types/lib/evinser/scalasem.d.ts +15 -0
  438. package/types/lib/evinser/scalasem.d.ts.map +1 -0
  439. package/types/lib/evinser/swiftsem.d.ts +103 -0
  440. package/types/lib/evinser/swiftsem.d.ts.map +1 -0
  441. package/types/lib/helpers/annotationFormatter.d.ts +23 -0
  442. package/types/lib/helpers/annotationFormatter.d.ts.map +1 -0
  443. package/types/lib/helpers/bomSigner.d.ts +28 -0
  444. package/types/lib/helpers/bomSigner.d.ts.map +1 -0
  445. package/types/lib/helpers/exportUtils.d.ts +52 -0
  446. package/types/lib/helpers/exportUtils.d.ts.map +1 -0
  447. package/types/lib/helpers/remote/dependency-track.d.ts +23 -0
  448. package/types/lib/helpers/remote/dependency-track.d.ts.map +1 -0
  449. package/types/lib/helpers/versutils.d.ts +8 -0
  450. package/types/lib/helpers/versutils.d.ts.map +1 -0
  451. package/types/lib/helpers/vsixutils.d.ts +130 -0
  452. package/types/lib/helpers/vsixutils.d.ts.map +1 -0
  453. package/types/lib/inventory/agentFormulationParser.d.ts +21 -0
  454. package/types/lib/inventory/agentFormulationParser.d.ts.map +1 -0
  455. package/types/lib/inventory/aiCollector.d.ts +61 -0
  456. package/types/lib/inventory/aiCollector.d.ts.map +1 -0
  457. package/types/lib/inventory/aiInventory.d.ts +103 -0
  458. package/types/lib/inventory/aiInventory.d.ts.map +1 -0
  459. package/types/lib/inventory/aiModelVariants.d.ts +31 -0
  460. package/types/lib/inventory/aiModelVariants.d.ts.map +1 -0
  461. package/types/lib/inventory/aiOversightCollector.d.ts +28 -0
  462. package/types/lib/inventory/aiOversightCollector.d.ts.map +1 -0
  463. package/types/lib/inventory/aiProvenanceCollector.d.ts +13 -0
  464. package/types/lib/inventory/aiProvenanceCollector.d.ts.map +1 -0
  465. package/types/lib/inventory/analyzer.d.ts +157 -0
  466. package/types/lib/inventory/analyzer.d.ts.map +1 -0
  467. package/types/lib/inventory/analyzerScope.d.ts +106 -0
  468. package/types/lib/inventory/analyzerScope.d.ts.map +1 -0
  469. package/types/lib/inventory/astWorker.d.ts +9 -0
  470. package/types/lib/inventory/astWorker.d.ts.map +1 -0
  471. package/types/lib/inventory/atomUtils.d.ts +159 -0
  472. package/types/lib/inventory/atomUtils.d.ts.map +1 -0
  473. package/types/lib/inventory/auditCategories.d.ts +80 -0
  474. package/types/lib/inventory/auditCategories.d.ts.map +1 -0
  475. package/types/lib/inventory/bomUtils.d.ts +145 -0
  476. package/types/lib/inventory/bomUtils.d.ts.map +1 -0
  477. package/types/lib/inventory/cacheCommands.d.ts +28 -0
  478. package/types/lib/inventory/cacheCommands.d.ts.map +1 -0
  479. package/types/lib/inventory/cacheDir.d.ts +55 -0
  480. package/types/lib/inventory/cacheDir.d.ts.map +1 -0
  481. package/types/lib/inventory/cbomutils.d.ts +37 -0
  482. package/types/lib/inventory/cbomutils.d.ts.map +1 -0
  483. package/types/lib/inventory/cdxrs.d.ts +90 -0
  484. package/types/lib/inventory/cdxrs.d.ts.map +1 -0
  485. package/types/lib/inventory/ciParsers/azurePipelines.d.ts +27 -0
  486. package/types/lib/inventory/ciParsers/azurePipelines.d.ts.map +1 -0
  487. package/types/lib/inventory/ciParsers/circleCi.d.ts +27 -0
  488. package/types/lib/inventory/ciParsers/circleCi.d.ts.map +1 -0
  489. package/types/lib/inventory/ciParsers/common.d.ts +11 -0
  490. package/types/lib/inventory/ciParsers/common.d.ts.map +1 -0
  491. package/types/lib/inventory/ciParsers/githubActions.d.ts +38 -0
  492. package/types/lib/inventory/ciParsers/githubActions.d.ts.map +1 -0
  493. package/types/lib/inventory/ciParsers/gitlabCi.d.ts +26 -0
  494. package/types/lib/inventory/ciParsers/gitlabCi.d.ts.map +1 -0
  495. package/types/lib/inventory/ciParsers/jenkins.d.ts +26 -0
  496. package/types/lib/inventory/ciParsers/jenkins.d.ts.map +1 -0
  497. package/types/lib/inventory/citations.d.ts +90 -0
  498. package/types/lib/inventory/citations.d.ts.map +1 -0
  499. package/types/lib/inventory/communityAiConfigParser.d.ts +14 -0
  500. package/types/lib/inventory/communityAiConfigParser.d.ts.map +1 -0
  501. package/types/lib/inventory/containerRisk.d.ts +20 -0
  502. package/types/lib/inventory/containerRisk.d.ts.map +1 -0
  503. package/types/lib/inventory/cryptoAlgorithmFamily.d.ts +37 -0
  504. package/types/lib/inventory/cryptoAlgorithmFamily.d.ts.map +1 -0
  505. package/types/lib/inventory/deps.d.ts +140 -0
  506. package/types/lib/inventory/deps.d.ts.map +1 -0
  507. package/types/lib/inventory/depsUtils.d.ts +74 -0
  508. package/types/lib/inventory/depsUtils.d.ts.map +1 -0
  509. package/types/lib/inventory/display.d.ts +227 -0
  510. package/types/lib/inventory/display.d.ts.map +1 -0
  511. package/types/lib/inventory/dosai.d.ts +130 -0
  512. package/types/lib/inventory/dosai.d.ts.map +1 -0
  513. package/types/lib/inventory/dosaiParsers.d.ts +59 -0
  514. package/types/lib/inventory/dosaiParsers.d.ts.map +1 -0
  515. package/types/lib/inventory/dynamic.d.ts +25 -0
  516. package/types/lib/inventory/dynamic.d.ts.map +1 -0
  517. package/types/lib/inventory/envcontext.d.ts +377 -0
  518. package/types/lib/inventory/envcontext.d.ts.map +1 -0
  519. package/types/lib/inventory/evidenceUtils.d.ts +74 -0
  520. package/types/lib/inventory/evidenceUtils.d.ts.map +1 -0
  521. package/types/lib/inventory/fetchBatch.d.ts +127 -0
  522. package/types/lib/inventory/fetchBatch.d.ts.map +1 -0
  523. package/types/lib/inventory/fetchRate.d.ts +118 -0
  524. package/types/lib/inventory/fetchRate.d.ts.map +1 -0
  525. package/types/lib/inventory/forgeEnricher.d.ts +31 -0
  526. package/types/lib/inventory/forgeEnricher.d.ts.map +1 -0
  527. package/types/lib/inventory/formulationParsers.d.ts +50 -0
  528. package/types/lib/inventory/formulationParsers.d.ts.map +1 -0
  529. package/types/lib/inventory/gtfobins.d.ts +27 -0
  530. package/types/lib/inventory/gtfobins.d.ts.map +1 -0
  531. package/types/lib/inventory/hbom.d.ts +58 -0
  532. package/types/lib/inventory/hbom.d.ts.map +1 -0
  533. package/types/lib/inventory/hbomAnalysis.d.ts +56 -0
  534. package/types/lib/inventory/hbomAnalysis.d.ts.map +1 -0
  535. package/types/lib/inventory/hbomLoader.d.ts +7 -0
  536. package/types/lib/inventory/hbomLoader.d.ts.map +1 -0
  537. package/types/lib/inventory/hostTopology.d.ts +47 -0
  538. package/types/lib/inventory/hostTopology.d.ts.map +1 -0
  539. package/types/lib/inventory/inventoryStats.d.ts +42 -0
  540. package/types/lib/inventory/inventoryStats.d.ts.map +1 -0
  541. package/types/lib/inventory/jsonLike.d.ts +23 -0
  542. package/types/lib/inventory/jsonLike.d.ts.map +1 -0
  543. package/types/lib/inventory/licenseEnhancer.d.ts +70 -0
  544. package/types/lib/inventory/licenseEnhancer.d.ts.map +1 -0
  545. package/types/lib/inventory/lolbas.d.ts +16 -0
  546. package/types/lib/inventory/lolbas.d.ts.map +1 -0
  547. package/types/lib/inventory/mcp.d.ts +29 -0
  548. package/types/lib/inventory/mcp.d.ts.map +1 -0
  549. package/types/lib/inventory/mcpConfigParser.d.ts +20 -0
  550. package/types/lib/inventory/mcpConfigParser.d.ts.map +1 -0
  551. package/types/lib/inventory/mcpDiscovery.d.ts +33 -0
  552. package/types/lib/inventory/mcpDiscovery.d.ts.map +1 -0
  553. package/types/lib/inventory/mcpPinning.d.ts +11 -0
  554. package/types/lib/inventory/mcpPinning.d.ts.map +1 -0
  555. package/types/lib/inventory/osPackageResolver.d.ts +49 -0
  556. package/types/lib/inventory/osPackageResolver.d.ts.map +1 -0
  557. package/types/lib/inventory/osinfo.d.ts +201 -0
  558. package/types/lib/inventory/osinfo.d.ts.map +1 -0
  559. package/types/lib/inventory/osqueryTransform.d.ts +84 -0
  560. package/types/lib/inventory/osqueryTransform.d.ts.map +1 -0
  561. package/types/lib/inventory/plugins.d.ts +58 -0
  562. package/types/lib/inventory/plugins.d.ts.map +1 -0
  563. package/types/lib/inventory/protobom.d.ts +71 -0
  564. package/types/lib/inventory/protobom.d.ts.map +1 -0
  565. package/types/lib/inventory/protobomLoader.d.ts +17 -0
  566. package/types/lib/inventory/protobomLoader.d.ts.map +1 -0
  567. package/types/lib/inventory/provenanceUtils.d.ts +98 -0
  568. package/types/lib/inventory/provenanceUtils.d.ts.map +1 -0
  569. package/types/lib/inventory/purl.d.ts +313 -0
  570. package/types/lib/inventory/purl.d.ts.map +1 -0
  571. package/types/lib/inventory/rustFormulationParser.d.ts +17 -0
  572. package/types/lib/inventory/rustFormulationParser.d.ts.map +1 -0
  573. package/types/lib/inventory/sbomDocument.d.ts +59 -0
  574. package/types/lib/inventory/sbomDocument.d.ts.map +1 -0
  575. package/types/lib/inventory/source.d.ts +163 -0
  576. package/types/lib/inventory/source.d.ts.map +1 -0
  577. package/types/lib/inventory/spdx.d.ts +66 -0
  578. package/types/lib/inventory/spdx.d.ts.map +1 -0
  579. package/types/lib/inventory/spdxExpression.d.ts +58 -0
  580. package/types/lib/inventory/spdxExpression.d.ts.map +1 -0
  581. package/types/lib/inventory/spdxUtils.d.ts +12 -0
  582. package/types/lib/inventory/spdxUtils.d.ts.map +1 -0
  583. package/types/lib/inventory/table.d.ts +22 -0
  584. package/types/lib/inventory/table.d.ts.map +1 -0
  585. package/types/lib/inventory/traceRunner.d.ts +80 -0
  586. package/types/lib/inventory/traceRunner.d.ts.map +1 -0
  587. package/types/lib/inventory/unicodeScan.d.ts +46 -0
  588. package/types/lib/inventory/unicodeScan.d.ts.map +1 -0
  589. package/types/lib/managers/binary.d.ts +147 -0
  590. package/types/lib/managers/binary.d.ts.map +1 -0
  591. package/types/lib/managers/containerutils.d.ts +30 -0
  592. package/types/lib/managers/containerutils.d.ts.map +1 -0
  593. package/types/lib/managers/docker.d.ts +157 -0
  594. package/types/lib/managers/docker.d.ts.map +1 -0
  595. package/types/lib/managers/dockerConnection.d.ts +42 -0
  596. package/types/lib/managers/dockerConnection.d.ts.map +1 -0
  597. package/types/lib/managers/oci.d.ts +21 -0
  598. package/types/lib/managers/oci.d.ts.map +1 -0
  599. package/types/lib/managers/piptree.d.ts +13 -0
  600. package/types/lib/managers/piptree.d.ts.map +1 -0
  601. package/types/lib/parsers/cmakeCache.d.ts +70 -0
  602. package/types/lib/parsers/cmakeCache.d.ts.map +1 -0
  603. package/types/lib/parsers/gguf.d.ts +39 -0
  604. package/types/lib/parsers/gguf.d.ts.map +1 -0
  605. package/types/lib/parsers/gitAiNotes.d.ts +15 -0
  606. package/types/lib/parsers/gitAiNotes.d.ts.map +1 -0
  607. package/types/lib/parsers/gitmodules.d.ts +88 -0
  608. package/types/lib/parsers/gitmodules.d.ts.map +1 -0
  609. package/types/lib/parsers/htmlExtract.d.ts +34 -0
  610. package/types/lib/parsers/htmlExtract.d.ts.map +1 -0
  611. package/types/lib/parsers/huggingfaceManifest.d.ts +153 -0
  612. package/types/lib/parsers/huggingfaceManifest.d.ts.map +1 -0
  613. package/types/lib/parsers/huggingfaceUtils.d.ts +155 -0
  614. package/types/lib/parsers/huggingfaceUtils.d.ts.map +1 -0
  615. package/types/lib/parsers/iri.d.ts +68 -0
  616. package/types/lib/parsers/iri.d.ts.map +1 -0
  617. package/types/lib/parsers/npmrc.d.ts +33 -0
  618. package/types/lib/parsers/npmrc.d.ts.map +1 -0
  619. package/types/lib/parsers/ollama.d.ts +22 -0
  620. package/types/lib/parsers/ollama.d.ts.map +1 -0
  621. package/types/lib/parsers/xml.d.ts +47 -0
  622. package/types/lib/parsers/xml.d.ts.map +1 -0
  623. package/types/lib/server/server.d.ts +51 -0
  624. package/types/lib/server/server.d.ts.map +1 -0
  625. package/types/lib/stages/postgen/annotator.d.ts +36 -0
  626. package/types/lib/stages/postgen/annotator.d.ts.map +1 -0
  627. package/types/lib/stages/postgen/auditBom.d.ts +92 -0
  628. package/types/lib/stages/postgen/auditBom.d.ts.map +1 -0
  629. package/types/lib/stages/postgen/postgen.d.ts +59 -0
  630. package/types/lib/stages/postgen/postgen.d.ts.map +1 -0
  631. package/types/lib/stages/postgen/ruleEngine.d.ts +18 -0
  632. package/types/lib/stages/postgen/ruleEngine.d.ts.map +1 -0
  633. package/types/lib/stages/postgen/sortBom.d.ts +34 -0
  634. package/types/lib/stages/postgen/sortBom.d.ts.map +1 -0
  635. package/types/lib/stages/postgen/spdxConverter.d.ts +11 -0
  636. package/types/lib/stages/postgen/spdxConverter.d.ts.map +1 -0
  637. package/types/lib/stages/postgen/specVersionCompat.d.ts +71 -0
  638. package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -0
  639. package/types/lib/stages/pregen/envAudit.d.ts +14 -0
  640. package/types/lib/stages/pregen/envAudit.d.ts.map +1 -0
  641. package/types/lib/stages/pregen/pregen.d.ts +59 -0
  642. package/types/lib/stages/pregen/pregen.d.ts.map +1 -0
  643. package/types/lib/third-party/arborist/lib/arborist/index.d.ts +47 -0
  644. package/types/lib/third-party/arborist/lib/arborist/index.d.ts.map +1 -0
  645. package/types/lib/third-party/arborist/lib/arborist/load-actual.d.ts +4 -0
  646. package/types/lib/third-party/arborist/lib/arborist/load-actual.d.ts.map +1 -0
  647. package/types/lib/third-party/arborist/lib/arborist/load-virtual.d.ts +4 -0
  648. package/types/lib/third-party/arborist/lib/arborist/load-virtual.d.ts.map +1 -0
  649. package/types/lib/third-party/arborist/lib/bin-links.d.ts +18 -0
  650. package/types/lib/third-party/arborist/lib/bin-links.d.ts.map +1 -0
  651. package/types/lib/third-party/arborist/lib/calc-dep-flags.d.ts +3 -0
  652. package/types/lib/third-party/arborist/lib/calc-dep-flags.d.ts.map +1 -0
  653. package/types/lib/third-party/arborist/lib/case-insensitive-map.d.ts +9 -0
  654. package/types/lib/third-party/arborist/lib/case-insensitive-map.d.ts.map +1 -0
  655. package/types/lib/third-party/arborist/lib/consistent-resolve.d.ts +3 -0
  656. package/types/lib/third-party/arborist/lib/consistent-resolve.d.ts.map +1 -0
  657. package/types/lib/third-party/arborist/lib/debug.d.ts +3 -0
  658. package/types/lib/third-party/arborist/lib/debug.d.ts.map +1 -0
  659. package/types/lib/third-party/arborist/lib/dep-valid.d.ts +3 -0
  660. package/types/lib/third-party/arborist/lib/dep-valid.d.ts.map +1 -0
  661. package/types/lib/third-party/arborist/lib/edge.d.ts +46 -0
  662. package/types/lib/third-party/arborist/lib/edge.d.ts.map +1 -0
  663. package/types/lib/third-party/arborist/lib/from-path.d.ts +3 -0
  664. package/types/lib/third-party/arborist/lib/from-path.d.ts.map +1 -0
  665. package/types/lib/third-party/arborist/lib/gather-dep-set.d.ts +3 -0
  666. package/types/lib/third-party/arborist/lib/gather-dep-set.d.ts.map +1 -0
  667. package/types/lib/third-party/arborist/lib/index.d.ts +3 -0
  668. package/types/lib/third-party/arborist/lib/index.d.ts.map +1 -0
  669. package/types/lib/third-party/arborist/lib/inventory.d.ts +14 -0
  670. package/types/lib/third-party/arborist/lib/inventory.d.ts.map +1 -0
  671. package/types/lib/third-party/arborist/lib/link.d.ts +18 -0
  672. package/types/lib/third-party/arborist/lib/link.d.ts.map +1 -0
  673. package/types/lib/third-party/arborist/lib/node.d.ts +112 -0
  674. package/types/lib/third-party/arborist/lib/node.d.ts.map +1 -0
  675. package/types/lib/third-party/arborist/lib/npm-extension.d.ts +18 -0
  676. package/types/lib/third-party/arborist/lib/npm-extension.d.ts.map +1 -0
  677. package/types/lib/third-party/arborist/lib/override-resolves.d.ts +3 -0
  678. package/types/lib/third-party/arborist/lib/override-resolves.d.ts.map +1 -0
  679. package/types/lib/third-party/arborist/lib/override-set.d.ts +27 -0
  680. package/types/lib/third-party/arborist/lib/override-set.d.ts.map +1 -0
  681. package/types/lib/third-party/arborist/lib/package-extensions.d.ts +36 -0
  682. package/types/lib/third-party/arborist/lib/package-extensions.d.ts.map +1 -0
  683. package/types/lib/third-party/arborist/lib/printable.d.ts +3 -0
  684. package/types/lib/third-party/arborist/lib/printable.d.ts.map +1 -0
  685. package/types/lib/third-party/arborist/lib/proc-log.d.ts +20 -0
  686. package/types/lib/third-party/arborist/lib/proc-log.d.ts.map +1 -0
  687. package/types/lib/third-party/arborist/lib/realpath.d.ts +3 -0
  688. package/types/lib/third-party/arborist/lib/realpath.d.ts.map +1 -0
  689. package/types/lib/third-party/arborist/lib/relpath.d.ts +3 -0
  690. package/types/lib/third-party/arborist/lib/relpath.d.ts.map +1 -0
  691. package/types/lib/third-party/arborist/lib/shrinkwrap.d.ts +54 -0
  692. package/types/lib/third-party/arborist/lib/shrinkwrap.d.ts.map +1 -0
  693. package/types/lib/third-party/arborist/lib/spec-from-lock.d.ts +3 -0
  694. package/types/lib/third-party/arborist/lib/spec-from-lock.d.ts.map +1 -0
  695. package/types/lib/third-party/arborist/lib/tree-check.d.ts +3 -0
  696. package/types/lib/third-party/arborist/lib/tree-check.d.ts.map +1 -0
  697. package/types/lib/third-party/arborist/lib/validate-npm-package-name.d.ts +13 -0
  698. package/types/lib/third-party/arborist/lib/validate-npm-package-name.d.ts.map +1 -0
  699. package/types/lib/third-party/arborist/lib/version-from-tgz.d.ts +6 -0
  700. package/types/lib/third-party/arborist/lib/version-from-tgz.d.ts.map +1 -0
  701. package/types/lib/third-party/arborist/lib/yarn-lock.d.ts +35 -0
  702. package/types/lib/third-party/arborist/lib/yarn-lock.d.ts.map +1 -0
  703. package/types/lib/validator/bomValidator.d.ts +40 -0
  704. package/types/lib/validator/bomValidator.d.ts.map +1 -0
  705. package/types/lib/validator/complianceEngine.d.ts +72 -0
  706. package/types/lib/validator/complianceEngine.d.ts.map +1 -0
  707. package/types/lib/validator/complianceRules.d.ts +61 -0
  708. package/types/lib/validator/complianceRules.d.ts.map +1 -0
  709. package/types/lib/validator/index.d.ts +101 -0
  710. package/types/lib/validator/index.d.ts.map +1 -0
  711. package/types/lib/validator/reporters/annotations.d.ts +37 -0
  712. package/types/lib/validator/reporters/annotations.d.ts.map +1 -0
  713. package/types/lib/validator/reporters/console.d.ts +34 -0
  714. package/types/lib/validator/reporters/console.d.ts.map +1 -0
  715. package/types/lib/validator/reporters/index.d.ts +30 -0
  716. package/types/lib/validator/reporters/index.d.ts.map +1 -0
  717. package/types/lib/validator/reporters/json.d.ts +11 -0
  718. package/types/lib/validator/reporters/json.d.ts.map +1 -0
  719. package/types/lib/validator/reporters/sarif.d.ts +22 -0
  720. package/types/lib/validator/reporters/sarif.d.ts.map +1 -0
  721. package/mod.d.ts +0 -7
  722. package/mod.js +0 -22
@@ -0,0 +1,807 @@
1
+ import { lstatSync, readFileSync } from "node:fs";
2
+ import { homedir, tmpdir } from "node:os";
3
+ import {
4
+ delimiter as _delimiter,
5
+ sep as _sep,
6
+ basename,
7
+ dirname,
8
+ join,
9
+ } from "node:path";
10
+
11
+ import { build, Purl } from "@cdxgen/cdx-purl";
12
+ import StreamZip from "node-stream-zip";
13
+
14
+ import { DEBUG_MODE, readEnvironmentVariable } from "../core/activity.js";
15
+ import { parseMavenArgs } from "../core/env.js";
16
+ import {
17
+ getAllFiles,
18
+ multiChecksumFile,
19
+ safeExistsSync,
20
+ safeMkdtempSync,
21
+ safeRmSync,
22
+ safeSpawnSync,
23
+ } from "../core/fs.js";
24
+ import { isWin } from "../core/paths.js";
25
+ import { xml2js } from "../parsers/xml.js";
26
+ import { pypiBomRef } from "./purl.js";
27
+
28
+ const jarNSMapping_cache = {};
29
+
30
+ /**
31
+ * Collect maven dependencies
32
+ *
33
+ * @param {string} mavenCmd Maven command to use
34
+ * @param {string} basePath Path to the maven project
35
+ * @param {boolean} cleanup Remove temporary directories
36
+ * @param {boolean} includeCacheDir Include maven and gradle cache directories
37
+ */
38
+ export async function collectMvnDependencies(
39
+ mavenCmd,
40
+ basePath,
41
+ cleanup = true,
42
+ includeCacheDir = false,
43
+ ) {
44
+ let jarNSMapping = {};
45
+ const MAVEN_CACHE_DIR =
46
+ readEnvironmentVariable("MAVEN_CACHE_DIR") ||
47
+ join(homedir(), ".m2", "repository");
48
+ const tempDir = safeMkdtempSync(join(tmpdir(), "mvn-deps-"));
49
+ let copyArgs = [
50
+ "dependency:copy-dependencies",
51
+ `-DoutputDirectory=${tempDir}`,
52
+ "-U",
53
+ "-Dmdep.copyPom=true",
54
+ "-Dmdep.useRepositoryLayout=true",
55
+ "-Dmdep.includeScope=compile",
56
+ `-Dmdep.prependGroupId=${readEnvironmentVariable("MAVEN_PREPEND_GROUP") || "false"}`,
57
+ `-Dmdep.stripVersion=${readEnvironmentVariable("MAVEN_STRIP_VERSION") || "false"}`,
58
+ ];
59
+ if (readEnvironmentVariable("MVN_ARGS")) {
60
+ const addArgs = parseMavenArgs(readEnvironmentVariable("MVN_ARGS"));
61
+ copyArgs = copyArgs.concat(addArgs);
62
+ }
63
+ if (basePath && basePath !== MAVEN_CACHE_DIR) {
64
+ console.log(`Executing '${mavenCmd} in ${basePath}`);
65
+ const result = safeSpawnSync(mavenCmd, copyArgs, {
66
+ cwd: basePath,
67
+ shell: isWin,
68
+ });
69
+ if (result.status !== 0 || result.error) {
70
+ console.error(result.stderr, result.error);
71
+ console.log(
72
+ "You can try the following remediation tips to resolve this error:\n",
73
+ );
74
+ console.log(
75
+ "1. Check if the correct version of maven is installed and available in the PATH. Check if the environment variable MVN_ARGS needs to be set.",
76
+ );
77
+ console.log(
78
+ "2. Perform 'mvn compile package' before invoking this command. Fix any errors found during this invocation.",
79
+ );
80
+ console.log(
81
+ "3. Ensure the temporary directory is available and has sufficient disk space to copy all the artifacts.",
82
+ );
83
+ } else {
84
+ jarNSMapping = await collectJarNS(tempDir);
85
+ }
86
+ }
87
+ if (includeCacheDir || basePath === MAVEN_CACHE_DIR) {
88
+ // slow operation
89
+ jarNSMapping = await collectJarNS(MAVEN_CACHE_DIR);
90
+ }
91
+
92
+ // Clean up
93
+ if (cleanup && tempDir?.startsWith(tmpdir())) {
94
+ safeRmSync(tempDir, { recursive: true, force: true });
95
+ }
96
+ return jarNSMapping;
97
+ }
98
+
99
+ /**
100
+ * Method to collect class names from all jars in a directory
101
+ *
102
+ * @param {string} jarPath Path containing jars
103
+ * @param {object} pomPathMap Map containing jar to pom names. Required to successfully parse gradle cache.
104
+ *
105
+ * @return object containing jar name and class list
106
+ */
107
+ export async function collectJarNS(jarPath, pomPathMap = {}) {
108
+ const jarNSMapping = {};
109
+ const env = {
110
+ ...process.env,
111
+ };
112
+ // jar command usually would not be available in the PATH for windows
113
+ if (isWin && env.JAVA_HOME) {
114
+ env.PATH = `${env.PATH || env.Path}${_delimiter}${join(
115
+ env.JAVA_HOME,
116
+ "bin",
117
+ )}`;
118
+ }
119
+ // Parse jar files to get class names
120
+ const jarFiles = jarPath.endsWith(".jar")
121
+ ? [jarPath]
122
+ : getAllFiles(jarPath, "**/*.jar");
123
+ if (jarFiles?.length) {
124
+ for (const jf of jarFiles) {
125
+ let pomname =
126
+ pomPathMap[basename(jf).replace(".jar", ".pom")] ||
127
+ jf.replace(".jar", ".pom");
128
+ let pomData;
129
+ let purl;
130
+ // In some cases, the pom name might be slightly different to the jar name
131
+ if (!safeExistsSync(pomname)) {
132
+ let searchDir = dirname(jf);
133
+ // in case of gradle, there would be hash directory that is different for jar vs pom
134
+ // so we need to start search from a level up
135
+ if (searchDir.includes(join(".gradle", "caches"))) {
136
+ searchDir = join(searchDir, "..");
137
+ }
138
+ const pomSearch = getAllFiles(searchDir, "**/*.pom");
139
+ if (pomSearch && pomSearch.length === 1) {
140
+ pomname = pomSearch[0];
141
+ }
142
+ }
143
+ if (safeExistsSync(pomname)) {
144
+ // TODO: Replace with parsePom which contains pomPurl
145
+ pomData = parsePomXml(readFileSync(pomname, { encoding: "utf-8" }));
146
+ if (pomData) {
147
+ const purlObj = new Purl({
148
+ type: "maven",
149
+ namespace: pomData.groupId || "" || null,
150
+ name: pomData.artifactId,
151
+ version: pomData.version || null,
152
+ qualifiers: { type: "jar" } || null,
153
+ });
154
+ purl = purlObj.toString();
155
+ }
156
+ } else if (jf.includes(join(".m2", "repository"))) {
157
+ // Let's try our best to construct a purl for .m2 cache entries of the form
158
+ // .m2/repository/org/apache/logging/log4j/log4j-web/3.0.0-SNAPSHOT/log4j-web-3.0.0-SNAPSHOT.jar
159
+ const tmpA = jf.split(join(".m2", "repository", ""));
160
+ if (tmpA?.length) {
161
+ const tmpJarPath = tmpA[tmpA.length - 1];
162
+ // This would yield log4j-web-3.0.0-SNAPSHOT.jar
163
+ const jarFileName = basename(tmpJarPath).replace(".jar", "");
164
+ const tmpDirParts = dirname(tmpJarPath).split(_sep);
165
+ // Retrieve the version
166
+ let jarVersion = tmpDirParts.pop();
167
+ if (jarVersion === "plugins") {
168
+ jarVersion = tmpDirParts.pop();
169
+ if (jarVersion === "eclipse") {
170
+ jarVersion = tmpDirParts.pop();
171
+ }
172
+ }
173
+ // The result would form the group name
174
+ let jarGroupName = tmpDirParts.join(".").replace(/^\./, "");
175
+ let qualifierType = "jar";
176
+ // Support for p2 bundles and plugins
177
+ // See https://github.com/CycloneDX/cyclonedx-maven-plugin/issues/137
178
+ // See https://github.com/cdxgen/cdxgen/pull/510#issuecomment-1702551615
179
+ if (jarGroupName.startsWith("p2.osgi.bundle")) {
180
+ jarGroupName = "p2.osgi.bundle";
181
+ qualifierType = "osgi-bundle";
182
+ } else if (jarGroupName.startsWith("p2.eclipse.plugin")) {
183
+ jarGroupName = "p2.eclipse.plugin";
184
+ qualifierType = "eclipse-plugin";
185
+ } else if (jarGroupName.startsWith("p2.binary")) {
186
+ jarGroupName = "p2.binary";
187
+ qualifierType = "eclipse-executable";
188
+ } else if (jarGroupName.startsWith("p2.org.eclipse.update.feature")) {
189
+ jarGroupName = "p2.org.eclipse.update.feature";
190
+ qualifierType = "eclipse-feature";
191
+ }
192
+ const purlObj = new Purl({
193
+ type: "maven",
194
+ namespace: jarGroupName || null,
195
+ name: jarFileName.replace(`-${jarVersion}`, ""),
196
+ version: jarVersion || null,
197
+ qualifiers: { type: qualifierType } || null,
198
+ });
199
+ purl = purlObj.toString();
200
+ }
201
+ } else if (jf.includes(join(".gradle", "caches"))) {
202
+ // Let's try our best to construct a purl for gradle cache entries of the form
203
+ // .gradle/caches/modules-2/files-2.1/org.xmlresolver/xmlresolver/4.2.0/f4dbdaa83d636dcac91c9003ffa7fb173173fe8d/xmlresolver-4.2.0-data.jar
204
+ const tmpA = jf.split(join("files-2.1", ""));
205
+ if (tmpA?.length) {
206
+ const tmpJarPath = tmpA[tmpA.length - 1];
207
+ // This would yield xmlresolver-4.2.0-data.jar
208
+ const jarFileName = basename(tmpJarPath).replace(".jar", "");
209
+ const tmpDirParts = dirname(tmpJarPath).split(_sep);
210
+ // This would remove the hash from the end of the directory name
211
+ tmpDirParts.pop();
212
+ // Retrieve the version
213
+ const jarVersion = tmpDirParts.pop();
214
+ const pkgName = jarFileName.replace(`-${jarVersion}`, "");
215
+ // The result would form the group name
216
+ let jarGroupName = tmpDirParts.join(".").replace(/^\./, "");
217
+ if (jarGroupName.includes(pkgName)) {
218
+ jarGroupName = jarGroupName.replace(`.${pkgName}`, "");
219
+ }
220
+ const purlObj = new Purl({
221
+ type: "maven",
222
+ namespace: jarGroupName || null,
223
+ name: pkgName,
224
+ version: jarVersion || null,
225
+ qualifiers: { type: "jar" } || null,
226
+ });
227
+ purl = purlObj.toString();
228
+ }
229
+ }
230
+ // If we have a hit from the cache, use it.
231
+ if (purl && jarNSMapping_cache[purl]) {
232
+ jarNSMapping[purl] = jarNSMapping_cache[purl];
233
+ } else {
234
+ if (DEBUG_MODE) {
235
+ console.log(`Parsing ${jf}`);
236
+ }
237
+ const [nsList, hashValues] = await Promise.all([
238
+ getJarClasses(jf),
239
+ multiChecksumFile(["md5", "sha1", "sha256", "sha512"], jf).catch(
240
+ () => undefined,
241
+ ),
242
+ ]);
243
+ let hashes;
244
+ if (hashValues) {
245
+ hashes = [
246
+ { alg: "MD5", content: hashValues["md5"] },
247
+ { alg: "SHA-1", content: hashValues["sha1"] },
248
+ { alg: "SHA-256", content: hashValues["sha256"] },
249
+ { alg: "SHA-512", content: hashValues["sha512"] },
250
+ ];
251
+ }
252
+ jarNSMapping[purl || jf] = {
253
+ jarFile: jf,
254
+ pom: pomData,
255
+ namespaces: nsList,
256
+ hashes,
257
+ };
258
+ // Retain in the global cache to speed up future lookups
259
+ if (purl) {
260
+ jarNSMapping_cache[purl] = jarNSMapping[purl];
261
+ }
262
+ }
263
+ }
264
+ if (!jarNSMapping) {
265
+ console.log(`Unable to determine class names for the jars in ${jarPath}`);
266
+ }
267
+ } else {
268
+ console.log(
269
+ `${jarPath} did not contain any jars. Try building the project to improve the BOM precision.`,
270
+ );
271
+ }
272
+ return jarNSMapping;
273
+ }
274
+
275
+ /**
276
+ * Convert a JAR namespace mapping (produced by {@link collectJarNS}) into an array
277
+ * of CycloneDX package component objects.
278
+ *
279
+ * Each entry in the mapping is resolved to a component with name, group, version,
280
+ * purl, hashes, namespace properties, and source file evidence.
281
+ *
282
+ * @param {Object} jarNSMapping Map of purl string to `{ jarFile, pom, namespaces, hashes }`
283
+ * @returns {Promise<Object[]>} Array of component objects derived from the JAR mapping
284
+ */
285
+ export async function convertJarNSToPackages(jarNSMapping) {
286
+ const pkgList = [];
287
+ for (const purl of Object.keys(jarNSMapping)) {
288
+ let { jarFile, pom, namespaces, hashes } = jarNSMapping[purl];
289
+ if (!pom) {
290
+ pom = {};
291
+ }
292
+ let purlObj;
293
+ try {
294
+ purlObj = Purl.parse(purl);
295
+ } catch (_e) {
296
+ // ignore
297
+ purlObj = {};
298
+ }
299
+ const name = pom.artifactId || purlObj.name;
300
+ if (!name) {
301
+ console.warn(
302
+ `Unable to identify the metadata for ${purl}. This will be skipped.`,
303
+ );
304
+ continue;
305
+ }
306
+ const apackage = {
307
+ name,
308
+ group: pom.groupId || purlObj.namespace || "",
309
+ version: pom.version || purlObj.version,
310
+ description: (pom.description || "").trim(),
311
+ purl,
312
+ "bom-ref": decodeURIComponent(purl),
313
+ hashes,
314
+ evidence: {
315
+ identity: {
316
+ field: "purl",
317
+ confidence: 0.3,
318
+ methods: [
319
+ {
320
+ technique: "filename",
321
+ confidence: 0.3,
322
+ value: jarFile,
323
+ },
324
+ ],
325
+ },
326
+ },
327
+ properties: [
328
+ {
329
+ name: "internal:SrcFile",
330
+ value: jarFile,
331
+ },
332
+ {
333
+ name: "internal:Namespaces",
334
+ value: namespaces.join("\n"),
335
+ },
336
+ ],
337
+ };
338
+ if (pom.url) {
339
+ apackage["homepage"] = { url: pom.url };
340
+ }
341
+ if (pom.scm) {
342
+ apackage["repository"] = { url: pom.scm };
343
+ }
344
+ pkgList.push(apackage);
345
+ }
346
+ return pkgList;
347
+ }
348
+
349
+ /**
350
+ * Deprecated function to parse pom.xml. Use parsePom instead.
351
+ *
352
+ * @deprecated
353
+ * @param pomXmlData XML contents
354
+ * @returns {Object} Parent component data
355
+ */
356
+ export function parsePomXml(pomXmlData) {
357
+ if (!pomXmlData) {
358
+ return undefined;
359
+ }
360
+ const project = xml2js(pomXmlData, {
361
+ compact: true,
362
+ spaces: 4,
363
+ textKey: "_",
364
+ attributesKey: "$",
365
+ commentKey: "value",
366
+ }).project;
367
+ if (project) {
368
+ let version = project.version ? project.version._ : undefined;
369
+ if (!version && project.parent) {
370
+ version = project.parent.version._;
371
+ }
372
+ let groupId = project.groupId ? project.groupId._ : undefined;
373
+ if (!groupId && project.parent) {
374
+ groupId = project.parent.groupId._;
375
+ }
376
+ return {
377
+ artifactId: project.artifactId ? project.artifactId._ : "",
378
+ groupId,
379
+ version,
380
+ description: project.description ? project.description._ : "",
381
+ url: project.url ? project.url._ : "",
382
+ scm: project.scm?.url ? project.scm.url._ : "",
383
+ licenses: project.licenses?.license,
384
+ organization: project.organization,
385
+ };
386
+ }
387
+ return undefined;
388
+ }
389
+
390
+ /**
391
+ * Parse a JAR MANIFEST.MF file and return its key-value pairs as an object.
392
+ *
393
+ * @param {string} jarMetadata Raw text contents of a MANIFEST.MF file
394
+ * @returns {Object} Key-value pairs extracted from the manifest
395
+ */
396
+ export function parseJarManifest(jarMetadata) {
397
+ const metadata = {};
398
+ if (!jarMetadata) {
399
+ return metadata;
400
+ }
401
+ jarMetadata.split("\n").forEach((l) => {
402
+ l = l.replaceAll("\r", "");
403
+ if (l.includes(": ")) {
404
+ const tmpA = l.split(": ");
405
+ if (tmpA && tmpA.length === 2) {
406
+ metadata[tmpA[0]] = tmpA[1].replaceAll("\r", "");
407
+ }
408
+ }
409
+ });
410
+ return metadata;
411
+ }
412
+
413
+ /**
414
+ * Determine whether a manifest candidate looks like a namespace-qualified identifier.
415
+ *
416
+ * @param {string} candidate Manifest field value
417
+ * @returns {boolean} True when candidate appears namespace-qualified
418
+ */
419
+ function isQualifiedJarNamespace(candidate) {
420
+ return (
421
+ !!candidate &&
422
+ !candidate.includes(" ") &&
423
+ (candidate.includes(".") || candidate.includes("-"))
424
+ );
425
+ }
426
+
427
+ /**
428
+ * Select the most reliable group candidate from JAR manifest metadata.
429
+ *
430
+ * @param {Object} jarMetadata Parsed MANIFEST.MF key-value map
431
+ * @returns {string} Best group candidate, or empty string if none exists
432
+ */
433
+ export function inferJarGroupFromManifest(jarMetadata = {}) {
434
+ // Keep this ordered from most to least namespace-qualified manifest fields.
435
+ // Extension-Name is intentionally lower priority due to inconsistent usage.
436
+ const qualifiedCandidates = [
437
+ jarMetadata["Bundle-SymbolicName"],
438
+ jarMetadata["Automatic-Module-Name"],
439
+ jarMetadata["Implementation-Title"],
440
+ jarMetadata["Extension-Name"],
441
+ ];
442
+ for (const candidate of qualifiedCandidates) {
443
+ if (isQualifiedJarNamespace(candidate)) {
444
+ return candidate;
445
+ }
446
+ }
447
+ return (
448
+ jarMetadata["Implementation-Vendor-Id"] ||
449
+ jarMetadata["Bundle-Vendor"] ||
450
+ jarMetadata["Extension-Name"] ||
451
+ ""
452
+ );
453
+ }
454
+
455
+ /**
456
+ * Trim group suffix that duplicates the artifact name for compound artifact names.
457
+ *
458
+ * @param {string} group Group candidate
459
+ * @param {string} name Artifact name candidate
460
+ * @returns {string} Adjusted group
461
+ */
462
+ export function trimJarGroupSuffix(group, name) {
463
+ if (!group || !name || group.startsWith("javax")) {
464
+ return group;
465
+ }
466
+ // Only trim when the artifact name contains a separator (hyphen or dot).
467
+ if (!name.includes("-") && !name.includes(".")) {
468
+ return group;
469
+ }
470
+ const lowerName = name.toLowerCase();
471
+ const dottedName = lowerName.replace(/-/g, ".");
472
+ const dottedSuffix = `.${dottedName}`;
473
+ if (group.endsWith(dottedSuffix)) {
474
+ return group.slice(0, -dottedSuffix.length);
475
+ }
476
+ const lowerSuffix = `.${lowerName}`;
477
+ if (group.endsWith(lowerSuffix)) {
478
+ return group.slice(0, -lowerSuffix.length);
479
+ }
480
+ return group;
481
+ }
482
+
483
+ /**
484
+ * Parse a Maven pom.properties file and return its key-value pairs as an object.
485
+ *
486
+ * @param {string} pomProperties Raw text contents of a pom.properties file
487
+ * @returns {Object} Key-value pairs extracted from the properties file
488
+ */
489
+ export function parsePomProperties(pomProperties) {
490
+ const properties = {};
491
+ if (!pomProperties) {
492
+ return properties;
493
+ }
494
+ pomProperties.split("\n").forEach((l) => {
495
+ l = l.replaceAll("\r", "");
496
+ if (l.includes("=")) {
497
+ const separatorIndex = l.indexOf("=");
498
+ if (separatorIndex !== -1) {
499
+ properties[l.slice(0, separatorIndex)] = l.slice(separatorIndex + 1);
500
+ }
501
+ }
502
+ });
503
+ return properties;
504
+ }
505
+ /**
506
+ * Method to get pom properties from maven directory
507
+ *
508
+ * @param {string} mavenDir Path to maven directory
509
+ *
510
+ * @return array with pom properties
511
+ */
512
+ export function getPomPropertiesFromMavenDir(mavenDir) {
513
+ let pomProperties = {};
514
+ if (safeExistsSync(mavenDir) && lstatSync(mavenDir).isDirectory()) {
515
+ const pomPropertiesFiles = getAllFiles(mavenDir, "**/pom.properties");
516
+ if (pomPropertiesFiles?.length) {
517
+ const pomPropertiesString = readFileSync(pomPropertiesFiles[0], {
518
+ encoding: "utf-8",
519
+ });
520
+ pomProperties = parsePomProperties(pomPropertiesString);
521
+ }
522
+ }
523
+ return pomProperties;
524
+ }
525
+
526
+ /**
527
+ * Method to read a single file entry from a zip file
528
+ *
529
+ * @param {string} zipFile Zip file to read
530
+ * @param {string} filePattern File pattern
531
+ * @param {string} contentEncoding Encoding. Defaults to utf-8
532
+ *
533
+ * @returns {Promise<string|undefined>} File contents
534
+ */
535
+ export async function readZipEntry(
536
+ zipFile,
537
+ filePattern,
538
+ contentEncoding = "utf-8",
539
+ ) {
540
+ /** @type {string|undefined} */
541
+ let retData;
542
+ try {
543
+ const zip = new StreamZip.async({ file: zipFile });
544
+ const entriesCount = await zip.entriesCount;
545
+ if (!entriesCount) {
546
+ return undefined;
547
+ }
548
+ const entries = await zip.entries();
549
+ for (const entry of Object.values(entries)) {
550
+ if (entry.isDirectory) {
551
+ continue;
552
+ }
553
+ if (entry.name.endsWith(filePattern)) {
554
+ const fileData = await zip.entryData(entry.name);
555
+ let decoder;
556
+ try {
557
+ let enc = contentEncoding;
558
+ if (enc) {
559
+ const lower = enc.toLowerCase();
560
+ if (lower === "ucs2" || lower === "ucs-2") {
561
+ enc = "utf-16le";
562
+ }
563
+ }
564
+ decoder = new TextDecoder(enc);
565
+ } catch (_err) {
566
+ decoder = new TextDecoder("utf-8");
567
+ }
568
+ retData = decoder.decode(Buffer.from(fileData));
569
+ break;
570
+ }
571
+ }
572
+ await zip.close();
573
+ } catch (e) {
574
+ console.log(e);
575
+ }
576
+ return retData;
577
+ }
578
+
579
+ /**
580
+ * Read every zip entry whose name contains `pathFragment`. Unlike
581
+ * `readZipEntry`, which returns the first matching entry, this enumerates all
582
+ * matches — needed for PEP 770, where a distribution may carry several SBOM
583
+ * documents under `<dist>.dist-info/sboms/`, in a directory whose name is
584
+ * prefixed by the distribution stem and so is not known in advance.
585
+ *
586
+ * Entries larger than `maxEntryBytes` are skipped without being decompressed,
587
+ * because a wheel is untrusted input and its declared sizes are the only cheap
588
+ * defence against an archive that expands without bound.
589
+ *
590
+ * @param {string} zipFile Path to a zip archive (e.g. a wheel)
591
+ * @param {string} pathFragment Substring an entry name must contain
592
+ * @param {Object} [opts] Options
593
+ * @param {string} [opts.contentEncoding] Text encoding. Defaults to utf-8
594
+ * @param {number} [opts.maxEntryBytes] Per-entry uncompressed size bound
595
+ * @returns {Promise<Array<{name: string, data: string}>>} Matching entries
596
+ */
597
+ export async function readZipEntriesMatching(
598
+ zipFile,
599
+ pathFragment,
600
+ { contentEncoding = "utf-8", maxEntryBytes = 5 * 1024 * 1024 } = {},
601
+ ) {
602
+ const results = [];
603
+ let zip;
604
+ try {
605
+ zip = new StreamZip.async({ file: zipFile });
606
+ const entries = await zip.entries();
607
+ let decoder;
608
+ try {
609
+ const lower = String(contentEncoding).toLowerCase();
610
+ decoder = new TextDecoder(
611
+ lower === "ucs2" || lower === "ucs-2" ? "utf-16le" : contentEncoding,
612
+ );
613
+ } catch (_err) {
614
+ decoder = new TextDecoder("utf-8");
615
+ }
616
+ for (const entry of Object.values(entries)) {
617
+ if (entry.isDirectory) {
618
+ continue;
619
+ }
620
+ if (pathFragment && !entry.name.includes(pathFragment)) {
621
+ continue;
622
+ }
623
+ if (entry.size > maxEntryBytes) {
624
+ if (DEBUG_MODE) {
625
+ console.log(
626
+ `Skipping ${entry.name} in ${zipFile}: ${entry.size} bytes exceeds the ${maxEntryBytes} byte limit.`,
627
+ );
628
+ }
629
+ continue;
630
+ }
631
+ const fileData = await zip.entryData(entry.name);
632
+ results.push({
633
+ name: entry.name,
634
+ data: decoder.decode(Buffer.from(fileData)),
635
+ });
636
+ }
637
+ } catch (err) {
638
+ if (DEBUG_MODE) {
639
+ console.log(`Unable to read the entries of ${zipFile}`, err);
640
+ }
641
+ } finally {
642
+ await zip?.close();
643
+ }
644
+ return results;
645
+ }
646
+
647
+ /**
648
+ * Method to get the classes and relevant sources in a jar file
649
+ *
650
+ * @param {string} jarFile Jar file to read
651
+ *
652
+ * @returns List of classes and sources matching certain known patterns
653
+ */
654
+ export async function getJarClasses(jarFile) {
655
+ const retList = [];
656
+ try {
657
+ const zip = new StreamZip.async({ file: jarFile });
658
+ const entriesCount = await zip.entriesCount;
659
+ if (!entriesCount) {
660
+ return [];
661
+ }
662
+ const entries = await zip.entries();
663
+ for (const entry of Object.values(entries)) {
664
+ if (entry.isDirectory) {
665
+ continue;
666
+ }
667
+ if (
668
+ (entry.name.includes(".class") ||
669
+ entry.name.includes(".java") ||
670
+ entry.name.includes(".scala") ||
671
+ entry.name.includes(".groovy") ||
672
+ entry.name.includes(".kt")) &&
673
+ !entry.name.includes("-INF") &&
674
+ !entry.name.includes("module-info")
675
+ ) {
676
+ retList.push(
677
+ entry.name
678
+ .replaceAll("\r", "")
679
+ .replace(/\.(class|java|kt|scala|groovy)$/, "")
680
+ .replace(/\/$/, "")
681
+ .replace(/\//g, "."),
682
+ );
683
+ }
684
+ }
685
+ await zip.close();
686
+ } catch (e) {
687
+ // node-stream-zip seems to fail on deno with a RangeError.
688
+ // So we fallback to using jar -tf command
689
+ if (e.name === "RangeError") {
690
+ const jarResult = safeSpawnSync("jar", ["-tf", jarFile], {
691
+ shell: isWin,
692
+ });
693
+ if (
694
+ jarResult?.stderr?.includes(
695
+ "is not recognized as an internal or external command",
696
+ )
697
+ ) {
698
+ return retList;
699
+ }
700
+ const consolelines = (jarResult.stdout || "").split("\n");
701
+ return consolelines
702
+ .filter((l) => {
703
+ return (
704
+ (l.includes(".class") ||
705
+ l.includes(".java") ||
706
+ l.includes(".scala") ||
707
+ l.includes(".groovy") ||
708
+ l.includes(".kt")) &&
709
+ !l.includes("-INF") &&
710
+ !l.includes("module-info")
711
+ );
712
+ })
713
+ .map((e) => {
714
+ return e
715
+ .replaceAll("\r", "")
716
+ .replace(/\.(class|java|kt|scala|groovy)$/, "")
717
+ .replace(/\/$/, "")
718
+ .replace(/\//g, ".");
719
+ });
720
+ }
721
+ }
722
+ return retList;
723
+ }
724
+
725
+ /**
726
+ * Recursively flatten a Python package's transitive dependencies into the
727
+ * dependencies map and flat package list.
728
+ *
729
+ * @param {Object} dependenciesMap Map of bom-ref to the list of dependent bom-refs, mutated in place
730
+ * @param {Object[]} pkgList Flat list of package component objects, mutated in place
731
+ * @param {string} reqOrSetupFile Path to the requirements.txt or setup.py file used as evidence
732
+ * @param {Object} t Root package object with name, version, and nested dependencies
733
+ * @returns {void}
734
+ */
735
+ export function flattenDeps(dependenciesMap, pkgList, reqOrSetupFile, t) {
736
+ const tRef = pypiBomRef(t.name, t.version);
737
+ const dependsOn = [];
738
+ for (const d of t.dependencies) {
739
+ const pkgRef = pypiBomRef(d.name, d.version);
740
+ dependsOn.push(pkgRef);
741
+ if (!dependenciesMap[pkgRef]) {
742
+ dependenciesMap[pkgRef] = [];
743
+ }
744
+ const purlString = build({
745
+ type: "pypi",
746
+ namespace: "" || null,
747
+ name: d.name,
748
+ version: d.version || null,
749
+ });
750
+ const apkg = {
751
+ name: d.name,
752
+ version: d.version,
753
+ purl: purlString,
754
+ "bom-ref": decodeURIComponent(purlString),
755
+ };
756
+ if (reqOrSetupFile) {
757
+ apkg.properties = [
758
+ {
759
+ name: "internal:SrcFile",
760
+ value: reqOrSetupFile,
761
+ },
762
+ ];
763
+ apkg.evidence = {
764
+ identity: {
765
+ field: "purl",
766
+ confidence: 0.8,
767
+ methods: [
768
+ {
769
+ technique: "manifest-analysis",
770
+ confidence: 0.8,
771
+ value: reqOrSetupFile,
772
+ },
773
+ ],
774
+ },
775
+ };
776
+ }
777
+ pkgList.push(apkg);
778
+ // Recurse and flatten
779
+ if (d.dependencies && d.dependencies) {
780
+ flattenDeps(dependenciesMap, pkgList, reqOrSetupFile, d);
781
+ }
782
+ }
783
+ dependenciesMap[tRef] = (dependenciesMap[tRef] || [])
784
+ .concat(dependsOn)
785
+ .sort();
786
+ }
787
+
788
+ /**
789
+ * Comparator function for sorting CycloneDX component objects.
790
+ *
791
+ * Compares components by `bom-ref`, then `purl`, then `name`, using locale-aware
792
+ * string comparison on the first available key.
793
+ *
794
+ * @param {Object|string} a First component to compare
795
+ * @param {Object|string} b Second component to compare
796
+ * @returns {number} Negative, zero, or positive integer as required by Array.sort
797
+ */
798
+ export function componentSorter(a, b) {
799
+ if (a && b) {
800
+ for (const k of ["bom-ref", "purl", "name"]) {
801
+ if (a[k] && b[k]) {
802
+ return a[k].localeCompare(b[k]);
803
+ }
804
+ }
805
+ }
806
+ return a.localeCompare(b);
807
+ }