@cdxgen/cdxgen 13.5.0 → 13.6.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 (182) hide show
  1. package/README.md +6 -6
  2. package/bin/cdxgen.js +4 -0
  3. package/bin/evinse.js +3 -0
  4. package/bin/validate.js +6 -0
  5. package/data/license-aliases.json +24 -2
  6. package/data/remediations.json +124 -0
  7. package/data/rules/ai-bom.yaml +1 -1
  8. package/data/rules/brotli-decoder.yaml +107 -0
  9. package/data/rules/vscode-extensions.yaml +75 -0
  10. package/data/spdx-license-list.json +121 -7
  11. package/data/spdx-licenses.json +69 -0
  12. package/data/spdx.schema.json +845 -2
  13. package/lib/cli/bomAssembly.js +92 -3
  14. package/lib/cli/index.js +108 -1
  15. package/lib/cli/jsBom.js +153 -64
  16. package/lib/cli/jvmBom.js +237 -46
  17. package/lib/cli/managedBom.js +142 -16
  18. package/lib/cli/nativeBom.js +42 -5
  19. package/lib/core/boundedFile.js +344 -0
  20. package/lib/core/brotliProbe.js +182 -0
  21. package/lib/core/env.js +8 -0
  22. package/lib/core/fs.js +12 -0
  23. package/lib/core/httpClient.js +98 -1
  24. package/lib/core/lockPaths.js +38 -0
  25. package/lib/core/paths.js +24 -1
  26. package/lib/core/processTree.js +5 -0
  27. package/lib/core/toolRegistry.js +170 -0
  28. package/lib/ecosystems/cppEvidence.js +263 -106
  29. package/lib/ecosystems/cppIncludeResolver.js +16 -5
  30. package/lib/ecosystems/ecosystems.js +25 -10
  31. package/lib/ecosystems/gemHostProbe.js +301 -0
  32. package/lib/ecosystems/gradleutils.js +828 -224
  33. package/lib/ecosystems/parsers-bazel.js +107 -6
  34. package/lib/ecosystems/parsers-js.js +505 -22
  35. package/lib/ecosystems/parsers-misc.js +209 -20
  36. package/lib/ecosystems/parsers-python.js +89 -2
  37. package/lib/ecosystems/pythonutils.js +128 -2
  38. package/lib/ecosystems/rubyutils.js +538 -31
  39. package/lib/ecosystems/scalacliutils.js +2 -0
  40. package/lib/ecosystems/scalasem.js +796 -151
  41. package/lib/ecosystems/vendoredCode.js +237 -3
  42. package/lib/ecosystems/venvProbe.js +360 -0
  43. package/lib/evinser/evinser.js +346 -43
  44. package/lib/helpers/agenticToolutils.js +413 -93
  45. package/lib/helpers/vsixutils.js +1574 -315
  46. package/lib/inventory/atomUtils.js +77 -0
  47. package/lib/inventory/brotliDecoder.js +142 -0
  48. package/lib/inventory/buildToolRateLimit.js +1 -1
  49. package/lib/inventory/cbomutils.js +56 -7
  50. package/lib/inventory/deps.js +35 -0
  51. package/lib/inventory/dosai.js +139 -5
  52. package/lib/inventory/dotnetRuntime.js +217 -0
  53. package/lib/inventory/envcontext.js +307 -13
  54. package/lib/inventory/evidenceUtils.js +11 -0
  55. package/lib/inventory/fetchBatch.js +1 -1
  56. package/lib/inventory/formulationParsers.js +31 -3
  57. package/lib/inventory/gtfobins.js +13 -0
  58. package/lib/inventory/hostRuntimeProbe.js +686 -0
  59. package/lib/inventory/jvmLocalRepos.js +9 -2
  60. package/lib/inventory/jvmToolEnv.js +29 -0
  61. package/lib/inventory/licenseEnhancer.js +12 -0
  62. package/lib/inventory/mavenCentralMirror.js +534 -0
  63. package/lib/inventory/nodeBuildInfo.js +218 -0
  64. package/lib/inventory/nodeHostProbe.js +202 -0
  65. package/lib/inventory/osPackageResolver.js +182 -0
  66. package/lib/inventory/phpBuildInfo.js +10 -59
  67. package/lib/inventory/phpHostProbe.js +32 -488
  68. package/lib/inventory/rubyBuildInfo.js +972 -0
  69. package/lib/inventory/rubyHostProbe.js +218 -0
  70. package/lib/inventory/scalaCoords.js +4 -3
  71. package/lib/inventory/scalaDedupe.js +440 -0
  72. package/lib/inventory/source.js +49 -2
  73. package/lib/managers/binary.js +337 -3
  74. package/lib/managers/docker.js +79 -0
  75. package/lib/parsers/largeJson.js +28 -11
  76. package/lib/parsers/vscodeExtensionId.js +183 -0
  77. package/lib/server/server.js +12 -1
  78. package/lib/stages/postgen/ruleEngine.js +13 -5
  79. package/lib/stages/pregen/envAudit.js +1 -0
  80. package/lib/stages/pregen/pregen.js +114 -57
  81. package/lib/validator/bomValidator.js +6 -1
  82. package/lib/validator/generated/validate-1.6.mjs +1 -1
  83. package/lib/validator/generated/validate-1.7.mjs +1 -1
  84. package/lib/validator/generated/validate-2.0.mjs +1 -1
  85. package/lib/validator/index.js +1 -1
  86. package/package.json +3 -2
  87. package/types/lib/cli/bomAssembly.d.ts +13 -1
  88. package/types/lib/cli/bomAssembly.d.ts.map +1 -1
  89. package/types/lib/cli/index.d.ts.map +1 -1
  90. package/types/lib/cli/jsBom.d.ts +1 -17
  91. package/types/lib/cli/jsBom.d.ts.map +1 -1
  92. package/types/lib/cli/jvmBom.d.ts.map +1 -1
  93. package/types/lib/cli/managedBom.d.ts.map +1 -1
  94. package/types/lib/cli/nativeBom.d.ts.map +1 -1
  95. package/types/lib/core/boundedFile.d.ts +70 -0
  96. package/types/lib/core/boundedFile.d.ts.map +1 -0
  97. package/types/lib/core/brotliProbe.d.ts +37 -0
  98. package/types/lib/core/brotliProbe.d.ts.map +1 -0
  99. package/types/lib/core/env.d.ts +4 -0
  100. package/types/lib/core/env.d.ts.map +1 -1
  101. package/types/lib/core/fs.d.ts.map +1 -1
  102. package/types/lib/core/httpClient.d.ts +24 -0
  103. package/types/lib/core/httpClient.d.ts.map +1 -1
  104. package/types/lib/core/lockPaths.d.ts +19 -0
  105. package/types/lib/core/lockPaths.d.ts.map +1 -0
  106. package/types/lib/core/processTree.d.ts +2 -0
  107. package/types/lib/core/processTree.d.ts.map +1 -1
  108. package/types/lib/core/toolRegistry.d.ts +36 -0
  109. package/types/lib/core/toolRegistry.d.ts.map +1 -0
  110. package/types/lib/ecosystems/cppEvidence.d.ts +40 -13
  111. package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -1
  112. package/types/lib/ecosystems/cppIncludeResolver.d.ts +2 -1
  113. package/types/lib/ecosystems/cppIncludeResolver.d.ts.map +1 -1
  114. package/types/lib/ecosystems/ecosystems.d.ts.map +1 -1
  115. package/types/lib/ecosystems/gemHostProbe.d.ts +28 -0
  116. package/types/lib/ecosystems/gemHostProbe.d.ts.map +1 -0
  117. package/types/lib/ecosystems/gradleutils.d.ts +47 -13
  118. package/types/lib/ecosystems/gradleutils.d.ts.map +1 -1
  119. package/types/lib/ecosystems/parsers-bazel.d.ts.map +1 -1
  120. package/types/lib/ecosystems/parsers-js.d.ts +17 -20
  121. package/types/lib/ecosystems/parsers-js.d.ts.map +1 -1
  122. package/types/lib/ecosystems/parsers-misc.d.ts +19 -0
  123. package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -1
  124. package/types/lib/ecosystems/parsers-python.d.ts +10 -0
  125. package/types/lib/ecosystems/parsers-python.d.ts.map +1 -1
  126. package/types/lib/ecosystems/pythonutils.d.ts +20 -2
  127. package/types/lib/ecosystems/pythonutils.d.ts.map +1 -1
  128. package/types/lib/ecosystems/rubyutils.d.ts +144 -12
  129. package/types/lib/ecosystems/rubyutils.d.ts.map +1 -1
  130. package/types/lib/ecosystems/scalacliutils.d.ts.map +1 -1
  131. package/types/lib/ecosystems/vendoredCode.d.ts +26 -0
  132. package/types/lib/ecosystems/vendoredCode.d.ts.map +1 -1
  133. package/types/lib/ecosystems/venvProbe.d.ts +40 -0
  134. package/types/lib/ecosystems/venvProbe.d.ts.map +1 -0
  135. package/types/lib/evinser/evinser.d.ts +63 -8
  136. package/types/lib/evinser/evinser.d.ts.map +1 -1
  137. package/types/lib/inventory/atomUtils.d.ts +19 -0
  138. package/types/lib/inventory/atomUtils.d.ts.map +1 -1
  139. package/types/lib/inventory/brotliDecoder.d.ts +58 -0
  140. package/types/lib/inventory/brotliDecoder.d.ts.map +1 -0
  141. package/types/lib/inventory/cbomutils.d.ts +17 -0
  142. package/types/lib/inventory/cbomutils.d.ts.map +1 -1
  143. package/types/lib/inventory/deps.d.ts.map +1 -1
  144. package/types/lib/inventory/dosai.d.ts +17 -1
  145. package/types/lib/inventory/dosai.d.ts.map +1 -1
  146. package/types/lib/inventory/dotnetRuntime.d.ts +44 -0
  147. package/types/lib/inventory/dotnetRuntime.d.ts.map +1 -0
  148. package/types/lib/inventory/envcontext.d.ts +52 -6
  149. package/types/lib/inventory/envcontext.d.ts.map +1 -1
  150. package/types/lib/inventory/evidenceUtils.d.ts.map +1 -1
  151. package/types/lib/inventory/formulationParsers.d.ts.map +1 -1
  152. package/types/lib/inventory/gtfobins.d.ts.map +1 -1
  153. package/types/lib/inventory/hostRuntimeProbe.d.ts +44 -0
  154. package/types/lib/inventory/hostRuntimeProbe.d.ts.map +1 -0
  155. package/types/lib/inventory/jvmToolEnv.d.ts +12 -0
  156. package/types/lib/inventory/jvmToolEnv.d.ts.map +1 -1
  157. package/types/lib/inventory/licenseEnhancer.d.ts.map +1 -1
  158. package/types/lib/inventory/mavenCentralMirror.d.ts +170 -0
  159. package/types/lib/inventory/mavenCentralMirror.d.ts.map +1 -0
  160. package/types/lib/inventory/nodeBuildInfo.d.ts +95 -0
  161. package/types/lib/inventory/nodeBuildInfo.d.ts.map +1 -0
  162. package/types/lib/inventory/nodeHostProbe.d.ts +15 -0
  163. package/types/lib/inventory/nodeHostProbe.d.ts.map +1 -0
  164. package/types/lib/inventory/osPackageResolver.d.ts +38 -0
  165. package/types/lib/inventory/osPackageResolver.d.ts.map +1 -1
  166. package/types/lib/inventory/phpBuildInfo.d.ts.map +1 -1
  167. package/types/lib/inventory/phpHostProbe.d.ts.map +1 -1
  168. package/types/lib/inventory/rubyBuildInfo.d.ts +271 -0
  169. package/types/lib/inventory/rubyBuildInfo.d.ts.map +1 -0
  170. package/types/lib/inventory/rubyHostProbe.d.ts +47 -0
  171. package/types/lib/inventory/rubyHostProbe.d.ts.map +1 -0
  172. package/types/lib/inventory/source.d.ts +10 -0
  173. package/types/lib/inventory/source.d.ts.map +1 -1
  174. package/types/lib/managers/binary.d.ts.map +1 -1
  175. package/types/lib/managers/docker.d.ts +12 -0
  176. package/types/lib/managers/docker.d.ts.map +1 -1
  177. package/types/lib/parsers/largeJson.d.ts +4 -3
  178. package/types/lib/parsers/largeJson.d.ts.map +1 -1
  179. package/types/lib/server/server.d.ts.map +1 -1
  180. package/types/lib/stages/pregen/envAudit.d.ts.map +1 -1
  181. package/types/lib/stages/pregen/pregen.d.ts +12 -8
  182. package/types/lib/stages/pregen/pregen.d.ts.map +1 -1
