@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,142 @@
1
+ import { Console } from "node:console";
2
+ import fs from "node:fs";
3
+ import process from "node:process";
4
+
5
+ // Environment variables here are read with raw `process.env` rather than
6
+ // `readEnvironmentVariable`: that helper lives in activity.js, which imports
7
+ // this module, so routing these through it would form an import cycle.
8
+
9
+ // Stream contract: human-readable diagnostics default to stderr so stdout
10
+ // carries only the BOM payload. CDXGEN_LOG_STREAM=stdout restores the
11
+ // pre-v13 behaviour for callers that scraped cdxgen's stdout.
12
+ const logStream =
13
+ process.env.CDXGEN_LOG_STREAM === "stdout" ? process.stdout : process.stderr;
14
+
15
+ // Custom lightweight colors formatting helper replacing yoctocolors
16
+ const colors = {
17
+ cyanBright: (text) => `\x1b[96m${text}\x1b[39m`,
18
+ dim: (text) => `\x1b[2m${text}\x1b[22m`,
19
+ };
20
+
21
+ /** True when thought/reasoning logging is enabled (CDXGEN_THOUGHT_LOG, CDXGEN_THINK_MODE, or verbose debug mode). */
22
+ export const THINK_MODE =
23
+ process.env.CDXGEN_THOUGHT_LOG ||
24
+ ["true", "1"].includes(process.env.CDXGEN_THINK_MODE) ||
25
+ process.env.CDXGEN_DEBUG_MODE === "verbose";
26
+
27
+ const thinkOutput = process.env.CDXGEN_THOUGHT_LOG
28
+ ? fs.createWriteStream(process.env.CDXGEN_THOUGHT_LOG)
29
+ : logStream;
30
+ const thinkErrorOutput = process.env.CDXGEN_THOUGHT_LOG
31
+ ? fs.createWriteStream(process.env.CDXGEN_THOUGHT_LOG)
32
+ : process.stderr;
33
+ const thinkLogger = new Console({
34
+ stdout: thinkOutput,
35
+ stderr: thinkErrorOutput,
36
+ colorMode: process.env.CDXGEN_THOUGHT_LOG ? false : "auto",
37
+ });
38
+
39
+ /** True when structured command/HTTP trace logging is enabled (CDXGEN_TRACE_LOG, CDXGEN_TRACE_ID, CDXGEN_TRACE_MODE, or verbose debug mode). */
40
+ export const TRACE_MODE =
41
+ process.env.CDXGEN_TRACE_LOG ||
42
+ process.env.CDXGEN_TRACE_ID ||
43
+ ["true", "1"].includes(process.env.CDXGEN_TRACE_MODE) ||
44
+ process.env.CDXGEN_DEBUG_MODE === "verbose";
45
+
46
+ const traceOutput = process.env.CDXGEN_TRACE_LOG
47
+ ? fs.createWriteStream(process.env.CDXGEN_TRACE_LOG)
48
+ : logStream;
49
+ const traceErrorOutput = process.env.CDXGEN_TRACE_LOG
50
+ ? fs.createWriteStream(process.env.CDXGEN_TRACE_LOG)
51
+ : process.stderr;
52
+ const traceLogger = new Console({
53
+ stdout: traceOutput,
54
+ stderr: traceErrorOutput,
55
+ colorMode: process.env.CDXGEN_TRACE_LOG ? false : "auto",
56
+ });
57
+
58
+ if (THINK_MODE) {
59
+ thinkLogger.group(colorizeText("<think>"));
60
+ }
61
+ /**
62
+ * Logs a thought message to the think logger if THINK_MODE is enabled.
63
+ * Automatically appends a period to the message if it lacks terminal punctuation.
64
+ *
65
+ * @param {string} s The thought message to log
66
+ * @param {Object} [args] Optional additional arguments to log alongside the message
67
+ * @returns {void}
68
+ */
69
+ export function thoughtLog(s, args) {
70
+ if (!THINK_MODE) {
71
+ return;
72
+ }
73
+ if (!s?.endsWith(".") && !s?.endsWith("?") && !s?.endsWith("!")) {
74
+ s = `${s}.`;
75
+ }
76
+ s = s.replaceAll("'.'", "'<project dir>'");
77
+ if (args) {
78
+ thinkLogger.log(colorizeText(`${s}`), args);
79
+ } else {
80
+ thinkLogger.log(colorizeText(`${s}`));
81
+ }
82
+ }
83
+ /**
84
+ * Closes the think log group by emitting the closing `</think>` marker.
85
+ * Has no effect if THINK_MODE is not enabled.
86
+ *
87
+ * @returns {void}
88
+ */
89
+ export function thoughtEnd() {
90
+ if (THINK_MODE) {
91
+ thinkLogger.groupEnd();
92
+ thinkLogger.log(colorizeText("</think>"));
93
+ }
94
+ }
95
+
96
+ function colorizeText(s) {
97
+ // Only colorize for an interactive terminal stream; piped/CI/file output
98
+ // stays free of escape bytes so the diagnostic stream is grep-safe.
99
+ if (process.env.CDXGEN_THOUGHT_LOG || !logStream.isTTY) {
100
+ return s;
101
+ }
102
+ s = s.replace(/(\d+)/g, colors.cyanBright("$1"));
103
+ return colors.dim(s);
104
+ }
105
+
106
+ /**
107
+ * Log trace messages
108
+ *
109
+ * @param {String} traceType Trace type
110
+ * @param {Object} args Additional arguments
111
+ */
112
+ export function traceLog(traceType, args) {
113
+ if (!TRACE_MODE || !traceType || !args) {
114
+ return;
115
+ }
116
+ const traceId = process.env.CDXGEN_TRACE_ID;
117
+ const message = {};
118
+ if (traceId) {
119
+ message.traceId = traceId;
120
+ }
121
+ message["timestamp"] = new Date().toISOString();
122
+ if (traceType) {
123
+ message.type = traceType;
124
+ }
125
+ if (args) {
126
+ for (const k of [
127
+ "command",
128
+ "cwd",
129
+ "protocol",
130
+ "host",
131
+ "path",
132
+ "pathname",
133
+ ]) {
134
+ if (args[k]) {
135
+ message[k] = args[k];
136
+ }
137
+ }
138
+ }
139
+ if (Object.keys(message).length) {
140
+ traceLogger.log(JSON.stringify(message, null, null));
141
+ }
142
+ }
@@ -0,0 +1,323 @@
1
+ /**
2
+ * Bounded concurrency utilities for CPU-bound and I/O-bound parallel work.
3
+ *
4
+ * Two primitives live here:
5
+ *
6
+ * - {@link mapWithConcurrency} — a promise pool for async I/O work (file
7
+ * hashing, registry fetches). Tasks are async; results preserve input order.
8
+ *
9
+ * - {@link mapInWorkers} — a worker-thread pool for synchronous CPU work (AST
10
+ * parsing). Below a configurable threshold tasks run inline; above it they
11
+ * are distributed across `worker_threads` workers. Any failure of the thread
12
+ * machinery itself — an unavailable `worker_threads`, a worker entry that
13
+ * will not load, a worker that dies mid-task — falls back to running the
14
+ * remaining tasks inline, so the result is the same whether or not threads
15
+ * were usable.
16
+ */
17
+
18
+ import { availableParallelism } from "node:os";
19
+
20
+ import { readEnvironmentVariable } from "./activity.js";
21
+
22
+ const _isDeno = globalThis.Deno?.version?.deno !== undefined;
23
+ const _isBun = globalThis.Bun?.version !== undefined;
24
+
25
+ const DEFAULT_HASH_CONCURRENCY = Math.min(
26
+ Math.max(availableParallelism(), 4),
27
+ 16,
28
+ );
29
+
30
+ const WORKER_THRESHOLD = Number.parseInt(
31
+ readEnvironmentVariable("CDXGEN_WORKER_THRESHOLD") || "24",
32
+ 10,
33
+ );
34
+
35
+ const MAX_WORKERS = Number.parseInt(
36
+ readEnvironmentVariable("CDXGEN_MAX_WORKERS") ||
37
+ String(Math.min(availableParallelism() || 4, 8)),
38
+ 10,
39
+ );
40
+
41
+ /**
42
+ * Run an async mapper over an array with bounded concurrency.
43
+ *
44
+ * Results are placed at their original index so order is preserved regardless
45
+ * of completion order. Below the concurrency limit tasks start immediately;
46
+ * above it they queue in FIFO order.
47
+ *
48
+ * The bound is per call, so two pools running at once can together hold twice
49
+ * the limit open. Every caller today awaits its pool before the next phase
50
+ * begins, so the effective bound is the limit; a caller that starts a pool
51
+ * without awaiting it should pass a smaller `concurrency`.
52
+ *
53
+ * @template T, R
54
+ * @param {Array<T>} items
55
+ * @param {(item: T, index: number) => Promise<R>|R} mapper
56
+ * @param {number} [concurrency]
57
+ * @returns {Promise<Array<R>>}
58
+ */
59
+ export async function mapWithConcurrency(items, mapper, concurrency) {
60
+ const limit = Math.max(1, concurrency || DEFAULT_HASH_CONCURRENCY);
61
+ const results = new Array(items.length);
62
+ let nextIndex = 0;
63
+
64
+ async function runner() {
65
+ while (true) {
66
+ const i = nextIndex;
67
+ nextIndex++;
68
+ if (i >= items.length) return;
69
+ results[i] = await mapper(items[i], i);
70
+ }
71
+ }
72
+
73
+ const runners = [];
74
+ for (let i = 0; i < Math.min(limit, items.length); i++) {
75
+ runners.push(runner());
76
+ }
77
+ await Promise.all(runners);
78
+ return results;
79
+ }
80
+
81
+ /**
82
+ * Maximum number of worker threads the pool will create for a single call.
83
+ *
84
+ * @returns {number}
85
+ */
86
+ export function getMaxWorkers() {
87
+ return Math.max(1, MAX_WORKERS);
88
+ }
89
+
90
+ /**
91
+ * The task count at or above which {@link mapInWorkers} dispatches to threads
92
+ * instead of running inline.
93
+ *
94
+ * @returns {number}
95
+ */
96
+ export function getWorkerThreshold() {
97
+ return WORKER_THRESHOLD;
98
+ }
99
+
100
+ let _workerSupported = null;
101
+ let lastWorkerCount = 0;
102
+
103
+ /**
104
+ * Workers created by the most recent {@link mapInWorkers} call. Scoped to that
105
+ * one call rather than to the process, so a batch that ran inline reports 0
106
+ * rather than the widest earlier batch.
107
+ *
108
+ * @returns {number}
109
+ */
110
+ export function lastWorkerPoolSize() {
111
+ return lastWorkerCount;
112
+ }
113
+
114
+ async function checkWorkerSupport() {
115
+ if (_workerSupported !== null) return _workerSupported;
116
+ if (_isDeno || _isBun) {
117
+ _workerSupported = false;
118
+ return false;
119
+ }
120
+ try {
121
+ await import("node:worker_threads");
122
+ _workerSupported = true;
123
+ } catch {
124
+ _workerSupported = false;
125
+ }
126
+ return _workerSupported;
127
+ }
128
+
129
+ /**
130
+ * A task failed inside a worker, as opposed to the worker itself failing. The
131
+ * two are handled differently: the first belongs to one task, the second means
132
+ * threads cannot be used at all.
133
+ */
134
+ class TaskError extends Error {}
135
+
136
+ /**
137
+ * Apply `inlineFn` to the tasks at the given indices on the calling thread.
138
+ *
139
+ * @template T, R
140
+ * @param {Array<T>} tasks
141
+ * @param {(task: T) => R} inlineFn
142
+ * @param {Array<R|null>} results Filled in place at each index.
143
+ * @param {Iterable<number>} indices
144
+ * @param {boolean} swallowErrors
145
+ * @param {R|null} errorResult
146
+ */
147
+ function runInline(
148
+ tasks,
149
+ inlineFn,
150
+ results,
151
+ indices,
152
+ swallowErrors,
153
+ errorResult,
154
+ ) {
155
+ for (const i of indices) {
156
+ try {
157
+ results[i] = inlineFn(tasks[i]);
158
+ } catch (err) {
159
+ if (!swallowErrors) {
160
+ throw err;
161
+ }
162
+ results[i] = errorResult;
163
+ }
164
+ }
165
+ }
166
+
167
+ /**
168
+ * Run synchronous CPU-bound tasks across worker threads.
169
+ *
170
+ * Below the threshold (default 24), tasks run inline on the calling thread,
171
+ * because starting a worker costs more than a small batch saves. Above it,
172
+ * tasks are distributed to a pool of ephemeral workers that are terminated
173
+ * before the call returns, so a completed scan does not hold the event loop
174
+ * open.
175
+ *
176
+ * Results are always returned in the original task order.
177
+ *
178
+ * Two kinds of failure are distinguished. A task that fails inside the worker
179
+ * is reported by the worker as `{error}` and is treated as that one task
180
+ * failing: it yields `options.errorResult` when `options.swallowErrors` is set,
181
+ * and rejects otherwise. A failure of the thread machinery — `worker_threads`
182
+ * missing, the entry module refusing to load, a worker exiting mid-task — is
183
+ * not a property of any task, so the tasks that had not completed are run
184
+ * inline instead. That keeps the result independent of whether threads were
185
+ * usable, which matters because callers of this function treat an empty result
186
+ * as "nothing found" rather than as an error.
187
+ *
188
+ * @template T, R
189
+ * @param {URL|string} workerUrl - Resolved URL of the worker entry module
190
+ * @param {Array<T>} tasks - Structured-cloneable task descriptors
191
+ * @param {(task: T) => R} inlineFn - Called per task when running inline
192
+ * @param {Object} [options]
193
+ * @param {number} [options.threshold] - Minimum task count to use threads
194
+ * @param {number} [options.maxWorkers] - Cap on thread count
195
+ * @param {boolean} [options.swallowErrors] - Return errorResult instead of rejecting
196
+ * @param {R} [options.errorResult] - Value used when an error is swallowed
197
+ * @returns {Promise<Array<R|null>>}
198
+ */
199
+ export async function mapInWorkers(workerUrl, tasks, inlineFn, options = {}) {
200
+ const threshold = options.threshold ?? WORKER_THRESHOLD;
201
+ const swallowErrors = Boolean(options.swallowErrors);
202
+ const errorResult = options.errorResult ?? null;
203
+ const results = new Array(tasks.length).fill(null);
204
+ const useWorkers = tasks.length >= threshold && (await checkWorkerSupport());
205
+
206
+ lastWorkerCount = 0;
207
+ if (!useWorkers) {
208
+ runInline(
209
+ tasks,
210
+ inlineFn,
211
+ results,
212
+ tasks.keys(),
213
+ swallowErrors,
214
+ errorResult,
215
+ );
216
+ return results;
217
+ }
218
+
219
+ const maxWorkers = Math.min(options.maxWorkers ?? MAX_WORKERS, tasks.length);
220
+ const done = new Set();
221
+ let nextTask = 0;
222
+ let workersUsable = true;
223
+
224
+ const { Worker } = await import("node:worker_threads");
225
+ const workers = [];
226
+
227
+ function runOnWorker(worker, task) {
228
+ return new Promise((resolve, reject) => {
229
+ const cleanup = () => {
230
+ worker.removeListener("message", onMessage);
231
+ worker.removeListener("error", onError);
232
+ worker.removeListener("exit", onExit);
233
+ };
234
+ const onMessage = (msg) => {
235
+ cleanup();
236
+ if (msg?.error) {
237
+ reject(new TaskError(msg.error));
238
+ } else {
239
+ resolve(msg?.result);
240
+ }
241
+ };
242
+ const onError = (err) => {
243
+ cleanup();
244
+ reject(err);
245
+ };
246
+ // A worker can end without ever emitting `error` — it can be terminated,
247
+ // call `process.exit`, or be killed for running out of memory. Without
248
+ // this the pending request would never settle and the scan would hang.
249
+ const onExit = (code) => {
250
+ cleanup();
251
+ reject(new Error(`Worker exited with code ${code} before replying`));
252
+ };
253
+ worker.on("message", onMessage);
254
+ worker.on("error", onError);
255
+ worker.on("exit", onExit);
256
+ worker.postMessage(task);
257
+ });
258
+ }
259
+
260
+ async function workerLoop() {
261
+ let worker;
262
+ try {
263
+ worker = new Worker(workerUrl);
264
+ } catch {
265
+ workersUsable = false;
266
+ return;
267
+ }
268
+ workers.push(worker);
269
+ lastWorkerCount = workers.length;
270
+ try {
271
+ while (workersUsable) {
272
+ const i = nextTask;
273
+ nextTask++;
274
+ if (i >= tasks.length) {
275
+ break;
276
+ }
277
+ try {
278
+ results[i] = await runOnWorker(worker, tasks[i]);
279
+ done.add(i);
280
+ } catch (err) {
281
+ if (err instanceof TaskError) {
282
+ if (!swallowErrors) {
283
+ throw err;
284
+ }
285
+ results[i] = errorResult;
286
+ done.add(i);
287
+ continue;
288
+ }
289
+ // The worker, not the task, failed. Stop the pool and let the
290
+ // caller finish the outstanding tasks inline.
291
+ workersUsable = false;
292
+ return;
293
+ }
294
+ }
295
+ } finally {
296
+ await worker.terminate().catch(() => {
297
+ /* already exited */
298
+ });
299
+ }
300
+ }
301
+
302
+ try {
303
+ const loops = [];
304
+ for (let i = 0; i < maxWorkers; i++) {
305
+ loops.push(workerLoop());
306
+ }
307
+ await Promise.all(loops);
308
+ } finally {
309
+ await Promise.allSettled(workers.map((w) => w.terminate()));
310
+ }
311
+
312
+ if (!workersUsable) {
313
+ const pending = [];
314
+ for (let i = 0; i < tasks.length; i++) {
315
+ if (!done.has(i)) {
316
+ pending.push(i);
317
+ }
318
+ }
319
+ runInline(tasks, inlineFn, results, pending, swallowErrors, errorResult);
320
+ }
321
+
322
+ return results;
323
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Repo-root resolution, shared by every helper that loads a file from `data/`.
3
+ *
4
+ * This lives in its own leaf module — importing nothing from `utils.js` — because
5
+ * the value is consumed at *module-evaluation* time (`JSON.parse(readFileSync(
6
+ * join(dirNameStr, "data", …)))`). A module in a cycle with `utils.js` that reads
7
+ * `dirNameStr` while `utils.js` is still evaluating gets the binding in its
8
+ * temporal dead zone and throws `ReferenceError: Cannot access 'dirNameStr'
9
+ * before initialization`. Keeping the definition in a leaf guarantees it is
10
+ * initialized before any consumer runs.
11
+ *
12
+ * The `file://` normalization below is load-bearing, not defensive noise:
13
+ * `jsr.json` publishes `lib/cli/index.js` to JSR, so `import.meta.url` can be an
14
+ * `https://` URL, and `fileURLToPath` throws `ERR_INVALID_URL_SCHEME` on those.
15
+ */
16
+
17
+ import { platform } from "node:os";
18
+ import { dirname } from "node:path";
19
+ import { fileURLToPath } from "node:url";
20
+
21
+ let url = import.meta?.url;
22
+ if (url && !url.startsWith("file://")) {
23
+ url = new URL(`file://${import.meta.url}`).toString();
24
+ }
25
+ // TODO: verify if this is a good method (Prabhu)
26
+ // this is due to dirNameStr being "cdxgen/lib/helpers" which causes errors
27
+ /** Absolute path to the cdxgen repository root, resolved from the module URL. */
28
+ export const dirNameStr = url
29
+ ? dirname(dirname(dirname(fileURLToPath(url))))
30
+ : __dirname;
31
+
32
+ /** True when running on Windows. */
33
+ export const isWin = platform() === "win32";
34
+ /** True when running on macOS. */
35
+ export const isMac = platform() === "darwin";
36
+
37
+ /**
38
+ * Validate that a string is a Windows drive root such as `C:\`.
39
+ *
40
+ * @param {string} root Candidate drive root string.
41
+ * @returns {boolean} True when the string is a valid Windows drive root.
42
+ */
43
+ export function isValidDriveRoot(root) {
44
+ if (root.length > 3) {
45
+ return false;
46
+ }
47
+ const driveLetter = root.charAt(0);
48
+ const colon = root.charAt(1);
49
+ const backslash = root.charAt(2);
50
+ const charCode = driveLetter.charCodeAt(0);
51
+ const isAsciiLetter =
52
+ (charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122);
53
+ if (!isAsciiLetter) {
54
+ return false;
55
+ }
56
+ if (colon.charCodeAt(0) !== 0x3a) {
57
+ return false;
58
+ }
59
+ return !(backslash && backslash.charCodeAt(0) !== 0x5c);
60
+ }
61
+
62
+ /**
63
+ * Convert a kebab-case string to camelCase.
64
+ *
65
+ * @param {string} str Kebab-case input string.
66
+ * @returns {string} camelCase representation of the input.
67
+ */
68
+ export function toCamel(str) {
69
+ return str.replace(/-([a-z])/g, (_, g) => g.toUpperCase());
70
+ }
@@ -0,0 +1,122 @@
1
+ import path from "node:path";
2
+
3
+ import { toCamel } from "./paths.js";
4
+
5
+ /**
6
+ * Config file names cdxgen reads from the directory it is invoked in.
7
+ */
8
+ export const PROJECT_CONFIG_FILENAMES = [
9
+ ".cdxgenrc",
10
+ ".cdxgen.json",
11
+ ".cdxgen.yml",
12
+ ".cdxgen.yaml",
13
+ ];
14
+
15
+ /**
16
+ * Options whose values name a file or directory cdxgen writes to or reads
17
+ * from. A config file may set these, but only to a location inside its own
18
+ * directory.
19
+ */
20
+ const PATH_OPTIONS = new Set([
21
+ "output",
22
+ "evinse-output",
23
+ "proto-bin-file",
24
+ "deps-slices-file",
25
+ "usages-slices-file",
26
+ "data-flow-slices-file",
27
+ "reachables-slices-file",
28
+ "semantics-slices-file",
29
+ "openapi-spec-file",
30
+ "license-policy",
31
+ "bom-audit-rules-dir",
32
+ ]);
33
+
34
+ /**
35
+ * Options that change where cdxgen sends data or how much of the host it
36
+ * touches. These stay usable, but never silently.
37
+ */
38
+ const ANNOUNCED_OPTIONS = new Set([
39
+ "server-url",
40
+ "api-key",
41
+ "include-formulation",
42
+ "install-deps",
43
+ "deep",
44
+ "tea-publish",
45
+ "tea-fetch",
46
+ "tea-artifact-url",
47
+ "tea-token",
48
+ ]);
49
+
50
+ /**
51
+ * Both spellings a config file may use for an option.
52
+ *
53
+ * @param {string} option kebab-case option name
54
+ * @returns {string[]} kebab-case and camelCase spellings
55
+ */
56
+ function optionSpellings(option) {
57
+ const camel = toCamel(option);
58
+ return camel === option ? [option] : [option, camel];
59
+ }
60
+
61
+ /**
62
+ * Determine whether a config-supplied path stays inside the config's own
63
+ * directory.
64
+ *
65
+ * @param {string} configDir directory the config file was read from
66
+ * @param {unknown} value config-supplied path value
67
+ * @returns {boolean} true when the path resolves inside configDir
68
+ */
69
+ function isContainedPath(configDir, value) {
70
+ if (typeof value !== "string" || !value.length) {
71
+ return false;
72
+ }
73
+ const relativePath = path.relative(
74
+ path.resolve(configDir),
75
+ path.resolve(configDir, value),
76
+ );
77
+ return (
78
+ relativePath === "" ||
79
+ (!relativePath.startsWith("..") && !path.isAbsolute(relativePath))
80
+ );
81
+ }
82
+
83
+ /**
84
+ * Apply the trust boundary between cdxgen and the directory it is scanning.
85
+ *
86
+ * A config file lives in the tree under analysis, so it is attacker-controlled
87
+ * whenever that tree is. Path options are therefore confined to the config's
88
+ * own directory - a scanned project may choose where in itself the BOM lands,
89
+ * but not write outside it - and options that redirect data off the host or
90
+ * widen what cdxgen executes are announced on the console.
91
+ *
92
+ * @param {Object} config parsed config file contents
93
+ * @param {string} configDir directory the config file was read from
94
+ * @returns {{config: Object, rejected: string[], announced: string[]}} sanitized config and what it did
95
+ */
96
+ export function sanitizeProjectConfig(config, configDir) {
97
+ if (!config || typeof config !== "object") {
98
+ return { announced: [], config: {}, rejected: [] };
99
+ }
100
+ const sanitized = { ...config };
101
+ const rejected = [];
102
+ const announced = [];
103
+ for (const option of PATH_OPTIONS) {
104
+ for (const key of optionSpellings(option)) {
105
+ if (sanitized[key] === undefined) {
106
+ continue;
107
+ }
108
+ if (!isContainedPath(configDir, sanitized[key])) {
109
+ rejected.push(`${key}=${sanitized[key]}`);
110
+ delete sanitized[key];
111
+ }
112
+ }
113
+ }
114
+ for (const option of ANNOUNCED_OPTIONS) {
115
+ for (const key of optionSpellings(option)) {
116
+ if (sanitized[key] !== undefined) {
117
+ announced.push(key);
118
+ }
119
+ }
120
+ }
121
+ return { announced, config: sanitized, rejected };
122
+ }