@cdxgen/cdxgen 13.5.0 → 13.7.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 (380) hide show
  1. package/README.md +17 -10
  2. package/bin/audit.js +7 -4
  3. package/bin/cdxgen.js +260 -37
  4. package/bin/convert.js +146 -22
  5. package/bin/evinse.js +28 -3
  6. package/bin/repl.js +47 -3
  7. package/bin/sign.js +211 -34
  8. package/bin/tracebom.js +18 -6
  9. package/bin/validate.js +24 -3
  10. package/bin/verify.js +113 -5
  11. package/data/behavior-taxonomy.schema.json +1491 -0
  12. package/data/cyclonedx-2.0-bundled.schema.json +18606 -5528
  13. package/data/cyclonedx-2.0-cryptography-defs.schema.json +857 -0
  14. package/data/license-aliases.json +24 -2
  15. package/data/pqc-migration.json +239 -0
  16. package/data/remediations.json +176 -0
  17. package/data/rules/ai-bom.yaml +1 -1
  18. package/data/rules/brotli-decoder.yaml +107 -0
  19. package/data/rules/cbom-security.yaml +4 -3
  20. package/data/rules/package-integrity.yaml +28 -0
  21. package/data/rules/vscode-extensions.yaml +75 -0
  22. package/data/spdx-license-list.json +121 -7
  23. package/data/spdx-licenses.json +69 -0
  24. package/data/spdx.schema.json +845 -2
  25. package/lib/audit/index.js +25 -3
  26. package/lib/cli/bomAssembly.js +172 -4
  27. package/lib/cli/cliOptions.js +121 -17
  28. package/lib/cli/index.js +720 -902
  29. package/lib/cli/jsBom.js +156 -64
  30. package/lib/cli/jvmBom.js +602 -86
  31. package/lib/cli/managedBom.js +161 -19
  32. package/lib/cli/nativeBom.js +52 -5
  33. package/lib/core/boundedFile.js +344 -0
  34. package/lib/core/brotliProbe.js +182 -0
  35. package/lib/core/env.js +34 -0
  36. package/lib/core/fs.js +138 -3
  37. package/lib/core/globPatterns.js +218 -0
  38. package/lib/core/httpClient.js +98 -1
  39. package/lib/core/lockPaths.js +38 -0
  40. package/lib/core/paths.js +24 -1
  41. package/lib/core/processTree.js +100 -8
  42. package/lib/core/projectConfig.js +332 -25
  43. package/lib/core/toolRegistry.js +184 -0
  44. package/lib/ecosystems/cppEvidence.js +263 -106
  45. package/lib/ecosystems/cppIncludeResolver.js +16 -5
  46. package/lib/ecosystems/denoutils.js +2 -2
  47. package/lib/ecosystems/ecosystems.js +25 -10
  48. package/lib/ecosystems/gemHostProbe.js +301 -0
  49. package/lib/ecosystems/golem.js +3 -8
  50. package/lib/ecosystems/gradleutils.js +1909 -229
  51. package/lib/ecosystems/jsEvidence.js +90 -38
  52. package/lib/ecosystems/kosi.js +3 -5
  53. package/lib/ecosystems/npmVersionResolution.js +376 -0
  54. package/lib/ecosystems/parsers-bazel.js +107 -6
  55. package/lib/ecosystems/parsers-js.js +505 -22
  56. package/lib/ecosystems/parsers-misc.js +209 -20
  57. package/lib/ecosystems/parsers-python.js +178 -30
  58. package/lib/ecosystems/parsers-rust.js +117 -15
  59. package/lib/ecosystems/pythonutils.js +128 -2
  60. package/lib/ecosystems/remote/huggingface.js +22 -0
  61. package/lib/ecosystems/rubyutils.js +538 -31
  62. package/lib/ecosystems/rusi.js +2 -4
  63. package/lib/ecosystems/scalacliutils.js +2 -0
  64. package/lib/ecosystems/scalasem.js +798 -152
  65. package/lib/ecosystems/vendoredCode.js +237 -3
  66. package/lib/ecosystems/venvProbe.js +360 -0
  67. package/lib/evinser/evinser.js +536 -71
  68. package/lib/evinser/scalasem.js +5 -1
  69. package/lib/helpers/agenticToolutils.js +525 -94
  70. package/lib/helpers/bomSigner.js +43 -9
  71. package/lib/helpers/jssSigner.js +1276 -0
  72. package/lib/helpers/vsixutils.js +1574 -315
  73. package/lib/inventory/agentBlueprint.js +193 -0
  74. package/lib/inventory/agentToolNames.js +145 -0
  75. package/lib/inventory/aiCollector.js +153 -7
  76. package/lib/inventory/aiInventory.js +44 -8
  77. package/lib/inventory/aiProviders.js +324 -0
  78. package/lib/inventory/atomUtils.js +77 -0
  79. package/lib/inventory/bomUtils.js +8 -1
  80. package/lib/inventory/brotliDecoder.js +142 -0
  81. package/lib/inventory/buildToolRateLimit.js +1 -1
  82. package/lib/inventory/cbomutils.js +56 -7
  83. package/lib/inventory/ciParsers/githubActionsLock.js +821 -0
  84. package/lib/inventory/citations.js +31 -2
  85. package/lib/inventory/communityAiConfigParser.js +978 -80
  86. package/lib/inventory/cyclonedx20.js +152 -0
  87. package/lib/inventory/cyclonedx20Common.js +286 -0
  88. package/lib/inventory/cyclonedx20Derived.js +159 -0
  89. package/lib/inventory/cyclonedx20Parties.js +552 -0
  90. package/lib/inventory/cyclonedx20Read.js +768 -0
  91. package/lib/inventory/cyclonedx20ReadCommon.js +374 -0
  92. package/lib/inventory/cyclonedx20ReadComponents.js +692 -0
  93. package/lib/inventory/cyclonedx20ReadContext.js +380 -0
  94. package/lib/inventory/cyclonedx20ReadEvidence.js +466 -0
  95. package/lib/inventory/cyclonedx20ReadSections.js +599 -0
  96. package/lib/inventory/cyclonedx20Render.js +766 -0
  97. package/lib/inventory/cyclonedx20RenderComponents.js +716 -0
  98. package/lib/inventory/cyclonedx20RenderDefinitions.js +405 -0
  99. package/lib/inventory/cyclonedx20RenderEvidence.js +726 -0
  100. package/lib/inventory/cyclonedx20RenderHardware.js +203 -0
  101. package/lib/inventory/cyclonedx20RenderPatents.js +174 -0
  102. package/lib/inventory/cyclonedx20RenderRefIds.js +314 -0
  103. package/lib/inventory/cyclonedx20RenderSections.js +499 -0
  104. package/lib/inventory/cyclonedx20Tables.js +594 -0
  105. package/lib/inventory/deps.js +141 -13
  106. package/lib/inventory/dosai.js +375 -6
  107. package/lib/inventory/dosaiParsers.js +3 -6
  108. package/lib/inventory/dotnetRuntime.js +367 -0
  109. package/lib/inventory/ecosystemFormulationParsers.js +979 -0
  110. package/lib/inventory/envcontext.js +436 -48
  111. package/lib/inventory/evidenceUtils.js +13 -1
  112. package/lib/inventory/fetchBatch.js +1 -1
  113. package/lib/inventory/formulationParsers.js +124 -14
  114. package/lib/inventory/gtfobins.js +13 -0
  115. package/lib/inventory/hbom.js +45 -6
  116. package/lib/inventory/hbomLoader.js +166 -0
  117. package/lib/inventory/hostRuntimeProbe.js +686 -0
  118. package/lib/inventory/jvmLocalRepos.js +9 -2
  119. package/lib/inventory/jvmToolEnv.js +29 -0
  120. package/lib/inventory/licenseEnhancer.js +12 -0
  121. package/lib/inventory/mavenCentralMirror.js +534 -0
  122. package/lib/inventory/mcpConfigParser.js +5 -0
  123. package/lib/inventory/nodeBuildInfo.js +218 -0
  124. package/lib/inventory/nodeHostProbe.js +202 -0
  125. package/lib/inventory/occurrenceKey.js +90 -0
  126. package/lib/inventory/osPackageResolver.js +182 -0
  127. package/lib/inventory/phpBuildInfo.js +10 -59
  128. package/lib/inventory/phpHostProbe.js +32 -488
  129. package/lib/inventory/pqcMigration.js +426 -0
  130. package/lib/inventory/rubyBuildInfo.js +972 -0
  131. package/lib/inventory/rubyHostProbe.js +218 -0
  132. package/lib/inventory/rustFormulationParser.js +21 -10
  133. package/lib/inventory/scalaCoords.js +4 -3
  134. package/lib/inventory/scalaDedupe.js +440 -0
  135. package/lib/inventory/source.js +114 -8
  136. package/lib/managers/binary.js +337 -3
  137. package/lib/managers/docker.js +79 -0
  138. package/lib/parsers/huggingfaceManifest.js +9 -1
  139. package/lib/parsers/huggingfaceUtils.js +18 -0
  140. package/lib/parsers/kiroPermissions.js +166 -0
  141. package/lib/parsers/largeJson.js +28 -11
  142. package/lib/parsers/vscodeExtensionId.js +183 -0
  143. package/lib/server/server.js +48 -35
  144. package/lib/stages/postgen/postgen.js +41 -1
  145. package/lib/stages/postgen/ruleEngine.js +13 -5
  146. package/lib/stages/postgen/specVersionCompat.js +76 -0
  147. package/lib/stages/pregen/envAudit.js +1 -0
  148. package/lib/stages/pregen/pregen.js +114 -57
  149. package/lib/validator/bomValidator.js +14 -2
  150. package/lib/validator/complianceEngine.js +30 -3
  151. package/lib/validator/complianceRules.js +1416 -4
  152. package/lib/validator/generated/validate-1.6.mjs +1 -1
  153. package/lib/validator/generated/validate-1.7.mjs +1 -1
  154. package/lib/validator/generated/validate-2.0.mjs +57554 -13851
  155. package/lib/validator/index.js +49 -8
  156. package/lib/validator/reporters/json.js +6 -0
  157. package/package.json +11 -10
  158. package/types/bin/repl.d.ts.map +1 -1
  159. package/types/lib/audit/index.d.ts +6 -2
  160. package/types/lib/audit/index.d.ts.map +1 -1
  161. package/types/lib/cli/bomAssembly.d.ts +29 -1
  162. package/types/lib/cli/bomAssembly.d.ts.map +1 -1
  163. package/types/lib/cli/cliOptions.d.ts +6 -0
  164. package/types/lib/cli/cliOptions.d.ts.map +1 -1
  165. package/types/lib/cli/index.d.ts.map +1 -1
  166. package/types/lib/cli/jsBom.d.ts +3 -18
  167. package/types/lib/cli/jsBom.d.ts.map +1 -1
  168. package/types/lib/cli/jvmBom.d.ts +15 -0
  169. package/types/lib/cli/jvmBom.d.ts.map +1 -1
  170. package/types/lib/cli/managedBom.d.ts.map +1 -1
  171. package/types/lib/cli/nativeBom.d.ts.map +1 -1
  172. package/types/lib/core/boundedFile.d.ts +100 -0
  173. package/types/lib/core/boundedFile.d.ts.map +1 -0
  174. package/types/lib/core/brotliProbe.d.ts +37 -0
  175. package/types/lib/core/brotliProbe.d.ts.map +1 -0
  176. package/types/lib/core/env.d.ts +14 -0
  177. package/types/lib/core/env.d.ts.map +1 -1
  178. package/types/lib/core/fs.d.ts +4 -0
  179. package/types/lib/core/fs.d.ts.map +1 -1
  180. package/types/lib/core/globPatterns.d.ts +70 -0
  181. package/types/lib/core/globPatterns.d.ts.map +1 -0
  182. package/types/lib/core/httpClient.d.ts +24 -0
  183. package/types/lib/core/httpClient.d.ts.map +1 -1
  184. package/types/lib/core/lockPaths.d.ts +19 -0
  185. package/types/lib/core/lockPaths.d.ts.map +1 -0
  186. package/types/lib/core/paths.d.ts +9 -0
  187. package/types/lib/core/paths.d.ts.map +1 -1
  188. package/types/lib/core/processTree.d.ts +17 -4
  189. package/types/lib/core/processTree.d.ts.map +1 -1
  190. package/types/lib/core/projectConfig.d.ts +47 -8
  191. package/types/lib/core/projectConfig.d.ts.map +1 -1
  192. package/types/lib/core/toolRegistry.d.ts +36 -0
  193. package/types/lib/core/toolRegistry.d.ts.map +1 -0
  194. package/types/lib/ecosystems/cppEvidence.d.ts +40 -13
  195. package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -1
  196. package/types/lib/ecosystems/cppIncludeResolver.d.ts +2 -1
  197. package/types/lib/ecosystems/cppIncludeResolver.d.ts.map +1 -1
  198. package/types/lib/ecosystems/ecosystems.d.ts.map +1 -1
  199. package/types/lib/ecosystems/gemHostProbe.d.ts +28 -0
  200. package/types/lib/ecosystems/gemHostProbe.d.ts.map +1 -0
  201. package/types/lib/ecosystems/golem.d.ts.map +1 -1
  202. package/types/lib/ecosystems/gradleutils.d.ts +294 -20
  203. package/types/lib/ecosystems/gradleutils.d.ts.map +1 -1
  204. package/types/lib/ecosystems/jsEvidence.d.ts +14 -1
  205. package/types/lib/ecosystems/jsEvidence.d.ts.map +1 -1
  206. package/types/lib/ecosystems/kosi.d.ts.map +1 -1
  207. package/types/lib/ecosystems/npmVersionResolution.d.ts +119 -0
  208. package/types/lib/ecosystems/npmVersionResolution.d.ts.map +1 -0
  209. package/types/lib/ecosystems/parsers-bazel.d.ts.map +1 -1
  210. package/types/lib/ecosystems/parsers-js.d.ts +17 -20
  211. package/types/lib/ecosystems/parsers-js.d.ts.map +1 -1
  212. package/types/lib/ecosystems/parsers-misc.d.ts +19 -0
  213. package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -1
  214. package/types/lib/ecosystems/parsers-python.d.ts +10 -0
  215. package/types/lib/ecosystems/parsers-python.d.ts.map +1 -1
  216. package/types/lib/ecosystems/parsers-rust.d.ts.map +1 -1
  217. package/types/lib/ecosystems/pythonutils.d.ts +19 -1
  218. package/types/lib/ecosystems/pythonutils.d.ts.map +1 -1
  219. package/types/lib/ecosystems/remote/huggingface.d.ts.map +1 -1
  220. package/types/lib/ecosystems/rubyutils.d.ts +144 -12
  221. package/types/lib/ecosystems/rubyutils.d.ts.map +1 -1
  222. package/types/lib/ecosystems/rusi.d.ts.map +1 -1
  223. package/types/lib/ecosystems/scalacliutils.d.ts.map +1 -1
  224. package/types/lib/ecosystems/scalasem.d.ts +58 -16
  225. package/types/lib/ecosystems/scalasem.d.ts.map +1 -1
  226. package/types/lib/ecosystems/vendoredCode.d.ts +26 -0
  227. package/types/lib/ecosystems/vendoredCode.d.ts.map +1 -1
  228. package/types/lib/ecosystems/venvProbe.d.ts +40 -0
  229. package/types/lib/ecosystems/venvProbe.d.ts.map +1 -0
  230. package/types/lib/evinser/evinser.d.ts +120 -13
  231. package/types/lib/evinser/evinser.d.ts.map +1 -1
  232. package/types/lib/evinser/scalasem.d.ts.map +1 -1
  233. package/types/lib/helpers/agenticToolutils.d.ts +53 -19
  234. package/types/lib/helpers/agenticToolutils.d.ts.map +1 -1
  235. package/types/lib/helpers/bomSigner.d.ts +20 -3
  236. package/types/lib/helpers/bomSigner.d.ts.map +1 -1
  237. package/types/lib/helpers/jssSigner.d.ts +288 -0
  238. package/types/lib/helpers/jssSigner.d.ts.map +1 -0
  239. package/types/lib/helpers/vsixutils.d.ts +303 -19
  240. package/types/lib/helpers/vsixutils.d.ts.map +1 -1
  241. package/types/lib/inventory/agentBlueprint.d.ts +70 -0
  242. package/types/lib/inventory/agentBlueprint.d.ts.map +1 -0
  243. package/types/lib/inventory/agentToolNames.d.ts +51 -0
  244. package/types/lib/inventory/agentToolNames.d.ts.map +1 -0
  245. package/types/lib/inventory/aiCollector.d.ts.map +1 -1
  246. package/types/lib/inventory/aiInventory.d.ts.map +1 -1
  247. package/types/lib/inventory/aiProviders.d.ts +85 -0
  248. package/types/lib/inventory/aiProviders.d.ts.map +1 -0
  249. package/types/lib/inventory/atomUtils.d.ts +19 -0
  250. package/types/lib/inventory/atomUtils.d.ts.map +1 -1
  251. package/types/lib/inventory/bomUtils.d.ts.map +1 -1
  252. package/types/lib/inventory/brotliDecoder.d.ts +58 -0
  253. package/types/lib/inventory/brotliDecoder.d.ts.map +1 -0
  254. package/types/lib/inventory/cbomutils.d.ts +17 -0
  255. package/types/lib/inventory/cbomutils.d.ts.map +1 -1
  256. package/types/lib/inventory/ciParsers/githubActionsLock.d.ts +101 -0
  257. package/types/lib/inventory/ciParsers/githubActionsLock.d.ts.map +1 -0
  258. package/types/lib/inventory/citations.d.ts +5 -0
  259. package/types/lib/inventory/citations.d.ts.map +1 -1
  260. package/types/lib/inventory/communityAiConfigParser.d.ts.map +1 -1
  261. package/types/lib/inventory/cyclonedx20.d.ts +99 -0
  262. package/types/lib/inventory/cyclonedx20.d.ts.map +1 -0
  263. package/types/lib/inventory/cyclonedx20Common.d.ts +102 -0
  264. package/types/lib/inventory/cyclonedx20Common.d.ts.map +1 -0
  265. package/types/lib/inventory/cyclonedx20Derived.d.ts +74 -0
  266. package/types/lib/inventory/cyclonedx20Derived.d.ts.map +1 -0
  267. package/types/lib/inventory/cyclonedx20Parties.d.ts +91 -0
  268. package/types/lib/inventory/cyclonedx20Parties.d.ts.map +1 -0
  269. package/types/lib/inventory/cyclonedx20Read.d.ts +51 -0
  270. package/types/lib/inventory/cyclonedx20Read.d.ts.map +1 -0
  271. package/types/lib/inventory/cyclonedx20ReadCommon.d.ts +69 -0
  272. package/types/lib/inventory/cyclonedx20ReadCommon.d.ts.map +1 -0
  273. package/types/lib/inventory/cyclonedx20ReadComponents.d.ts +77 -0
  274. package/types/lib/inventory/cyclonedx20ReadComponents.d.ts.map +1 -0
  275. package/types/lib/inventory/cyclonedx20ReadContext.d.ts +118 -0
  276. package/types/lib/inventory/cyclonedx20ReadContext.d.ts.map +1 -0
  277. package/types/lib/inventory/cyclonedx20ReadEvidence.d.ts +40 -0
  278. package/types/lib/inventory/cyclonedx20ReadEvidence.d.ts.map +1 -0
  279. package/types/lib/inventory/cyclonedx20ReadSections.d.ts +45 -0
  280. package/types/lib/inventory/cyclonedx20ReadSections.d.ts.map +1 -0
  281. package/types/lib/inventory/cyclonedx20Render.d.ts +53 -0
  282. package/types/lib/inventory/cyclonedx20Render.d.ts.map +1 -0
  283. package/types/lib/inventory/cyclonedx20RenderComponents.d.ts +73 -0
  284. package/types/lib/inventory/cyclonedx20RenderComponents.d.ts.map +1 -0
  285. package/types/lib/inventory/cyclonedx20RenderDefinitions.d.ts +29 -0
  286. package/types/lib/inventory/cyclonedx20RenderDefinitions.d.ts.map +1 -0
  287. package/types/lib/inventory/cyclonedx20RenderEvidence.d.ts +110 -0
  288. package/types/lib/inventory/cyclonedx20RenderEvidence.d.ts.map +1 -0
  289. package/types/lib/inventory/cyclonedx20RenderHardware.d.ts +42 -0
  290. package/types/lib/inventory/cyclonedx20RenderHardware.d.ts.map +1 -0
  291. package/types/lib/inventory/cyclonedx20RenderPatents.d.ts +26 -0
  292. package/types/lib/inventory/cyclonedx20RenderPatents.d.ts.map +1 -0
  293. package/types/lib/inventory/cyclonedx20RenderRefIds.d.ts +55 -0
  294. package/types/lib/inventory/cyclonedx20RenderRefIds.d.ts.map +1 -0
  295. package/types/lib/inventory/cyclonedx20RenderSections.d.ts +45 -0
  296. package/types/lib/inventory/cyclonedx20RenderSections.d.ts.map +1 -0
  297. package/types/lib/inventory/cyclonedx20Tables.d.ts +134 -0
  298. package/types/lib/inventory/cyclonedx20Tables.d.ts.map +1 -0
  299. package/types/lib/inventory/deps.d.ts +35 -2
  300. package/types/lib/inventory/deps.d.ts.map +1 -1
  301. package/types/lib/inventory/dosai.d.ts +36 -1
  302. package/types/lib/inventory/dosai.d.ts.map +1 -1
  303. package/types/lib/inventory/dosaiParsers.d.ts.map +1 -1
  304. package/types/lib/inventory/dotnetRuntime.d.ts +91 -0
  305. package/types/lib/inventory/dotnetRuntime.d.ts.map +1 -0
  306. package/types/lib/inventory/ecosystemFormulationParsers.d.ts +73 -0
  307. package/types/lib/inventory/ecosystemFormulationParsers.d.ts.map +1 -0
  308. package/types/lib/inventory/envcontext.d.ts +74 -12
  309. package/types/lib/inventory/envcontext.d.ts.map +1 -1
  310. package/types/lib/inventory/evidenceUtils.d.ts.map +1 -1
  311. package/types/lib/inventory/formulationParsers.d.ts.map +1 -1
  312. package/types/lib/inventory/gtfobins.d.ts.map +1 -1
  313. package/types/lib/inventory/hbom.d.ts +11 -0
  314. package/types/lib/inventory/hbom.d.ts.map +1 -1
  315. package/types/lib/inventory/hbomLoader.d.ts +54 -0
  316. package/types/lib/inventory/hbomLoader.d.ts.map +1 -1
  317. package/types/lib/inventory/hostRuntimeProbe.d.ts +44 -0
  318. package/types/lib/inventory/hostRuntimeProbe.d.ts.map +1 -0
  319. package/types/lib/inventory/jvmLocalRepos.d.ts +5 -1
  320. package/types/lib/inventory/jvmLocalRepos.d.ts.map +1 -1
  321. package/types/lib/inventory/jvmToolEnv.d.ts +12 -0
  322. package/types/lib/inventory/jvmToolEnv.d.ts.map +1 -1
  323. package/types/lib/inventory/licenseEnhancer.d.ts.map +1 -1
  324. package/types/lib/inventory/mavenCentralMirror.d.ts +170 -0
  325. package/types/lib/inventory/mavenCentralMirror.d.ts.map +1 -0
  326. package/types/lib/inventory/mcpConfigParser.d.ts.map +1 -1
  327. package/types/lib/inventory/nodeBuildInfo.d.ts +95 -0
  328. package/types/lib/inventory/nodeBuildInfo.d.ts.map +1 -0
  329. package/types/lib/inventory/nodeHostProbe.d.ts +15 -0
  330. package/types/lib/inventory/nodeHostProbe.d.ts.map +1 -0
  331. package/types/lib/inventory/occurrenceKey.d.ts +52 -0
  332. package/types/lib/inventory/occurrenceKey.d.ts.map +1 -0
  333. package/types/lib/inventory/osPackageResolver.d.ts +38 -0
  334. package/types/lib/inventory/osPackageResolver.d.ts.map +1 -1
  335. package/types/lib/inventory/phpBuildInfo.d.ts.map +1 -1
  336. package/types/lib/inventory/phpHostProbe.d.ts.map +1 -1
  337. package/types/lib/inventory/pqcMigration.d.ts +84 -0
  338. package/types/lib/inventory/pqcMigration.d.ts.map +1 -0
  339. package/types/lib/inventory/rubyBuildInfo.d.ts +271 -0
  340. package/types/lib/inventory/rubyBuildInfo.d.ts.map +1 -0
  341. package/types/lib/inventory/rubyHostProbe.d.ts +47 -0
  342. package/types/lib/inventory/rubyHostProbe.d.ts.map +1 -0
  343. package/types/lib/inventory/rustFormulationParser.d.ts +7 -2
  344. package/types/lib/inventory/rustFormulationParser.d.ts.map +1 -1
  345. package/types/lib/inventory/scalaCoords.d.ts.map +1 -1
  346. package/types/lib/inventory/scalaDedupe.d.ts +43 -0
  347. package/types/lib/inventory/scalaDedupe.d.ts.map +1 -0
  348. package/types/lib/inventory/source.d.ts +25 -0
  349. package/types/lib/inventory/source.d.ts.map +1 -1
  350. package/types/lib/managers/binary.d.ts.map +1 -1
  351. package/types/lib/managers/docker.d.ts +12 -0
  352. package/types/lib/managers/docker.d.ts.map +1 -1
  353. package/types/lib/parsers/huggingfaceManifest.d.ts +10 -1
  354. package/types/lib/parsers/huggingfaceManifest.d.ts.map +1 -1
  355. package/types/lib/parsers/huggingfaceUtils.d.ts +12 -0
  356. package/types/lib/parsers/huggingfaceUtils.d.ts.map +1 -1
  357. package/types/lib/parsers/kiroPermissions.d.ts +62 -0
  358. package/types/lib/parsers/kiroPermissions.d.ts.map +1 -0
  359. package/types/lib/parsers/largeJson.d.ts +4 -3
  360. package/types/lib/parsers/largeJson.d.ts.map +1 -1
  361. package/types/lib/parsers/vscodeExtensionId.d.ts +48 -0
  362. package/types/lib/parsers/vscodeExtensionId.d.ts.map +1 -0
  363. package/types/lib/server/server.d.ts.map +1 -1
  364. package/types/lib/stages/postgen/postgen.d.ts +7 -0
  365. package/types/lib/stages/postgen/postgen.d.ts.map +1 -1
  366. package/types/lib/stages/postgen/ruleEngine.d.ts.map +1 -1
  367. package/types/lib/stages/postgen/specVersionCompat.d.ts +25 -0
  368. package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -1
  369. package/types/lib/stages/pregen/envAudit.d.ts.map +1 -1
  370. package/types/lib/stages/pregen/pregen.d.ts +12 -8
  371. package/types/lib/stages/pregen/pregen.d.ts.map +1 -1
  372. package/types/lib/validator/bomValidator.d.ts +5 -1
  373. package/types/lib/validator/bomValidator.d.ts.map +1 -1
  374. package/types/lib/validator/complianceEngine.d.ts +4 -4
  375. package/types/lib/validator/complianceEngine.d.ts.map +1 -1
  376. package/types/lib/validator/complianceRules.d.ts +14 -2
  377. package/types/lib/validator/complianceRules.d.ts.map +1 -1
  378. package/types/lib/validator/index.d.ts +10 -0
  379. package/types/lib/validator/index.d.ts.map +1 -1
  380. package/types/lib/validator/reporters/json.d.ts.map +1 -1