@@ -79,12 +79,62 @@ export function parseModuleBazel(moduleFile) {
79
79
  });
80
80
  }
81
81
 
82
+ // Overrides replace where a bazel_dep comes from, and Bazel then ignores
83
+ // the version the bazel_dep names.
84
+ // https://bazel.build/external/module#overrides
85
+ const overrides = new Map();
86
+ for (const kind of [
87
+ "local_path_override",
88
+ "git_override",
89
+ "archive_override",
90
+ "single_version_override",
91
+ ]) {
92
+ for (const call of findAllCalls(src, kind)) {
93
+ const moduleName = scalarArg(call, "module_name");
94
+ if (moduleName && !overrides.has(moduleName)) {
95
+ overrides.set(moduleName, {
96
+ kind,
97
+ version: scalarArg(call, "version"),
98
+ remote: scalarArg(call, "remote"),
99
+ revision:
100
+ scalarArg(call, "commit") ||
101
+ scalarArg(call, "tag") ||
102
+ scalarArg(call, "branch"),
103
+ url: scalarArg(call, "urls") || scalarArg(call, "url"),
104
+ });
105
+ }
106
+ }
107
+ }
108
+
82
109
  for (const call of findAllCalls(src, "bazel_dep")) {
83
110
  const name = scalarArg(call, "name");
84
- const version = scalarArg(call, "version");
111
+ let version = scalarArg(call, "version");
85
112
  const repoName = scalarArg(call, "repo_name");
86
113
  if (!name || !version) continue;
87
- pkgList.push(buildBcrPackage(repoName || name, name, version, moduleFile));
114
+ const override = overrides.get(name);
115
+ // A module taken from a local directory is the project's own tree, not a
116
+ // BCR release, and the version it declares is not what gets built.
117
+ if (override?.kind === "local_path_override") continue;
118
+ if (override?.kind === "single_version_override" && override.version) {
119
+ version = override.version;
120
+ }
121
+ // A git or archive override fetches the module from elsewhere, so it is
122
+ // no BCR release: the purl names where it comes from instead of the BCR.
123
+ const source = overrideSource(override);
124
+ const pkg = buildBcrPackage(
125
+ repoName || name,
126
+ name,
127
+ source ? null : version,
128
+ moduleFile,
129
+ source,
130
+ );
131
+ if (override && override.kind !== "single_version_override") {
132
+ pkg.properties.push({
133
+ name: "cdx:bazel:override",
134
+ value: override.kind.replace(/_override$/, ""),
135
+ });
136
+ }
137
+ pkgList.push(pkg);
88
138
  }
