@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
@@ -0,0 +1,367 @@
1
+ // Bounded reader for the .NET shared frameworks installed in a root file
2
+ // system.
3
+ //
4
+ // The .NET Docker images, dotnet-install.sh and the tarballs put the runtime
5
+ // under <dotnet root>/shared/<framework>/<version>/ without a package manager,
6
+ // so a BOM sees only its files. Each framework directory carries a
7
+ // <framework>.deps.json whose runtime target names the runtime pack it was
8
+ // built from, e.g. `Microsoft.NETCore.App.Runtime.linux-arm64/8.0.32`. That pack
9
+ // is a NuGet package, and it is the identity .NET security advisories list, so
10
+ // it becomes the component's purl.
11
+ // https://learn.microsoft.com/dotnet/core/dependency-loading/default-probing#how-are-the-properties-populated
12
+
13
+ import { closeSync, readSync } from "node:fs";
14
+ import { isAbsolute, join } from "node:path";
15
+
16
+ import { globSync } from "glob";
17
+
18
+ import { openRegularFile } from "../core/boundedFile.js";
19
+ import { applyPurl, tryBuildPurl } from "./purl.js";
20
+
21
+ const MAX_DEPS_JSON_BYTES = 8 * 1024 * 1024;
22
+ const MAX_FRAMEWORKS = 64;
23
+ const FRAMEWORKS = new Set([
24
+ "Microsoft.NETCore.App",
25
+ "Microsoft.AspNetCore.App",
26
+ "Microsoft.WindowsDesktop.App",
27
+ ]);
28
+ // Where the .NET images, dotnet-install.sh, the tarballs and the distro
29
+ // packages put the dotnet root.
30
+ const DOTNET_ROOTS = [
31
+ "usr/share/dotnet",
32
+ "usr/lib/dotnet",
33
+ "usr/lib64/dotnet",
34
+ "usr/local/share/dotnet",
35
+ "opt/dotnet",
36
+ "root/.dotnet",
37
+ "home/*/.dotnet",
38
+ ];
39
+ const RUNTIME_PACK_RE =
40
+ /^(Microsoft\.[A-Za-z]+(?:\.[A-Za-z]+)*\.App\.Runtime\.[A-Za-z0-9.-]+)\/(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)$/;
41
+ // The version shape a runtime pack names, anchored for the versions a line of
42
+ // `dotnet --list-runtimes` reports.
43
+ const RUNTIME_VERSION_RE = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/;
44
+ // The pre-release label a CPE can name: `rc` or `preview` with its number,
45
+ // written with or without a dot between the label and the number.
46
+ const PRERELEASE_LABEL_RE = /^(rc|preview)\.?(\d+)(?:[.-]|$)/;
47
+
48
+ function readJsonBounded(absPath, rootDir) {
49
+ const opened = openRegularFile(absPath, rootDir);
50
+ if (!opened) {
51
+ return undefined;
52
+ }
53
+ try {
54
+ if (opened.size <= 0 || opened.size > MAX_DEPS_JSON_BYTES) {
55
+ return undefined;
56
+ }
57
+ const buffer = Buffer.allocUnsafe(opened.size);
58
+ const read = readSync(opened.fd, buffer, 0, opened.size, 0);
59
+ return JSON.parse(buffer.toString("utf8", 0, read));
60
+ } catch {
61
+ return undefined;
62
+ } finally {
63
+ try {
64
+ closeSync(opened.fd);
65
+ } catch {
66
+ // already closed
67
+ }
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Read the runtime pack a shared framework's deps.json was built from.
73
+ *
74
+ * @param {Object} depsJson parsed <framework>.deps.json
75
+ * @param {string} framework framework directory name
76
+ * @returns {{pack: string, version: string, rid: string}|undefined}
77
+ */
78
+ export function runtimePackFromDepsJson(depsJson, framework) {
79
+ const targetName = depsJson?.runtimeTarget?.name;
80
+ if (typeof targetName !== "string") {
81
+ return undefined;
82
+ }
83
+ const target = depsJson?.targets?.[targetName];
84
+ if (!target || typeof target !== "object") {
85
+ return undefined;
86
+ }
87
+ for (const key of Object.keys(target)) {
88
+ const match = RUNTIME_PACK_RE.exec(key);
89
+ if (!match?.[1].startsWith(`${framework}.Runtime.`)) {
90
+ continue;
91
+ }
92
+ return {
93
+ pack: match[1],
94
+ version: match[2],
95
+ rid: match[1].slice(`${framework}.Runtime.`.length),
96
+ };
97
+ }
98
+ return undefined;
99
+ }
100
+
101
+ /**
102
+ * The .NET majors whose previews NVD names `preview.<N>`. NVD names the
103
+ * previews of every other .NET major, of ASP.NET Core and of .NET Core
104
+ * `preview<N>`.
105
+ */
106
+ const DOTTED_PREVIEW_MAJORS = new Set([7, 8, 10]);
107
+
108
+ /**
109
+ * Read the pre-release tag of a runtime version.
110
+ *
111
+ * @param {string} version runtime version
112
+ * @returns {{label: string, number: string}|null|undefined} the `rc` or
113
+ * `preview` tag and its number; undefined for a release; null for a
114
+ * pre-release of any other kind
115
+ */
116
+ function dotnetPrerelease(version) {
117
+ const dashAt = version.indexOf("-");
118
+ if (dashAt < 0) {
119
+ return undefined;
120
+ }
121
+ const tag = PRERELEASE_LABEL_RE.exec(version.slice(dashAt + 1));
122
+ return tag ? { label: tag[1], number: tag[2] } : null;
123
+ }
124
+
125
+ /**
126
+ * The CPE NVD uses for a shared framework version, with the version and update
127
+ * fields spelled the way the NVD CPE dictionary spells them.
128
+ *
129
+ * The product is `.net` from 5.0 on, `.net_core` before it, and `asp.net_core`
130
+ * for ASP.NET Core. NVD names a .NET Core x.y.0 release and its pre-releases
131
+ * with two version parts (`.net_core:3.1`, `.net_core:3.0:preview9`), and the
132
+ * .NET 5.0 pre-releases the same way (`.net:5.0:rc1`); every other version
133
+ * keeps three. A release candidate is `rc<N>`, and a preview is
134
+ * `preview.<N>` for .NET 7, 8 and 10 and `preview<N>` otherwise. A release
135
+ * keeps the `*` update, which is the only one NVD lists for some releases. A
136
+ * pre-release of any other kind names no version NVD has, so it gets no CPE.
137
+ *
138
+ * @param {string} framework framework directory name
139
+ * @param {string} version runtime version
140
+ * @returns {string|undefined} CPE 2.3 string
141
+ */
142
+ export function dotnetCpe(framework, version) {
143
+ const base = /^(\d+)\.(\d+)\.(\d+)/.exec(version || "");
144
+ if (!base) {
145
+ return undefined;
146
+ }
147
+ const major = Number(base[1]);
148
+ let product;
149
+ if (framework === "Microsoft.AspNetCore.App") {
150
+ product = "asp.net_core";
151
+ } else if (framework === "Microsoft.NETCore.App") {
152
+ product = major >= 5 ? ".net" : ".net_core";
153
+ } else {
154
+ return undefined;
155
+ }
156
+ const prerelease = dotnetPrerelease(version);
157
+ if (prerelease === null) {
158
+ return undefined;
159
+ }
160
+ let update = "*";
161
+ if (prerelease?.label === "rc") {
162
+ update = `rc${prerelease.number}`;
163
+ } else if (prerelease) {
164
+ update =
165
+ product === ".net" && DOTTED_PREVIEW_MAJORS.has(major)
166
+ ? `preview.${prerelease.number}`
167
+ : `preview${prerelease.number}`;
168
+ }
169
+ const twoPart =
170
+ base[3] === "0" &&
171
+ (product === ".net_core" ||
172
+ (product === ".net" && major === 5 && prerelease !== undefined));
173
+ const cpeVersion = twoPart ? `${base[1]}.${base[2]}` : base[0];
174
+ return `cpe:2.3:a:microsoft:${product}:${cpeVersion}:${update}:*:*:*:*:*:*`;
175
+ }
176
+
177
+ /**
178
+ * Create the platform component for one installed shared framework.
179
+ *
180
+ * @param {string} framework framework directory name
181
+ * @param {{pack: string, version: string, rid: string}} runtime runtime pack
182
+ * @param {string} [location] root-relative path of the deps.json. A runtime
183
+ * found on the scanning host gets none, since host paths can name the user's
184
+ * home directory.
185
+ * @returns {Object|undefined} component, or undefined when no purl can be built
186
+ */
187
+ export function createDotnetRuntimeComponent(framework, runtime, location) {
188
+ const component = {
189
+ type: "platform",
190
+ name: runtime.pack,
191
+ version: runtime.version,
192
+ properties: [
193
+ { name: "cdx:dotnet:sharedFramework", value: framework },
194
+ { name: "cdx:dotnet:runtimeIdentifier", value: runtime.rid },
195
+ ],
196
+ };
197
+ if (location) {
198
+ component.evidence = {
199
+ occurrences: [{ location: `/${location.replace(/^\/+/, "")}` }],
200
+ };
201
+ }
202
+ const cpe = dotnetCpe(framework, runtime.version);
203
+ if (cpe) {
204
+ component.cpe = cpe;
205
+ }
206
+ const purl = tryBuildPurl({
207
+ type: "nuget",
208
+ name: runtime.pack,
209
+ version: runtime.version,
210
+ });
211
+ if (!purl) {
212
+ return undefined;
213
+ }
214
+ return applyPurl(component, purl);
215
+ }
216
+
217
+ /**
218
+ * Parse the output of `dotnet --list-runtimes`, one `<framework> <version>
219
+ * [<directory>]` line per installed runtime. Warnings, update notices, blank
220
+ * lines, unknown frameworks and versions of a shape no runtime pack names are
221
+ * left out, and no more than MAX_FRAMEWORKS runtimes are kept.
222
+ *
223
+ * https://learn.microsoft.com/dotnet/core/install/how-to-detect-installed-versions
224
+ *
225
+ * @param {string} output output of `dotnet --list-runtimes`
226
+ * @returns {{framework: string, version: string, frameworkDir: string}[]} one
227
+ * entry per installed runtime
228
+ */
229
+ export function parseDotnetListRuntimes(output) {
230
+ const entries = [];
231
+ if (!output) {
232
+ return entries;
233
+ }
234
+ for (const rawLine of `${output}`.split(/\r?\n/)) {
235
+ if (entries.length >= MAX_FRAMEWORKS) {
236
+ break;
237
+ }
238
+ const line = rawLine.trim();
239
+ // The directory is the text between ` [` and the trailing `]`, and can
240
+ // contain spaces, as in `C:\Program Files\dotnet\shared\Microsoft.NETCore.App`.
241
+ const bracketAt = line.indexOf(" [");
242
+ if (bracketAt <= 0 || !line.endsWith("]")) {
243
+ continue;
244
+ }
245
+ const head = line.slice(0, bracketAt);
246
+ const spaceAt = head.indexOf(" ");
247
+ if (spaceAt <= 0) {
248
+ continue;
249
+ }
250
+ const framework = head.slice(0, spaceAt);
251
+ const version = head.slice(spaceAt + 1);
252
+ if (!FRAMEWORKS.has(framework) || !RUNTIME_VERSION_RE.test(version)) {
253
+ continue;
254
+ }
255
+ const frameworkDir = line.slice(bracketAt + 2, line.length - 1);
256
+ entries.push({ framework, version, frameworkDir });
257
+ }
258
+ return entries;
259
+ }
260
+
261
+ /**
262
+ * Create the platform component for one runtime the host install reports.
263
+ *
264
+ * The identity comes from the deps.json in the runtime's own directory, read
265
+ * with the directory as the root so the read cannot leave it and a symlink is
266
+ * not followed. Only an absolute directory is read, which is what the dotnet
267
+ * host prints. A runtime whose deps.json is missing, unreadable or names
268
+ * another version keeps its name, its version and its CPE, without a purl:
269
+ * without the runtime identifier of the pack there is no correct nuget purl.
270
+ *
271
+ * @param {{framework: string, version: string, frameworkDir: string}} entry
272
+ * one entry of parseDotnetListRuntimes
273
+ * @returns {Object} platform component
274
+ */
275
+ export function createHostDotnetRuntimeComponent(entry) {
276
+ const depsJson = isAbsolute(entry.frameworkDir)
277
+ ? readJsonBounded(
278
+ join(entry.frameworkDir, entry.version, `${entry.framework}.deps.json`),
279
+ entry.frameworkDir,
280
+ )
281
+ : undefined;
282
+ const runtime = runtimePackFromDepsJson(depsJson, entry.framework);
283
+ // The directory a runtime lives in is named after its version.
284
+ if (runtime && runtime.version === entry.version) {
285
+ const component = createDotnetRuntimeComponent(entry.framework, runtime);
286
+ if (component) {
287
+ return component;
288
+ }
289
+ }
290
+ const component = {
291
+ type: "platform",
292
+ name: entry.framework,
293
+ version: entry.version,
294
+ properties: [
295
+ { name: "cdx:dotnet:sharedFramework", value: entry.framework },
296
+ ],
297
+ };
298
+ const cpe = dotnetCpe(entry.framework, entry.version);
299
+ if (cpe) {
300
+ component.cpe = cpe;
301
+ }
302
+ return component;
303
+ }
304
+
305
+ /**
306
+ * Find the .NET shared frameworks installed under a root that no package
307
+ * manager owns, and return one platform component per runtime pack.
308
+ *
309
+ * @param {string} rootDir extracted root file system
310
+ * @param {string[]} [ownedPaths] root-relative paths a package database owns
311
+ * @returns {Object[]} platform components
312
+ */
313
+ export function collectDotnetRuntimes(rootDir, ownedPaths = []) {
314
+ if (!rootDir) {
315
+ return [];
316
+ }
317
+ const owned = new Set(
318
+ (ownedPaths || []).map((p) => p.replace(/^\/+/, "").replaceAll("\\", "/")),
319
+ );
320
+ let depsFiles = [];
321
+ try {
322
+ depsFiles = globSync(
323
+ DOTNET_ROOTS.map((root) => `${root}/shared/*/*/*.deps.json`),
324
+ {
325
+ cwd: rootDir,
326
+ absolute: false,
327
+ nodir: true,
328
+ dot: true,
329
+ follow: false,
330
+ },
331
+ )
332
+ .map((file) => file.replaceAll("\\", "/"))
333
+ .sort();
334
+ } catch {
335
+ return [];
336
+ }
337
+ const components = [];
338
+ const seen = new Set();
339
+ for (const file of depsFiles.slice(0, MAX_FRAMEWORKS)) {
340
+ if (owned.has(file)) {
341
+ continue;
342
+ }
343
+ const parts = file.split("/");
344
+ const framework = parts[parts.length - 3];
345
+ if (
346
+ !FRAMEWORKS.has(framework) ||
347
+ parts.at(-1) !== `${framework}.deps.json`
348
+ ) {
349
+ continue;
350
+ }
351
+ const runtime = runtimePackFromDepsJson(
352
+ readJsonBounded(join(rootDir, file), rootDir),
353
+ framework,
354
+ );
355
+ // The directory a runtime lives in is named after its version.
356
+ if (!runtime || runtime.version !== parts[parts.length - 2]) {
357
+ continue;
358
+ }
359
+ const component = createDotnetRuntimeComponent(framework, runtime, file);
360
+ if (!component || seen.has(component["bom-ref"])) {
361
+ continue;
362
+ }
363
+ seen.add(component["bom-ref"]);
364
+ components.push(component);
365
+ }
366
+ return components;
367
+ }