@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,749 @@
1
+ import { URL } from "node:url";
2
+
3
+ import { build, Purl, TypedPurls } from "@cdxgen/cdx-purl";
4
+
5
+ import { DEBUG_MODE } from "../core/activity.js";
6
+
7
+ /**
8
+ * The set of purl types that carry validation rules in cdx-purl.
9
+ *
10
+ * cdx-purl's `build()` is permissive: it accepts *any* type string (even an
11
+ * unregistered one like `pkg:nix/...`) without throwing, because the "type"
12
+ * segment of a Package URL is not restricted by the spec. What distinguishes a
13
+ * *registered* type is that cdx-purl ships a rule table for it
14
+ * (`TYPE_RULES_SOURCE`, exposed as `TypedPurls`) — namespace requirements,
15
+ * permitted qualifiers, and so on. A purl built with an unregistered type
16
+ * round-trips but gets no type-specific normalization, and more importantly it
17
+ * identifies a package in a namespace no vulnerability database or advisory
18
+ * feed recognises.
19
+ *
20
+ * Ecosystems cdxgen supports that have no registered type (nix, zig, mojo, and
21
+ * gleam when it is not published via hex) must therefore emit `pkg:generic/...`
22
+ * with a `cdx:purl:proposedType` property instead of squatting a type. This set
23
+ * is the single source of truth for that decision, sourced directly from
24
+ * cdx-purl so it updates automatically when a type is registered upstream.
25
+ */
26
+ export const REGISTERED_PURL_TYPES = new Set(Object.keys(TypedPurls));
27
+
28
+ /**
29
+ * Report whether a purl type is registered in cdx-purl's rule table.
30
+ *
31
+ * @param {string} type Purl type (the segment after `pkg:`)
32
+ * @returns {boolean} `true` when the type carries validation rules upstream
33
+ */
34
+ export function purlTypeIsRegistered(type) {
35
+ return REGISTERED_PURL_TYPES.has(type);
36
+ }
37
+
38
+ /**
39
+ * Report whether a purl string uses a type that cdx-purl has registered rules
40
+ * for. Purls that fail to parse are treated as unregistered rather than
41
+ * throwing, because the caller is vetting untrusted output.
42
+ *
43
+ * @param {string} purlString Purl string to vet
44
+ * @returns {boolean} `true` when the purl's type is registered upstream
45
+ */
46
+ export function purlTypeIsRegisteredString(purlString) {
47
+ try {
48
+ const parsed = Purl.parse(purlString);
49
+ return purlTypeIsRegistered(parsed.type);
50
+ } catch {
51
+ return false;
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Encode a string for safe inclusion in a PackageURL, percent-encoding special characters
57
+ * while preserving already-encoded `%40` sequences and keeping `:` and `/` unencoded.
58
+ *
59
+ * @param {string} s String to encode
60
+ * @returns {string} Encoded string suitable for use in a PackageURL component
61
+ */
62
+ export function encodeForPurl(s) {
63
+ return s && !s.includes("%40")
64
+ ? encodeURIComponent(s).replace(/%3A/g, ":").replace(/%2F/g, "/")
65
+ : s;
66
+ }
67
+
68
+ /**
69
+ * Build a purl string, returning `null` instead of throwing when the parts do
70
+ * not form a valid purl.
71
+ *
72
+ * cdx-purl is strict: it rejects a maven purl without a groupId, a swift or
73
+ * golang purl without a namespace, a vscode-extension without a publisher, and
74
+ * so on. Those rejections are correct and must not be papered over — but they
75
+ * also must not crash a scan of an otherwise fine project. This helper is the
76
+ * one sanctioned place to turn a `PurlError` into an absent purl.
77
+ *
78
+ * Only `PurlError` is swallowed. Anything else (a `TypeError` from a bad call,
79
+ * for instance) is a defect in the caller and is rethrown.
80
+ *
81
+ * @param {object} parts Purl parts accepted by cdx-purl's `build()`
82
+ * @returns {string|null} Canonical purl string, or `null` if it is not valid
83
+ */
84
+ export function tryBuildPurl(parts) {
85
+ try {
86
+ return build(parts);
87
+ } catch (err) {
88
+ if (err?.code?.startsWith("E_")) {
89
+ if (DEBUG_MODE) {
90
+ console.log(`Unable to construct a purl from ${JSON.stringify(parts)}`);
91
+ }
92
+ return null;
93
+ }
94
+ throw err;
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Build a canonical npm purl from a package name and version.
100
+ *
101
+ * Prefer this over hand-assembling `pkg:npm/...` strings. Manual assembly has
102
+ * to re-implement percent-encoding and gets it wrong in ways cdx-purl then
103
+ * rejects: an unencoded `+` in a semver build-metadata version
104
+ * (`1.0.0+build.1`) throws `E_INVALID_CHARACTER`, and the scope separator has
105
+ * to survive encoding. `build()` handles both, so callers pass raw values.
106
+ *
107
+ * @param {string} pkgName Package name, optionally scoped (`@scope/name`)
108
+ * @param {string} [version] Package version, raw and unencoded
109
+ * @returns {string} Canonical npm purl string
110
+ */
111
+ export function npmPurl(pkgName, version) {
112
+ let namespace = null;
113
+ let name = pkgName;
114
+ if (pkgName?.startsWith("@")) {
115
+ const slash = pkgName.indexOf("/");
116
+ if (slash > -1) {
117
+ namespace = pkgName.slice(0, slash);
118
+ name = pkgName.slice(slash + 1);
119
+ }
120
+ }
121
+ return build({
122
+ type: "npm",
123
+ namespace,
124
+ name,
125
+ version: version || null,
126
+ });
127
+ }
128
+
129
+ /**
130
+ * Detect whether a version string is a concrete version or an MSBuild
131
+ * expression / NuGet range that names no single version.
132
+ *
133
+ * NuGet project files express versions in a small language of their own:
134
+ * `$(TargetFSharpCoreVersion)` is an MSBuild property that only a build
135
+ * evaluates, `1.0-*` is a floating range, and `[1.0,2.0)` is an interval.
136
+ * None of them is a version, so none can be encoded into a purl — the result
137
+ * would parse but identify no package.
138
+ *
139
+ * Callers resolve such a version from a manifest that pins one (paket.lock,
140
+ * packages.lock.json, project.assets.json, Directory.Packages.props). This
141
+ * function is the last-resort guard for when no manifest pins it: the purl is
142
+ * then emitted without a version rather than with a meaningless one.
143
+ *
144
+ * It encodes NuGet's syntax specifically, so it belongs to the NuGet helpers
145
+ * and not to purl construction in general — an ecosystem that allows brackets
146
+ * or commas in a legitimate version must not have it applied.
147
+ *
148
+ * @param {string} version Candidate version
149
+ * @returns {string|null} The version when concrete, or null to omit it
150
+ */
151
+ export function concreteVersion(version) {
152
+ if (!version || typeof version !== "string") {
153
+ return null;
154
+ }
155
+ const v = version.trim();
156
+ if (!v) {
157
+ return null;
158
+ }
159
+ // MSBuild property reference: $(VariableName)
160
+ if (v.includes("$(")) {
161
+ return null;
162
+ }
163
+ // Floating version range or wildcard: 1.0-*, *, 1.*
164
+ if (/[*]/.test(v)) {
165
+ return null;
166
+ }
167
+ // Bracketed range: [1.0,2.0), (1.0,)
168
+ if (/[[\](),]/.test(v)) {
169
+ return null;
170
+ }
171
+ return v;
172
+ }
173
+
174
+ /**
175
+ * Build a canonical NuGet purl from a package name and version.
176
+ *
177
+ * The version is expected to have been resolved from a manifest that pins one.
178
+ * An MSBuild expression or NuGet range that reaches here unresolved is dropped
179
+ * by {@link concreteVersion}, leaving a versionless purl that identifies the
180
+ * package rather than a version-shaped purl that identifies nothing.
181
+ *
182
+ * @param {string} name Package name
183
+ * @param {string} [version] Package version (may be non-concrete)
184
+ * @returns {string|null} Canonical purl, or null when the name is empty
185
+ */
186
+ export function nugetPurl(name, version) {
187
+ return tryBuildPurl({
188
+ type: "nuget",
189
+ name,
190
+ version: concreteVersion(version),
191
+ });
192
+ }
193
+
194
+ /**
195
+ * Build a canonical PyPI purl from a package name and version.
196
+ *
197
+ * PyPI normalises underscores to hyphens in the name component.
198
+ *
199
+ * @param {string} name Package name (underscores will be normalised)
200
+ * @param {string} [version] Package version
201
+ * @returns {string|null} Canonical purl, or null when invalid
202
+ */
203
+ export function pypiPurl(name, version) {
204
+ return tryBuildPurl({
205
+ type: "pypi",
206
+ name: (name || "").replaceAll("_", "-"),
207
+ version,
208
+ });
209
+ }
210
+
211
+ /**
212
+ * Identifier a dependency graph uses to reference a PyPI component.
213
+ *
214
+ * PyPI names are case-insensitive and treat `_` and `-` as equivalent, so
215
+ * cdx-purl folds both when it builds the purl. A reference assembled by hand
216
+ * from the raw name does not, and then names out of the same distribution
217
+ * disagree: a `zope_interface` requirement points at nothing while the
218
+ * component is `pkg:pypi/zope-interface`. Deriving the reference from the purl
219
+ * keeps the graph attached to the components.
220
+ *
221
+ * @param {string} name Package name
222
+ * @param {string} [version] Package version
223
+ * @returns {string} bom-ref for the component
224
+ */
225
+ export function pypiBomRef(name, version) {
226
+ const purl = pypiPurl(name, version);
227
+ if (purl) {
228
+ return decodeURIComponent(purl);
229
+ }
230
+ return `library:${name}:${version || ""}`;
231
+ }
232
+
233
+ /**
234
+ * Build a canonical Maven purl from group, name, and version.
235
+ *
236
+ * @param {string} group Group ID (required for Maven)
237
+ * @param {string} name Artifact ID
238
+ * @param {string} [version] Version
239
+ * @param {object} [qualifiers] Optional qualifiers (e.g. `{type: "jar"}`)
240
+ * @returns {string|null} Canonical purl, or null when invalid
241
+ */
242
+ export function mavenPurl(group, name, version, qualifiers) {
243
+ return tryBuildPurl({
244
+ type: "maven",
245
+ namespace: group,
246
+ name,
247
+ version,
248
+ qualifiers: qualifiers || undefined,
249
+ });
250
+ }
251
+
252
+ /**
253
+ * Build a purl for a Nix flake input using the registered `generic` type.
254
+ *
255
+ * `nix` is not a registered purl type in cdx-purl, so emitting `pkg:nix/...`
256
+ * would squat a namespace no vulnerability database recognises. Nix inputs are
257
+ * therefore identified as generic packages, disambiguated by a `vcs_url`
258
+ * qualifier built from the flake lock, and tagged with a
259
+ * `cdx:purl:proposedType=nix` property on the component so the intended type is
260
+ * recoverable. If `nix` is ever registered upstream, callers can switch over
261
+ * without touching the property scheme.
262
+ *
263
+ * Callers pass the already-encoded qualifier values they derived from the lock
264
+ * node; this helper only owns purl construction.
265
+ *
266
+ * @param {string} name Package name
267
+ * @param {string} [version] Package version (typically the short revision)
268
+ * @param {object} [qualifiers] Optional qualifiers such as `{ vcs_url }`
269
+ * @returns {string|null} Canonical purl, or null when invalid
270
+ */
271
+ export function nixGenericPurl(name, version, qualifiers) {
272
+ return tryBuildPurl({
273
+ type: "generic",
274
+ name,
275
+ version,
276
+ qualifiers: qualifiers || undefined,
277
+ });
278
+ }
279
+
280
+ /**
281
+ * Identifier for a Nix flake project, whose version is not pinned by the flake
282
+ * itself.
283
+ *
284
+ * A flake project is named after its directory. The bom-ref deliberately uses
285
+ * the `application:name:version` shape (matching `fallbackBomRef`) rather than a
286
+ * `pkg:` string, because `nix` is not a registered purl type and a bom-ref that
287
+ * looks like a purl but is not valid would mislead downstream tooling.
288
+ *
289
+ * @param {string} name Project name
290
+ * @returns {string} bom-ref for the component
291
+ */
292
+ export function nixBomRef(name) {
293
+ return `application:${name}:latest`;
294
+ }
295
+
296
+ /**
297
+ * Build a canonical generic purl from a name.
298
+ *
299
+ * @param {string} name Package name
300
+ * @returns {string|null} Canonical purl, or null when invalid
301
+ */
302
+ export function genericPurl(name) {
303
+ return tryBuildPurl({
304
+ type: "generic",
305
+ name,
306
+ });
307
+ }
308
+
309
+ /**
310
+ * Report whether a string is a valid purl according to cdx-purl.
311
+ *
312
+ * Use this before writing anything into a CycloneDX `purl` field that did not
313
+ * come from `build()` — notably when recovering a purl from a `bom-ref`, which
314
+ * is an opaque identifier and frequently is not a purl at all.
315
+ *
316
+ * @param {string} candidate String to test
317
+ * @returns {boolean} true when cdx-purl parses it
318
+ */
319
+ export function isValidPurl(candidate) {
320
+ if (!candidate || typeof candidate !== "string") {
321
+ return false;
322
+ }
323
+ try {
324
+ Purl.parse(candidate);
325
+ return true;
326
+ } catch {
327
+ return false;
328
+ }
329
+ }
330
+
331
+ /**
332
+ * Parse a purl string, returning `null` instead of throwing when it is invalid.
333
+ *
334
+ * The parse-side counterpart of {@link tryBuildPurl}, for callers that have
335
+ * already assembled a purl string. Only `PurlError` is swallowed.
336
+ *
337
+ * @param {string} purlString Candidate purl
338
+ * @returns {string|null} Canonical purl string, or `null` if it is not valid
339
+ */
340
+ export function tryParsePurl(purlString) {
341
+ try {
342
+ return Purl.parse(purlString).toString();
343
+ } catch (err) {
344
+ if (err?.code?.startsWith("E_")) {
345
+ return null;
346
+ }
347
+ throw err;
348
+ }
349
+ }
350
+
351
+ /**
352
+ * Build a `bom-ref` for a component that has no valid purl.
353
+ *
354
+ * `bom-ref` must be **unique within the document** — CycloneDX uses it as the
355
+ * key for the dependency graph, so two components sharing one silently merge
356
+ * their edges. The bare component name is therefore not usable: the syft go
357
+ * module graph contains eight versions of `go.opencensus.io`, none of which can
358
+ * carry a golang purl (cdx-purl requires a namespace), and naming them all
359
+ * `go.opencensus.io` collapsed eight distinct modules into one ref.
360
+ *
361
+ * The `type:group/name:version` shape matches the convention already used for
362
+ * root components (`application:swift-smoke:latest`) and for the dedupe key in
363
+ * `lib/stages/postgen/ruleEngine.js`.
364
+ *
365
+ * @param {object} component Component with `type`, `group`, `name`, `version`
366
+ * @returns {string} A document-unique, deterministic bom-ref
367
+ */
368
+ export function fallbackBomRef(component) {
369
+ const type = component?.type || "library";
370
+ const group = component?.group ? `${component.group}/` : "";
371
+ const name = component?.name || "unnamed";
372
+ const version = component?.version || "";
373
+ return `${type}:${group}${name}:${version}`;
374
+ }
375
+
376
+ /**
377
+ * Attach a purl and `bom-ref` to a component, never emitting an invalid purl.
378
+ *
379
+ * CycloneDX requires `component.purl` to be a valid Package URL when present,
380
+ * so a component we cannot build a purl for must omit the field entirely — it
381
+ * must *not* fall back to the bare name, which is what produced
382
+ * `"purl": "swift-smoke"` in the swift golden.
383
+ *
384
+ * `bom-ref` has no syntax constraint but does have a uniqueness constraint, so
385
+ * the fallback goes through {@link fallbackBomRef} rather than using the name.
386
+ *
387
+ * Any pre-existing `purl` is deleted when the new one is invalid, so a
388
+ * component cannot retain a stale purl from an earlier enrichment pass.
389
+ *
390
+ * @param {object} component Component to mutate
391
+ * @param {string|null} purlString Canonical purl string, or `null`/`undefined`
392
+ * @param {string} [fallbackRef] Explicit `bom-ref` override for when there is no purl
393
+ * @returns {object} The same component, for chaining
394
+ */
395
+ export function applyPurl(component, purlString, fallbackRef) {
396
+ if (purlString) {
397
+ component.purl = purlString;
398
+ component["bom-ref"] = decodeURIComponent(purlString);
399
+ } else {
400
+ delete component.purl;
401
+ component["bom-ref"] = fallbackRef ?? fallbackBomRef(component);
402
+ }
403
+ return component;
404
+ }
405
+
406
+ /**
407
+ * Sanitize a purl that cdxgen did not author.
408
+ *
409
+ * cdxgen ingests components from places it does not control — caxa binary
410
+ * metadata, existing SBOMs supplied as input, converter output. Those purls can
411
+ * be invalid (`@cdxgen/caxa` emitted `pkg:generic/...?arch=…&platform=…`, and
412
+ * `arch`/`platform` are not qualifiers the `generic` type allows), and cdxgen
413
+ * must neither emit an invalid purl it merely read nor hard-fail on third-party
414
+ * data.
415
+ *
416
+ * Order of preference:
417
+ * 1. Keep the purl when it is already valid.
418
+ * 2. Rebuild a canonical purl from the component's own type/group/name/version.
419
+ * 3. Drop the purl and assign a unique fallback `bom-ref`.
420
+ *
421
+ * The original string is preserved in a property whenever it is discarded, so the
422
+ * provenance of the change is visible in the output rather than silent.
423
+ *
424
+ * @param {object} component Component to sanitize in place
425
+ * @param {string} [purlType] purl type to use when rebuilding (default `generic`)
426
+ * @returns {object} The same component, for chaining
427
+ */
428
+ export function sanitizeIngestedPurl(component, purlType) {
429
+ if (!component || typeof component !== "object") {
430
+ return component;
431
+ }
432
+ const original = component.purl;
433
+ if (!original || typeof original !== "string") {
434
+ return component;
435
+ }
436
+ if (isValidPurl(original)) {
437
+ return component;
438
+ }
439
+ let rebuilt = null;
440
+ try {
441
+ const parsedType = original.startsWith("pkg:")
442
+ ? original.slice(4).split("/")[0].split("@")[0]
443
+ : null;
444
+ rebuilt = tryBuildPurl({
445
+ type: purlType || parsedType || "generic",
446
+ namespace: component.group || null,
447
+ name: component.name,
448
+ version: component.version || null,
449
+ });
450
+ } catch {
451
+ rebuilt = null;
452
+ }
453
+ component.properties = component.properties || [];
454
+ component.properties.push({
455
+ name: "cdx:purl:sanitized_from",
456
+ value: original,
457
+ });
458
+ return applyPurl(component, rebuilt);
459
+ }
460
+
461
+ /**
462
+ * Build an `oci` purl from a Docker/OCI repository digest.
463
+ *
464
+ * The `oci` type **prohibits** a namespace, so the registry-qualified repository
465
+ * cannot go in the purl path: `pkg:oci/docker.io/library/alpine@sha256:…` is
466
+ * invalid. Per the purl spec the name is the repository's last segment, the
467
+ * version is the digest, and the full repository travels in `repository_url`.
468
+ *
469
+ * @param {string} repoDigest e.g. `docker.io/library/alpine@sha256:abc…`
470
+ * @param {string} [tag] Optional image tag, emitted as the `tag` qualifier
471
+ * @returns {string|null} Canonical purl, or `null` when one cannot be built
472
+ */
473
+ export function ociPurl(repoDigest, tag) {
474
+ if (!repoDigest || typeof repoDigest !== "string") {
475
+ return null;
476
+ }
477
+ const atIndex = repoDigest.lastIndexOf("@");
478
+ const repository = atIndex > -1 ? repoDigest.slice(0, atIndex) : repoDigest;
479
+ const digest = atIndex > -1 ? repoDigest.slice(atIndex + 1) : null;
480
+ const segments = repository.split("/").filter(Boolean);
481
+ const name = segments[segments.length - 1];
482
+ if (!name) {
483
+ return null;
484
+ }
485
+ const qualifiers = {};
486
+ // Only worth recording when it carries more than the bare name.
487
+ if (segments.length > 1) {
488
+ qualifiers.repository_url = repository;
489
+ }
490
+ if (tag) {
491
+ qualifiers.tag = tag;
492
+ }
493
+ return tryBuildPurl({
494
+ type: "oci",
495
+ name: name.toLowerCase(),
496
+ version: digest,
497
+ qualifiers: Object.keys(qualifiers).length ? qualifiers : null,
498
+ });
499
+ }
500
+
501
+ /**
502
+ * Create a PackageURL object from a repository URL string, package type, and version.
503
+ *
504
+ * Supports HTTPS URLs, SSH `git@` URLs, Bitbucket SSH URLs, and local paths.
505
+ * Extracts the namespace (host + path prefix) and repository name from the URL.
506
+ *
507
+ * @param {string} type PackageURL type (e.g. `"swift"`, `"generic"`)
508
+ * @param {string} repoUrl Repository URL string
509
+ * @param {string} version Package version
510
+ * @returns {PackageURL|undefined} PackageURL object, or undefined for unsupported URL formats
511
+ */
512
+ export function purlFromUrlString(type, repoUrl, version) {
513
+ let namespace = "";
514
+ let name;
515
+ if (repoUrl?.startsWith("http")) {
516
+ const url = new URL(repoUrl);
517
+ const pathnameParts = url.pathname.split("/");
518
+ // Bug #4136 fix. Strip trailing slash
519
+ if (pathnameParts[pathnameParts.length - 1] === "") {
520
+ pathnameParts.pop();
521
+ }
522
+ const pathnameLastElement = pathnameParts.pop(); // pop() returns last element and removes it from pathnameParts
523
+ name = pathnameLastElement.replace(".git", "");
524
+ const urlpath = pathnameParts.join("/");
525
+ namespace = url.hostname + urlpath;
526
+ } else if (repoUrl?.startsWith("git@")) {
527
+ const parts = repoUrl.split(":");
528
+ const hostname = parts[0].split("@")[1];
529
+ const pathnameParts = parts[1].split("/");
530
+ const pathnameLastElement = pathnameParts.pop();
531
+ name = pathnameLastElement.replace(".git", "");
532
+ const urlpath = pathnameParts.join("/");
533
+ namespace = `${hostname}/${urlpath}`;
534
+ } else if (repoUrl?.startsWith("ssh://git@bitbucket")) {
535
+ repoUrl = repoUrl.replace("ssh://git@", "");
536
+ const parts = repoUrl.split(":");
537
+ const hostname = parts[0];
538
+ const pathnameParts = parts[1].split("/").slice(1);
539
+ const pathnameLastElement = pathnameParts.pop();
540
+ name = pathnameLastElement.replace(".git", "");
541
+ const urlpath = pathnameParts.join("/");
542
+ namespace = `${hostname}/${urlpath}`;
543
+ } else if (repoUrl?.startsWith("/")) {
544
+ const parts = repoUrl.split("/");
545
+ name = parts[parts.length - 1] || "unknown";
546
+ if (type === "swift") {
547
+ // cdx-purl requires a swift namespace with host/owner segments.
548
+ // Local paths have none, so return undefined and let the caller
549
+ // construct the component without a purl.
550
+ return undefined;
551
+ }
552
+ } else {
553
+ if (DEBUG_MODE) {
554
+ console.warn("unsupported repo url for swift type");
555
+ }
556
+ return undefined;
557
+ }
558
+
559
+ return new Purl({
560
+ type: type,
561
+ namespace: namespace || null,
562
+ name: name,
563
+ version: version || null,
564
+ });
565
+ }
566
+
567
+ /**
568
+ * NOT IMPLEMENTED YET.
569
+ * A future method to locate a generic package given some name and properties
570
+ *
571
+ * @param {object} apkg Package to locate
572
+ * @returns Located project with precise purl or the original unmodified input.
573
+ */
574
+ export function locateGenericPackage(apkg) {
575
+ return apkg;
576
+ }
577
+
578
+ function createConanPurlString(name, version, user, channel, rrev, prev) {
579
+ // https://github.com/package-url/purl-spec/blob/master/PURL-TYPES.rst#conan
580
+
581
+ const qualifiers = {};
582
+
583
+ if (user) qualifiers["user"] = user;
584
+ if (channel) qualifiers["channel"] = channel;
585
+ if (rrev) qualifiers["rrev"] = rrev;
586
+ if (prev) qualifiers["prev"] = prev;
587
+
588
+ return build({
589
+ type: "conan",
590
+ namespace: "" || null,
591
+ name: name,
592
+ version: version || null,
593
+ qualifiers: Object.keys(qualifiers).length ? qualifiers : null || null,
594
+ });
595
+ }
596
+
597
+ function untilFirst(separator, inputStr) {
598
+ // untilFirst("/", "a/b") -> ["/", "a", "b"]
599
+ // untilFirst("/", "abc") -> ["/", "abc", null]
600
+
601
+ if (!inputStr || inputStr.length === 0) {
602
+ return [null, null, null];
603
+ }
604
+
605
+ const separatorIndex = inputStr.search(separator);
606
+ if (separatorIndex === -1) {
607
+ return ["", inputStr, null];
608
+ }
609
+ return [
610
+ inputStr[separatorIndex],
611
+ inputStr.substring(0, separatorIndex),
612
+ inputStr.substring(separatorIndex + 1),
613
+ ];
614
+ }
615
+
616
+ /**
617
+ * Parse a Conan package reference into purl coordinates.
618
+ *
619
+ * Accepts references such as `name/version@user/channel#recipe_revision` and
620
+ * returns a `[purl, name, version]` tuple, or `[null, null, null]` when the
621
+ * reference cannot be parsed.
622
+ *
623
+ * @param {string} conanPkgRef Conan package reference
624
+ * @returns {(string|null)[]} Tuple of purl string, package name, and version
625
+ */
626
+ export function mapConanPkgRefToPurlStringAndNameAndVersion(conanPkgRef) {
627
+ // A full Conan package reference may be composed of the following segments:
628
+ // conanPkgRef = "name/version@user/channel#recipe_revision:package_id#package_revision"
629
+ // See also https://docs.conan.io/1/cheatsheet.html#package-terminology
630
+
631
+ // The components 'package_id' and 'package_revision' do not appear in any files processed by cdxgen.
632
+ // The components 'user' and 'channel' are not mandatory.
633
+ // 'name/version' is a valid Conan package reference, so is 'name/version@user/channel' or 'name/version@user/channel#recipe_revision'.
634
+ // pURL for Conan does not recognize 'package_id'.
635
+
636
+ const UNABLE_TO_PARSE_CONAN_PKG_REF = [null, null, null];
637
+
638
+ if (!conanPkgRef) {
639
+ if (DEBUG_MODE)
640
+ console.warn(
641
+ `Could not parse Conan package reference '${conanPkgRef}', input does not seem valid.`,
642
+ );
643
+
644
+ return UNABLE_TO_PARSE_CONAN_PKG_REF;
645
+ }
646
+
647
+ const separatorRegex = /[@#:\/]/;
648
+
649
+ const info = {
650
+ name: null,
651
+ version: null,
652
+ user: null,
653
+ channel: null,
654
+ recipe_revision: null,
655
+ package_id: null,
656
+ package_revision: null,
657
+ phase_history: [],
658
+ };
659
+
660
+ const transitions = {
661
+ ["name"]: {
662
+ "/": "version",
663
+ "#": "recipe_revision",
664
+ "": "end",
665
+ },
666
+ ["version"]: {
667
+ "@": "user",
668
+ "#": "recipe_revision",
669
+ "": "end",
670
+ },
671
+ ["user"]: {
672
+ "/": "channel",
673
+ },
674
+ ["channel"]: {
675
+ "#": "recipe_revision",
676
+ "": "end",
677
+ },
678
+ ["recipe_revision"]: {
679
+ ":": "package_id",
680
+ "": "end",
681
+ },
682
+ ["package_id"]: {
683
+ "#": "package_revision",
684
+ },
685
+ ["package_revision"]: {
686
+ "": "end",
687
+ },
688
+ };
689
+
690
+ let phase = "name";
691
+ let remainder = conanPkgRef;
692
+ let separator;
693
+ let item;
694
+
695
+ while (remainder) {
696
+ [separator, item, remainder] = untilFirst(separatorRegex, remainder);
697
+
698
+ if (!item) {
699
+ if (DEBUG_MODE)
700
+ console.warn(
701
+ `Could not parse Conan package reference '${conanPkgRef}', empty item in phase '${phase}', separator=${separator}, remainder=${remainder}, info=${JSON.stringify(info)}`,
702
+ );
703
+ return UNABLE_TO_PARSE_CONAN_PKG_REF;
704
+ }
705
+
706
+ info[phase] = item;
707
+ info.phase_history.push(phase);
708
+
709
+ if (!(phase in transitions)) {
710
+ if (DEBUG_MODE)
711
+ console.warn(
712
+ `Could not parse Conan package reference '${conanPkgRef}', no transition from '${phase}', separator=${separator}, item=${item}, remainder=${remainder}, info=${JSON.stringify(info)}`,
713
+ );
714
+ return UNABLE_TO_PARSE_CONAN_PKG_REF;
715
+ }
716
+
717
+ const possibleTransitions = transitions[phase];
718
+ if (!(separator in possibleTransitions)) {
719
+ if (DEBUG_MODE)
720
+ console.warn(
721
+ `Could not parse Conan package reference '${conanPkgRef}', transition '${separator}' not allowed from '${phase}', item=${item}, remainder=${remainder}, info=${JSON.stringify(info)}`,
722
+ );
723
+ return UNABLE_TO_PARSE_CONAN_PKG_REF;
724
+ }
725
+
726
+ phase = possibleTransitions[separator];
727
+ }
728
+
729
+ if (phase !== "end") {
730
+ if (DEBUG_MODE)
731
+ console.warn(
732
+ `Could not parse Conan package reference '${conanPkgRef}', end of input string reached unexpectedly in phase '${phase}', info=${JSON.stringify(info)}.`,
733
+ );
734
+ return UNABLE_TO_PARSE_CONAN_PKG_REF;
735
+ }
736
+
737
+ if (!info.version) info.version = "latest";
738
+
739
+ const purl = createConanPurlString(
740
+ info.name,
741
+ info.version,
742
+ info.user,
743
+ info.channel,
744
+ info.recipe_revision,
745
+ info.package_revision,
746
+ );
747
+
748
+ return [purl, info.name, info.version];
749
+ }