89
139
 
90
140
  for (const call of findAllCalls(src, "maven.artifact")) {
@@ -425,6 +475,37 @@ function buildEcosystemPackage(coords, context) {
425
475
  return pkg;
426
476
  }
427
477
 
478
+ /**
479
+ * Where a git_override or archive_override takes a module from, as purl
480
+ * qualifiers and an external reference.
481
+ *
482
+ * @param {Object|undefined} override override recorded for the module
483
+ * @returns {{qualifiers: Object, externalReferences: Object[]}|undefined}
484
+ * undefined for no override, or one that keeps the module a BCR release
485
+ */
486
+ function overrideSource(override) {
487
+ if (override?.kind === "git_override") {
488
+ if (!override.remote) {
489
+ return { qualifiers: {}, externalReferences: [] };
490
+ }
491
+ const vcsUrl = `git+${override.remote}${override.revision ? `@${override.revision}` : ""}`;
492
+ return {
493
+ qualifiers: { vcs_url: vcsUrl },
494
+ externalReferences: [{ type: "vcs", url: override.remote }],
495
+ };
496
+ }
497
+ if (override?.kind === "archive_override") {
498
+ if (!override.url) {
499
+ return { qualifiers: {}, externalReferences: [] };
500
+ }
501
+ return {
502
+ qualifiers: { download_url: override.url },
503
+ externalReferences: [{ type: "distribution", url: override.url }],
504
+ };
505
+ }
506
+ return undefined;
507
+ }
508
+
428
509
  /**
429
510
  * Build a component record for a BCR (Bazel Central Registry) module.
430
511
  *
@@ -435,26 +516,46 @@ function buildEcosystemPackage(coords, context) {
435
516
  * @param {string} moduleName Canonical module name
436
517
  * @param {string} version Resolved version
437
518
  * @param {string} srcFile Source file for evidence
519
+ * @param {{qualifiers: Object, externalReferences: Object[]}} [source] where
520
+ * an override takes the module from, in place of the BCR
438
521
  * @returns {object} Package record
439
522
  */
440
- function buildBcrPackage(displayRepoName, moduleName, version, srcFile) {
523
+ function buildBcrPackage(
524
+ displayRepoName,
525
+ moduleName,
526
+ version,
527
+ srcFile,
528
+ source,
529
+ ) {
441
530
  const purl = tryBuildPurl({
442
531
  type: "bazel",
443
532
  name: moduleName,
444
533
  version,
445
- qualifiers: { repository_url: BCR_DEFAULT_REPOSITORY_URL },
534
+ qualifiers: source
535
+ ? source.qualifiers
536
+ : { repository_url: BCR_DEFAULT_REPOSITORY_URL },
446
537
  });
447
538
  return {
448
539
  name: moduleName,
449
- version,
540
+ ...(version ? { version } : {}),
450
541
  type: "library",
451
542
  scope: "required",
452
543
  purl,
453
544
  "bom-ref": decodeURIComponent(purl),
545
+ ...(source?.externalReferences.length
546
+ ? { externalReferences: source.externalReferences }
547
+ : {}),
454
548
  properties: [
455
549
  { name: "internal:SrcFile", value: srcFile },
456
550
  { name: "cdx:bazel:module", value: moduleName },
457
- { name: "cdx:bazel:repository_url", value: BCR_DEFAULT_REPOSITORY_URL },
551
+ ...(source
552
+ ? []
553
+ : [
554
+ {
555
+ name: "cdx:bazel:repository_url",
556
+ value: BCR_DEFAULT_REPOSITORY_URL,
557
+ },
558
+ ]),
458
559
  ...(displayRepoName !== moduleName
459
560
  ? [{ name: "cdx:bazel:repo_name", value: displayRepoName }]
460
561
  : []),