@@ -6,6 +6,7 @@ import {
6
6
  extname,
7
7
  isAbsolute,
8
8
  join,
9
+ relative,
9
10
  resolve,
10
11
  } from "node:path";
11
12
  import process from "node:process";
@@ -101,11 +102,14 @@ import {
101
102
  addRubyGemsDistributionUrls,
102
103
  addRubyRuntimeComponent,
103
104
  collectGemModuleNames,
105
+ collectProjectRubyDeclarations,
104
106
  describeProjectGem,
105
107
  enrichGemsFromLocalCache,
106
108
  parseBundleConfig,
107
109
  parseGemfileLockData,
108
110
  parseGemspecData,
111
+ resolveProjectRuby,
112
+ toGemPurl,
109
113
  } from "../ecosystems/rubyutils.js";
110
114
  import { getTerraformRegistryMetadata } from "../ecosystems/terraformRegistry.js";
111
115
  import {
@@ -143,6 +147,7 @@ import {
143
147
  dosaiFailureReported,
144
148
  dosaiMethodsSectionsArgument,
145
149
  dosaiReportFileOmittedSections,
150
+ dosaiSlicesFileIsFresh,
146
151
  dosaiToolComponents,
147
152
  isDosaiDotnetLanguage,
148
153
  normalizeDosaiServiceMap,
@@ -152,7 +157,11 @@ import {
152
157
  import { addEvidenceForDotnet } from "../inventory/evidenceUtils.js";
153
158
  import { resolvePluginBinary } from "../inventory/plugins.js";
154
159
  import { nugetPurl, pypiBomRef } from "../inventory/purl.js";
155
- import { classifyProbeResult } from "../inventory/toolRequirements.js";
160
+ import { isInsideInstalledGem } from "../inventory/rubyBuildInfo.js";
161
+ import {
162
+ classifyProbeResult,
163
+ parseGemfileLockBundlerVersion,
164
+ } from "../inventory/toolRequirements.js";
156
165
  import { getPluginToolComponents } from "../managers/binary.js";
157
166
  import { getTreeWithPlugin } from "../managers/piptree.js";
158
167
  import {
@@ -1429,7 +1438,14 @@ export async function createRubyBom(path, options) {
1429
1438
  if (typeof options.includeNodeModulesDir === "undefined" || options.deep) {
1430
1439
  options.includeNodeModulesDir = true;
1431
1440
  }
1432
- const excludeList = (options.exclude || []).concat(["**/vendor/cache/**"]);
1441
+ // RubyGems caches the specs it fetched from a source under ~/.cache/gem/specs
1442
+ // and ~/.gem/specs, Marshal-dumped into files named <gem>-<version>.gemspec.
1443
+ // Those describe what a source offered, not what is installed.
1444
+ const excludeList = (options.exclude || []).concat([
1445
+ "**/vendor/cache/**",
1446
+ "**/.cache/gem/specs/**",
1447
+ "**/.gem/specs/**",
1448
+ ]);
1433
1449
  const gemLockExcludeList = (options.exclude || []).concat([
1434
1450
  "**/vendor/bundle/ruby/**/Gemfile.lock",
1435
1451
  "**/test/data/**/Gemfile*.lock",
@@ -1455,6 +1471,12 @@ export async function createRubyBom(path, options) {
1455
1471
  exclude: gemLockExcludeList,
1456
1472
  },
1457
1473
  );
1474
+ // An installed gem's own directory can hold its development Gemfile.lock,
1475
+ // nested gemspecs and manifests (rbs ships steep/Gemfile.lock, typeprof a
1476
+ // VS Code extension). They describe how the gem is developed, not what is
1477
+ // installed, and would add gems that are not there.
1478
+ const isGemInternalFile = (f) =>
1479
+ isInsideInstalledGem(f, safeExistsSync, path);
1458
1480
  let gemspecFiles = getAllFiles(
1459
1481
  path,
1460
1482
  `${options.multiProject ? "**/" : ""}*.gemspec`,
@@ -1462,7 +1484,7 @@ export async function createRubyBom(path, options) {
1462
1484
  ...options,
1463
1485
  exclude: excludeList,
1464
1486
  },
1465
- );
1487
+ ).filter((f) => !isGemInternalFile(f));
1466
1488
  let gemHome =
1467
1489
  readEnvironmentVariable("CDXGEN_GEM_HOME") ||
1468
1490
  readEnvironmentVariable("GEM_HOME");
@@ -1543,7 +1565,9 @@ export async function createRubyBom(path, options) {
1543
1565
  ...options,
1544
1566
  exclude: gemLockExcludeList,
1545
1567
  },
1546
- );
1568
+ ).filter((f) => !isGemInternalFile(f));
1569
+ // The lockfiles each Bundler release resolved
1570
+ const bundlerVersions = new Map();
1547
1571
  if (gemLockFiles.length) {
1548
1572
  for (const f of gemLockFiles) {
1549
1573
  if (DEBUG_MODE) {
@@ -1551,6 +1575,15 @@ export async function createRubyBom(path, options) {
1551
1575
  }
1552
1576
  const gemLockData = readFileSync(f, { encoding: "utf-8" });
1553
1577
  const retMap = await parseGemfileLockData(gemLockData, f, { gemHome });
1578
+ // Bundler is not listed among the specs, but runs every bundle: the
1579
+ // lockfile names the release that resolved it under BUNDLED WITH.
1580
+ const bundlerVersion = parseGemfileLockBundlerVersion(gemLockData);
1581
+ if (bundlerVersion) {
1582
+ bundlerVersions.set(bundlerVersion, [
1583
+ ...(bundlerVersions.get(bundlerVersion) || []),
1584
+ f,
1585
+ ]);
1586
+ }
1554
1587
  if (retMap.pkgList?.length) {
1555
1588
  pkgList = pkgList.concat(retMap.pkgList);
1556
1589
  pkgList = trimComponents(pkgList);
@@ -1633,6 +1666,42 @@ export async function createRubyBom(path, options) {
1633
1666
  options,
1634
1667
  ));
1635
1668
  }
1669
+ for (const [bundlerVersion, lockFiles] of [...bundlerVersions.entries()].sort(
1670
+ (a, b) => a[0].localeCompare(b[0]),
1671
+ )) {
1672
+ const purl = toGemPurl("bundler", bundlerVersion);
1673
+ const ref = decodeURIComponent(purl);
1674
+ if (pkgList.some((p) => p["bom-ref"] === ref)) {
1675
+ continue;
1676
+ }
1677
+ pkgList.push({
1678
+ name: "bundler",
1679
+ version: bundlerVersion,
1680
+ purl,
1681
+ "bom-ref": ref,
1682
+ scope: "required",
1683
+ properties: [
1684
+ { name: "cdx:gem:bundledWith", value: "true" },
1685
+ { name: "internal:SrcFile", value: lockFiles.join(", ") },
1686
+ ],
1687
+ evidence: {
1688
+ identity: [
1689
+ {
1690
+ field: "purl",
1691
+ confidence: 0.8,
1692
+ methods: [
1693
+ {
1694
+ technique: "manifest-analysis",
1695
+ confidence: 0.8,
1696
+ value: lockFiles.join(", "),
1697
+ },
1698
+ ],
1699
+ },
1700
+ ],
1701
+ },
1702
+ });
1703
+ rootList.push(ref);
1704
+ }
1636
1705
  if (rootList.length) {
1637
1706
  dependencies = mergeDependencies(
1638
1707
  dependencies,
@@ -1737,18 +1806,76 @@ export async function createRubyBom(path, options) {
1737
1806
  pkgList = await enrichGemsFromLocalCache(pkgList, { gemHome });
1738
1807
  // The download URL of a gem from the public registry needs no network call
1739
1808
  pkgList = addRubyGemsDistributionUrls(pkgList);
1740
- // Gems declare the Ruby they run on; surface it as the runtime they depend
1741
- // on. The component says the runtime is external, which only CycloneDX 1.7
1742
- // can express, and a container image ships its own Ruby.
1743
- if (
1744
- options.specVersion >= 1.7 &&
1745
- !hasAnyProjectType(["oci"], options, false)
1746
- ) {
1747
- ({ pkgList, dependencies } = addRubyRuntimeComponent(
1748
- pkgList,
1749
- parentComponent,
1750
- dependencies,
1751
- ));
1809
+ // The project and its gems declare the Ruby they run on; surface it as the
1810
+ // runtime they depend on. A pinned Ruby (Gemfile.lock, .ruby-version,
1811
+ // .tool-versions, mise, the Gemfile) is a version with a CPE, which every
1812
+ // spec version can carry. A bare range needs CycloneDX 1.7's versionRange
1813
+ // and isExternal. A container image ships its own Ruby, which the image
1814
+ // scan reads from the interpreter's files.
1815
+ if (!hasAnyProjectType(["oci"], options, false)) {
1816
+ // Each project of a multi-project scan pins its own Ruby
1817
+ const rootDir = resolve(path);
1818
+ const projectDirs = [rootDir];
1819
+ if (options.multiProject) {
1820
+ for (const f of [...gemLockFiles, ...gemFiles]) {
1821
+ const dir = dirname(resolve(f));
1822
+ if (!projectDirs.includes(dir)) {
1823
+ projectDirs.push(dir);
1824
+ }
1825
+ }
1826
+ }
1827
+ const rubies = [];
1828
+ for (const dir of projectDirs) {
1829
+ const ruby = resolveProjectRuby(collectProjectRubyDeclarations(dir));
1830
+ if (!ruby) {
1831
+ continue;
1832
+ }
1833
+ if (dir !== rootDir && ruby.source) {
1834
+ ruby.source = relative(rootDir, join(dir, ruby.source)).replaceAll(
1835
+ "\\",
1836
+ "/",
1837
+ );
1838
+ }
1839
+ if (ruby.conflicts?.length) {
1840
+ console.log(
1841
+ `NOTE: The project in ${dir} declares more than one Ruby. The BOM records ${ruby.engine} ${ruby.version} from ${ruby.source}; also declared: ${ruby.conflicts.join(", ")}.`,
1842
+ );
1843
+ }
1844
+ rubies.push(ruby);
1845
+ }
1846
+ // One runtime per distinct pinned Ruby; the scanned directory's first
1847
+ const pinned = [];
1848
+ for (const ruby of rubies) {
1849
+ if (
1850
+ ruby.version &&
1851
+ !pinned.some(
1852
+ (other) =>
1853
+ other.engine === ruby.engine && other.version === ruby.version,
1854
+ )
1855
+ ) {
1856
+ pinned.push(ruby);
1857
+ }
1858
+ }
1859
+ const [primary, ...others] = pinned.length ? pinned : rubies.slice(0, 1);
1860
+ if (options.specVersion >= 1.7 || primary?.version) {
1861
+ ({ pkgList, dependencies } = addRubyRuntimeComponent(
1862
+ pkgList,
1863
+ parentComponent,
1864
+ dependencies,
1865
+ primary,
1866
+ ));
1867
+ }
1868
+ // The gems were linked to the first; the others hang off the project
1869
+ for (const ruby of others) {
1870
+ let extra;
1871
+ ({ pkgList: extra, dependencies } = addRubyRuntimeComponent(
1872
+ [],
1873
+ parentComponent,
1874
+ dependencies,
1875
+ ruby,
1876
+ ));
1877
+ pkgList = pkgList.concat(extra);
1878
+ }
1752
1879
  }
1753
1880
  return buildBomNSData(options, pkgList, "gem", {
1754
1881
  src: path,
@@ -2379,9 +2506,13 @@ export async function createCsharpBom(path, options) {
2379
2506
  // Anything else needs only the sections cdxgen reads, so dosai
2380
2507
  // leaves the rest out (Metadata.OmittedSections names it).
2381
2508
  const willRunEvinse = runsEvidenceAnalysis(options);
2382
- // Reuse an existing slice as-is, with one exception: a trimmed file
2509
+ // Reuse an existing slice as-is, with two exceptions. A trimmed file
2383
2510
  // (an earlier --deep run left it behind) is regenerated full before
2384
- // an evidence run uses it, so dosai still runs once per scan.
2511
+ // an evidence run uses it, so dosai still runs once per scan. A slice
2512
+ // older than the sources it describes is regenerated for every run:
2513
+ // it holds the occurrences of the sources as they were when it was
2514
+ // written, so reusing one keeps occurrences of call sites that no
2515
+ // longer exist (issue 4675).
2385
2516
  let reuseExisting = safeExistsSync(slicesFile);
2386
2517
  if (reuseExisting && willRunEvinse) {
2387
2518
  const omitted = dosaiReportFileOmittedSections(slicesFile);
@@ -2394,6 +2525,17 @@ export async function createCsharpBom(path, options) {
2394
2525
  reuseExisting = false;
2395
2526
  }
2396
2527
  }
2528
+ if (
2529
+ reuseExisting &&
2530
+ !dosaiSlicesFileIsFresh(slicesFile, path, options)
2531
+ ) {
2532
+ if (DEBUG_MODE) {
2533
+ console.log(
2534
+ `The existing dosai methods slice "${slicesFile}" is older than the sources it describes; regenerating it.`,
2535
+ );
2536
+ }
2537
+ reuseExisting = false;
2538
+ }
2397
2539
  // Create the slices file if it doesn't exist
2398
2540
  if (!reuseExisting) {
2399
2541
  thoughtLog(
@@ -2425,7 +2567,7 @@ export async function createCsharpBom(path, options) {
2425
2567
  }
2426
2568
  } else if (DEBUG_MODE) {
2427
2569
  console.log(
2428
- `Reusing the existing dosai methods slice "${slicesFile}" without checking whether it honours the current --exclude patterns. Delete the file to force a fresh run.`,
2570
+ `Reusing the existing dosai methods slice "${slicesFile}", which is newer than the sources it describes. The slice is still not checked against the current --exclude patterns; delete the file to force a fresh run.`,
2429
2571
  );
2430
2572
  }
2431
2573
  pkgList = addEvidenceForDotnet(pkgList, slicesFile, {
@@ -45,7 +45,12 @@ import {
45
45
  emptyCppBuildContext,
46
46
  resolveCppBuildContext,
47
47
  } from "../ecosystems/cppBuildContext.js";
48
- import { getCppModules, hasCppSources } from "../ecosystems/cppEvidence.js";
48
+ import {
49
+ getCppModules,
50
+ hasCppSources,
51
+ installedVcpkgPorts,
52
+ parseVcpkgManifest,
53
+ } from "../ecosystems/cppEvidence.js";
49
54
  import {
50
55
  getCratesMetadata,
51
56
  getSwiftPackageMetadata,
@@ -132,6 +137,10 @@ import { resolveZigGraph } from "../ecosystems/zigResolver.js";
132
137
  import { cmakeBuildDirCandidates } from "../inventory/cmakeBuildDirs.js";
133
138
  import { mergeDependencies, trimComponents } from "../inventory/depsUtils.js";
134
139
  import { convertOSQueryResults } from "../inventory/evidenceUtils.js";
140
+ import {
141
+ clojureMirrorArgs,
142
+ leiningenMirrorArgs,
143
+ } from "../inventory/mavenCentralMirror.js";
135
144
  import { applyPurl, nixBomRef, tryBuildPurl } from "../inventory/purl.js";
136
145
  import {
137
146
  classifyProbeResult,
@@ -1420,6 +1429,16 @@ export async function createDartBom(path, options) {
1420
1429
  pkgList = pkgList.concat(retMap.pkgList);
1421
1430
  }
1422
1431
  if (retMap?.rootList?.length) {
1432
+ // A pubspec.lock read without its pubspec.yaml still names the
1433
+ // project's direct dependencies; the project is then named after the
1434
+ // directory that holds the lock file.
1435
+ if (!parentComponent) {
1436
+ parentComponent = createDefaultParentComponent(
1437
+ dirname(f),
1438
+ "generic",
1439
+ options,
1440
+ );
1441
+ }
1423
1442
  const thisParentDependsOn = [
1424
1443
  {
1425
1444
  ref: parentComponent["bom-ref"],
@@ -1806,10 +1825,33 @@ export function createCppBom(path, options) {
1806
1825
  // The need for java >= 21 with atom is causing confusions since there could be C projects
1807
1826
  // inside of other project types. So we currently limit this analyis only when -t argument
1808
1827
  // is used.
1809
- if (
1810
- !hasAnyProjectType(["docker", "oci", "container", "os"], options, false) &&
1811
- (!options.createMultiXBom || options.deep)
1812
- ) {
1828
+ if (!isImageScan && options.createMultiXBom && !options.deep) {
1829
+ // The atom analysis below is skipped in this mode, but a vcpkg manifest is
1830
+ // read without running anything, and its declared ports are as much a
1831
+ // part of the project as CMake's find_package names.
1832
+ const manifest = parseVcpkgManifest(path, {
1833
+ installedPorts: installedVcpkgPorts(path, options),
1834
+ isListed: (name) =>
1835
+ pkgList.some(
1836
+ (p) => !p.group && p.name?.toLowerCase() === `${name}`.toLowerCase(),
1837
+ ),
1838
+ });
1839
+ if (manifest.pkgList.length) {
1840
+ pkgList = pkgList.concat(manifest.pkgList);
1841
+ if (!parentComponent && manifest.parentComponent) {
1842
+ parentComponent = manifest.parentComponent;
1843
+ }
1844
+ if (parentComponent?.["bom-ref"]) {
1845
+ dependencies = mergeDependencies(dependencies, [
1846
+ {
1847
+ ref: parentComponent["bom-ref"],
1848
+ dependsOn: manifest.pkgList.map((p) => p["bom-ref"]),
1849
+ },
1850
+ ]);
1851
+ }
1852
+ }
1853
+ }
1854
+ if (!isImageScan && (!options.createMultiXBom || options.deep)) {
1813
1855
  let osPkgsList = [];
1814
1856
  // Case 1: Development libraries installed in this OS environment might be used for build
1815
1857
  // We collect OS packages with the word dev in the name using osquery here
@@ -1967,6 +2009,10 @@ export function createClojureBom(path, options) {
1967
2009
  if (readEnvironmentVariable("LEIN_ARGS")) {
1968
2010
  LEIN_ARGS = readEnvironmentVariable("LEIN_ARGS").split(" ");
1969
2011
  }
2012
+ const leinProjectContent = safeExistsSync(leinFiles[0])
2013
+ ? readFileSync(leinFiles[0], { encoding: "utf-8" })
2014
+ : undefined;
2015
+ LEIN_ARGS = leiningenMirrorArgs(LEIN_ARGS, leinProjectContent);
1970
2016
  // `lein deps :tree-data` evaluates project.clj, which is a Clojure
1971
2017
  // program, so it belongs to the dependency-tooling surface disabled by
1972
2018
  // --no-install-deps and the pre-build lifecycle.
@@ -2058,6 +2104,7 @@ export function createClojureBom(path, options) {
2058
2104
  if (readEnvironmentVariable("CLJ_ARGS")) {
2059
2105
  CLJ_ARGS = readEnvironmentVariable("CLJ_ARGS").split(" ");
2060
2106
  }
2107
+ CLJ_ARGS = clojureMirrorArgs(CLJ_ARGS);
2061
2108
  for (const f of ednFiles) {
2062
2109
  const basePath = dirname(f);
2063
2110
  console.log("Executing", CLJ_CMD, "in", basePath);