@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,1069 @@
1
+ import { readdirSync, readFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { basename, join, resolve } from "node:path";
4
+
5
+ import { build, Purl } from "@cdxgen/cdx-purl";
6
+ import StreamZip from "node-stream-zip";
7
+
8
+ import { DEBUG_MODE, readEnvironmentVariable } from "../core/activity.js";
9
+ import {
10
+ getTmpDir,
11
+ safeExistsSync,
12
+ safeExtractArchive,
13
+ safeMkdtempSync,
14
+ safeRmSync,
15
+ } from "../core/fs.js";
16
+ import { isMac, isWin } from "../core/paths.js";
17
+ import { xml2js } from "../parsers/xml.js";
18
+ import { toVersRange } from "./versutils.js";
19
+
20
+ /**
21
+ * The purl type for VS Code extensions as defined by the packageurl spec.
22
+ */
23
+ export const VSCODE_EXTENSION_PURL_TYPE = "vscode-extension";
24
+
25
+ /**
26
+ * Confidence value for extension metadata discovered via manifest analysis.
27
+ */
28
+ const MANIFEST_ANALYSIS_CONFIDENCE = 0.6;
29
+
30
+ /**
31
+ * IDE configuration entries describing where each IDE stores its extensions.
32
+ * Each entry contains the IDE name and an array of candidate extension
33
+ * directory paths for Windows, macOS, and Linux (including remote/server
34
+ * environments).
35
+ *
36
+ * The paths use platform-specific logic via `homedir()` and common
37
+ * environment variables.
38
+ */
39
+ export function getIdeExtensionDirs() {
40
+ const home = homedir();
41
+ const appData =
42
+ readEnvironmentVariable("APPDATA") || join(home, "AppData", "Roaming");
43
+ const localAppData =
44
+ readEnvironmentVariable("LOCALAPPDATA") || join(home, "AppData", "Local");
45
+ const xdgDataHome =
46
+ readEnvironmentVariable("XDG_DATA_HOME") || join(home, ".local", "share");
47
+
48
+ // Each entry: { name, dirs: string[] }
49
+ // Only include directories that are relevant for the current platform,
50
+ // plus well-known remote/server paths that are always Linux.
51
+ const ides = [
52
+ {
53
+ name: "VS Code",
54
+ dirs: isWin
55
+ ? [join(appData, "Code", "User", "extensions")]
56
+ : isMac
57
+ ? [
58
+ join(
59
+ home,
60
+ "Library",
61
+ "Application Support",
62
+ "Code",
63
+ "User",
64
+ "extensions",
65
+ ),
66
+ ]
67
+ : [join(home, ".vscode", "extensions")],
68
+ },
69
+ {
70
+ name: "VS Code Insiders",
71
+ dirs: isWin
72
+ ? [join(appData, "Code - Insiders", "User", "extensions")]
73
+ : isMac
74
+ ? [
75
+ join(
76
+ home,
77
+ "Library",
78
+ "Application Support",
79
+ "Code - Insiders",
80
+ "User",
81
+ "extensions",
82
+ ),
83
+ ]
84
+ : [join(home, ".vscode-insiders", "extensions")],
85
+ },
86
+ {
87
+ name: "VSCodium",
88
+ dirs: isWin
89
+ ? [join(appData, "VSCodium", "User", "extensions")]
90
+ : isMac
91
+ ? [
92
+ join(
93
+ home,
94
+ "Library",
95
+ "Application Support",
96
+ "VSCodium",
97
+ "User",
98
+ "extensions",
99
+ ),
100
+ ]
101
+ : [
102
+ join(home, ".vscode-oss", "extensions"),
103
+ join(home, ".config", "VSCodium", "User", "extensions"),
104
+ ],
105
+ },
106
+ {
107
+ name: "Cursor",
108
+ dirs: isWin
109
+ ? [
110
+ join(appData, "Cursor", "User", "extensions"),
111
+ join(localAppData, "cursor", "extensions"),
112
+ ]
113
+ : isMac
114
+ ? [
115
+ join(
116
+ home,
117
+ "Library",
118
+ "Application Support",
119
+ "Cursor",
120
+ "User",
121
+ "extensions",
122
+ ),
123
+ ]
124
+ : [join(home, ".cursor", "extensions")],
125
+ },
126
+ {
127
+ name: "Windsurf",
128
+ dirs: isWin
129
+ ? [join(appData, "Windsurf", "User", "extensions")]
130
+ : isMac
131
+ ? [
132
+ join(
133
+ home,
134
+ "Library",
135
+ "Application Support",
136
+ "Windsurf",
137
+ "User",
138
+ "extensions",
139
+ ),
140
+ ]
141
+ : [join(home, ".windsurf", "extensions")],
142
+ },
143
+ {
144
+ name: "Positron",
145
+ dirs: isWin
146
+ ? [join(appData, "Positron", "User", "extensions")]
147
+ : isMac
148
+ ? [
149
+ join(
150
+ home,
151
+ "Library",
152
+ "Application Support",
153
+ "Positron",
154
+ "User",
155
+ "extensions",
156
+ ),
157
+ ]
158
+ : [join(home, ".positron", "extensions")],
159
+ },
160
+ {
161
+ name: "Theia",
162
+ dirs: isWin
163
+ ? [join(appData, "Theia", "extensions")]
164
+ : isMac
165
+ ? [
166
+ join(
167
+ home,
168
+ "Library",
169
+ "Application Support",
170
+ "Theia",
171
+ "extensions",
172
+ ),
173
+ ]
174
+ : [
175
+ join(home, ".theia", "extensions"),
176
+ join(xdgDataHome, "theia", "extensions"),
177
+ ],
178
+ },
179
+ // Remote / server environments (Linux only)
180
+ {
181
+ name: "code-server",
182
+ dirs: [join(xdgDataHome, "code-server", "extensions")],
183
+ },
184
+ {
185
+ name: "VS Code Remote",
186
+ dirs: [join(home, ".vscode-remote", "extensions")],
187
+ },
188
+ {
189
+ name: "OpenVSCode Server",
190
+ dirs: [join(xdgDataHome, "openvscode-server", "extensions")],
191
+ },
192
+ {
193
+ name: "Trae",
194
+ dirs: isWin
195
+ ? [join(appData, "Trae", "User", "extensions")]
196
+ : isMac
197
+ ? [
198
+ join(
199
+ home,
200
+ "Library",
201
+ "Application Support",
202
+ "Trae",
203
+ "User",
204
+ "extensions",
205
+ ),
206
+ ]
207
+ : [join(home, ".trae", "extensions")],
208
+ },
209
+ {
210
+ name: "Augment Code",
211
+ dirs: isWin
212
+ ? [join(appData, "Augment Code", "User", "extensions")]
213
+ : isMac
214
+ ? [
215
+ join(
216
+ home,
217
+ "Library",
218
+ "Application Support",
219
+ "Augment Code",
220
+ "User",
221
+ "extensions",
222
+ ),
223
+ ]
224
+ : [join(home, ".augment-code", "extensions")],
225
+ },
226
+ ];
227
+
228
+ return ides;
229
+ }
230
+
231
+ /**
232
+ * Discover all existing IDE extension directories on the current system.
233
+ *
234
+ * @returns {Array<{name: string, dir: string}>} Array of objects with IDE name
235
+ * and the existing directory path.
236
+ */
237
+ export function discoverIdeExtensionDirs() {
238
+ const ides = getIdeExtensionDirs();
239
+ const found = [];
240
+ for (const ide of ides) {
241
+ for (const dir of ide.dirs) {
242
+ if (safeExistsSync(dir)) {
243
+ found.push({ name: ide.name, dir });
244
+ }
245
+ }
246
+ }
247
+ return found;
248
+ }
249
+
250
+ /**
251
+ * Parse a `.vsixmanifest` XML string and extract extension metadata.
252
+ *
253
+ * @param {string} manifestData Raw XML content of a `.vsixmanifest` file
254
+ * @returns {Object|undefined} Object with { publisher, name, version, displayName, description, platform, tags } or undefined on failure
255
+ */
256
+ export function parseVsixManifest(manifestData) {
257
+ if (!manifestData?.trim()) {
258
+ return undefined;
259
+ }
260
+ try {
261
+ const parsed = xml2js(manifestData, {
262
+ compact: true,
263
+ alwaysArray: false,
264
+ spaces: 4,
265
+ textKey: "_",
266
+ attributesKey: "$",
267
+ });
268
+ const manifest =
269
+ parsed.PackageManifest || parsed["PackageManifest:PackageManifest"];
270
+ if (!manifest) {
271
+ return undefined;
272
+ }
273
+ const metadata = manifest.Metadata || manifest["PackageManifest:Metadata"];
274
+ if (!metadata) {
275
+ return undefined;
276
+ }
277
+ const identity = metadata.Identity || metadata["PackageManifest:Identity"];
278
+ if (!identity?.$) {
279
+ return undefined;
280
+ }
281
+ const attrs = identity.$;
282
+ const publisher =
283
+ attrs.Publisher || attrs.publisher || attrs["d:Publisher"] || "";
284
+ const name = attrs.Id || attrs.id || attrs["d:Id"] || "";
285
+ const version = attrs.Version || attrs.version || attrs["d:Version"] || "";
286
+ const targetPlatform =
287
+ attrs.TargetPlatform ||
288
+ attrs.targetPlatform ||
289
+ attrs["d:TargetPlatform"] ||
290
+ "";
291
+ const tags = metadata?.Tags?._?.split(",").map((s) => s.trim());
292
+ const displayNameNode =
293
+ metadata.DisplayName || metadata["PackageManifest:DisplayName"];
294
+ const descriptionNode =
295
+ metadata.Description || metadata["PackageManifest:Description"];
296
+ const displayName = displayNameNode?._ || displayNameNode || "";
297
+ const description = descriptionNode?._ || descriptionNode || "";
298
+
299
+ // Parse Properties tag for additional metadata
300
+ const properties = {};
301
+ const propsNode = metadata?.Properties;
302
+ if (propsNode?.Property) {
303
+ const propEntries = Array.isArray(propsNode.Property)
304
+ ? propsNode.Property
305
+ : [propsNode.Property];
306
+ for (const prop of propEntries) {
307
+ const propId = prop?.$?.Id || "";
308
+ const propValue = prop?.$?.Value || "";
309
+ if (propId && propValue) {
310
+ properties[propId] = propValue;
311
+ }
312
+ }
313
+ }
314
+
315
+ const result = {
316
+ publisher: publisher,
317
+ name: name,
318
+ version,
319
+ displayName: typeof displayName === "string" ? displayName : "",
320
+ description: typeof description === "string" ? description : "",
321
+ platform: targetPlatform || "",
322
+ tags,
323
+ };
324
+
325
+ // Map well-known VSIX properties to structured fields
326
+ if (properties["Microsoft.VisualStudio.Code.Engine"]) {
327
+ result.vscodeEngine = properties["Microsoft.VisualStudio.Code.Engine"];
328
+ }
329
+ if (properties["Microsoft.VisualStudio.Code.ExtensionDependencies"]) {
330
+ const deps =
331
+ properties["Microsoft.VisualStudio.Code.ExtensionDependencies"];
332
+ if (deps) {
333
+ result.extensionDependencies = deps.split(",").map((s) => s.trim());
334
+ }
335
+ }
336
+ if (properties["Microsoft.VisualStudio.Code.ExtensionPack"]) {
337
+ const pack = properties["Microsoft.VisualStudio.Code.ExtensionPack"];
338
+ if (pack) {
339
+ result.extensionPack = pack.split(",").map((s) => s.trim());
340
+ }
341
+ }
342
+ if (properties["Microsoft.VisualStudio.Code.ExtensionKind"]) {
343
+ const kind = properties["Microsoft.VisualStudio.Code.ExtensionKind"];
344
+ if (kind) {
345
+ result.extensionKind = kind.split(",").map((s) => s.trim());
346
+ }
347
+ }
348
+ if (properties["Microsoft.VisualStudio.Code.ExecutesCode"]) {
349
+ result.executesCode =
350
+ properties["Microsoft.VisualStudio.Code.ExecutesCode"] === "true";
351
+ }
352
+ // Collect links from properties
353
+ const links = {};
354
+ for (const [id, value] of Object.entries(properties)) {
355
+ if (id.startsWith("Microsoft.VisualStudio.Services.Links.") && value) {
356
+ const linkType = id.replace(
357
+ "Microsoft.VisualStudio.Services.Links.",
358
+ "",
359
+ );
360
+ links[linkType] = value;
361
+ }
362
+ }
363
+ if (Object.keys(links).length) {
364
+ result.links = links;
365
+ }
366
+
367
+ return result;
368
+ } catch (e) {
369
+ if (DEBUG_MODE) {
370
+ console.log("Error parsing vsixmanifest:", e.message);
371
+ }
372
+ return undefined;
373
+ }
374
+ }
375
+
376
+ /**
377
+ * Parse npm-style dependency maps from a VS Code extension's package.json
378
+ * and create CycloneDX component objects with versionRange attributes.
379
+ *
380
+ * @param {Object} pkg Parsed package.json object
381
+ * @param {string} extensionPurl The purl of the parent extension (for dependency tree)
382
+ * @returns {{ components: Object[], dependencies: Object[] }} CycloneDX components and dependency tree
383
+ */
384
+ export function parseExtensionDependencies(pkg, extensionPurl) {
385
+ const components = [];
386
+ const dependsOn = [];
387
+ const seen = new Set();
388
+
389
+ const depGroups = [
390
+ { key: "dependencies", scope: "required" },
391
+ { key: "devDependencies", scope: "optional" },
392
+ { key: "peerDependencies", scope: "optional" },
393
+ { key: "optionalDependencies", scope: "optional" },
394
+ ];
395
+
396
+ for (const { key, scope } of depGroups) {
397
+ const deps = pkg[key];
398
+ if (!deps || typeof deps !== "object") {
399
+ continue;
400
+ }
401
+ for (const [depName, depVersion] of Object.entries(deps)) {
402
+ if (!depName || typeof depVersion !== "string") {
403
+ continue;
404
+ }
405
+ // Parse scoped npm package names
406
+ let group = "";
407
+ let name = depName;
408
+ if (depName.startsWith("@") && depName.includes("/")) {
409
+ const parts = depName.split("/");
410
+ group = parts[0];
411
+ name = parts.slice(1).join("/");
412
+ }
413
+ const purlObj = new Purl({
414
+ type: "npm",
415
+ namespace: group || null || null,
416
+ name: name,
417
+ });
418
+ const purlString = purlObj.toString();
419
+ if (seen.has(purlString)) {
420
+ continue;
421
+ }
422
+ seen.add(purlString);
423
+ const versRange = toVersRange(depVersion);
424
+ const component = {
425
+ group,
426
+ name,
427
+ purl: purlString,
428
+ "bom-ref": decodeURIComponent(purlString),
429
+ type: "library",
430
+ scope,
431
+ };
432
+ if (versRange) {
433
+ component.versionRange = versRange;
434
+ }
435
+ components.push(component);
436
+ dependsOn.push(decodeURIComponent(purlString));
437
+ }
438
+ }
439
+
440
+ const dependencies = [];
441
+ if (extensionPurl && dependsOn.length) {
442
+ dependencies.push({
443
+ ref: decodeURIComponent(extensionPurl),
444
+ dependsOn: dependsOn.sort(),
445
+ });
446
+ }
447
+
448
+ return { components, dependencies };
449
+ }
450
+
451
+ /**
452
+ * Parse a VS Code extension's `package.json` and extract metadata
453
+ * including deep capability and permission information.
454
+ *
455
+ * @param {string|Object} packageJsonData Either raw JSON string or parsed object
456
+ * @param {string} [srcPath] Optional path to the source directory for evidence
457
+ * @returns {Object|undefined} Object with metadata and capabilities or undefined
458
+ */
459
+ export function parseVsixPackageJson(packageJsonData, srcPath) {
460
+ try {
461
+ const pkg =
462
+ typeof packageJsonData === "string"
463
+ ? JSON.parse(packageJsonData)
464
+ : packageJsonData;
465
+ if (!pkg?.name) {
466
+ return undefined;
467
+ }
468
+ const externalReferences = [];
469
+ if (pkg.repository?.url) {
470
+ externalReferences.push({ type: "vcs", url: pkg.repository.url });
471
+ }
472
+ return {
473
+ publisher: pkg.publisher || "",
474
+ name: pkg.name || "",
475
+ version: pkg.version || "",
476
+ displayName: pkg.displayName || "",
477
+ description: pkg.description || "",
478
+ platform: "",
479
+ srcPath,
480
+ externalReferences: externalReferences.length
481
+ ? externalReferences
482
+ : undefined,
483
+ capabilities: extractExtensionCapabilities(pkg),
484
+ dependencies: pkg.dependencies,
485
+ devDependencies: pkg.devDependencies,
486
+ peerDependencies: pkg.peerDependencies,
487
+ optionalDependencies: pkg.optionalDependencies,
488
+ };
489
+ } catch (e) {
490
+ if (DEBUG_MODE) {
491
+ console.log("Error parsing extension package.json:", e.message);
492
+ }
493
+ return undefined;
494
+ }
495
+ }
496
+
497
+ /**
498
+ * Extract deep capability and permission information from a VS Code
499
+ * extension package.json.
500
+ *
501
+ * This captures security-relevant metadata such as:
502
+ * - activationEvents: when the extension activates (e.g., `*` means always)
503
+ * - extensionKind: where the extension runs (ui, workspace, or both)
504
+ * - permissions: workspace trust, virtual workspace support
505
+ * - contributes: commands, debuggers, terminal profiles, task providers, fs providers
506
+ * - extensionDependencies/extensionPack: required extensions
507
+ * - scripts: whether postinstall or other lifecycle scripts exist
508
+ * - main/browser: entry points for analysis
509
+ *
510
+ * @param {Object} pkg Parsed package.json object
511
+ * @returns {Object} Capabilities object with structured metadata
512
+ */
513
+ export function extractExtensionCapabilities(pkg) {
514
+ if (!pkg) {
515
+ return {};
516
+ }
517
+ const capabilities = {};
518
+
519
+ // Activation events - security relevant: "*" means the extension activates for every workspace
520
+ if (pkg.activationEvents?.length) {
521
+ capabilities.activationEvents = pkg.activationEvents;
522
+ }
523
+
524
+ // Extension kind - where the extension runs (ui=local, workspace=remote, both)
525
+ if (pkg.extensionKind?.length) {
526
+ capabilities.extensionKind = pkg.extensionKind;
527
+ }
528
+
529
+ // Extension dependencies - other extensions this requires
530
+ if (pkg.extensionDependencies?.length) {
531
+ capabilities.extensionDependencies = pkg.extensionDependencies;
532
+ }
533
+
534
+ // Extension pack - bundled extensions
535
+ if (pkg.extensionPack?.length) {
536
+ capabilities.extensionPack = pkg.extensionPack;
537
+ }
538
+
539
+ // Workspace trust configuration
540
+ if (pkg.capabilities?.untrustedWorkspaces) {
541
+ capabilities.untrustedWorkspaces = pkg.capabilities.untrustedWorkspaces;
542
+ }
543
+ if (pkg.capabilities?.virtualWorkspaces) {
544
+ capabilities.virtualWorkspaces = pkg.capabilities.virtualWorkspaces;
545
+ }
546
+
547
+ // Contributed features
548
+ const contributes = pkg.contributes || {};
549
+ const contributedFeatures = [];
550
+ for (const feature of [
551
+ "authentication",
552
+ "breakpoints",
553
+ "commands",
554
+ "chatInstructions",
555
+ "chatPromptFiles",
556
+ "customEditors",
557
+ "configuration",
558
+ "debuggers",
559
+ "taskDefinitions",
560
+ "terminal",
561
+ "views",
562
+ ]) {
563
+ if (contributes[feature]?.length) {
564
+ contributedFeatures.push(
565
+ `${feature}:count:${contributes[feature].length}`,
566
+ );
567
+ }
568
+ }
569
+ if (contributes.terminal?.length || contributes.taskDefinitions?.length) {
570
+ contributedFeatures.push("terminal-access");
571
+ }
572
+ if (contributes["terminal.profiles"]?.length) {
573
+ contributedFeatures.push("terminal-profiles");
574
+ }
575
+ if (
576
+ contributes.typescriptServerPlugins?.length ||
577
+ contributes.jsonValidation?.length
578
+ ) {
579
+ contributedFeatures.push("language-server-plugins");
580
+ }
581
+ if (
582
+ contributes["resourceLabelFormatters"]?.length ||
583
+ contributes["fileSystemProviders"]?.length
584
+ ) {
585
+ contributedFeatures.push("filesystem-provider");
586
+ }
587
+ if (contributes.authentication?.length) {
588
+ contributedFeatures.push("authentication-provider");
589
+ }
590
+ if (contributes.walkthroughs?.length) {
591
+ contributedFeatures.push("walkthroughs");
592
+ }
593
+ if (contributedFeatures.length) {
594
+ capabilities.contributes = contributedFeatures;
595
+ }
596
+ if (pkg.main) {
597
+ capabilities.main = pkg.main;
598
+ }
599
+ if (pkg.browser) {
600
+ capabilities.browser = pkg.browser;
601
+ }
602
+ const scripts = pkg.scripts || {};
603
+ const lifecycleScripts = [];
604
+ for (const scriptName of [
605
+ "postinstall",
606
+ "preinstall",
607
+ "install",
608
+ "prepare",
609
+ "prepublish",
610
+ "vscode:prepublish",
611
+ "vscode:uninstall",
612
+ ]) {
613
+ if (scripts[scriptName]) {
614
+ lifecycleScripts.push(scriptName);
615
+ }
616
+ }
617
+ if (lifecycleScripts.length) {
618
+ capabilities.lifecycleScripts = lifecycleScripts;
619
+ }
620
+
621
+ return capabilities;
622
+ }
623
+
624
+ /**
625
+ * Convert parsed extension metadata into a CycloneDX component object.
626
+ *
627
+ * @param {Object} extInfo Object with { publisher, name, version, displayName, description, platform, srcPath, capabilities }
628
+ * @param {string} [ideName] Optional IDE name for properties
629
+ * @returns {Object|undefined} CycloneDX component object or undefined
630
+ */
631
+ export function toComponent(extInfo, ideName) {
632
+ if (!extInfo?.name) {
633
+ return undefined;
634
+ }
635
+ const qualifiers = {};
636
+ if (extInfo.platform) {
637
+ qualifiers.platform = extInfo.platform;
638
+ }
639
+ let purl;
640
+ try {
641
+ purl = build({
642
+ type: VSCODE_EXTENSION_PURL_TYPE,
643
+ namespace: extInfo.publisher || null,
644
+ name: extInfo.name,
645
+ version: extInfo.version || null,
646
+ qualifiers: Object.keys(qualifiers).length ? qualifiers : null,
647
+ });
648
+ } catch {
649
+ purl = null;
650
+ }
651
+ const component = {
652
+ publisher: extInfo.publisher || "",
653
+ group: extInfo.publisher || "",
654
+ name: extInfo.name,
655
+ version: extInfo.version || "",
656
+ description: extInfo.displayName || extInfo.description || "",
657
+ purl,
658
+ "bom-ref": purl ? decodeURIComponent(purl) : extInfo.name,
659
+ type: "application",
660
+ };
661
+ if (extInfo.description && extInfo.description !== component.description) {
662
+ component.description = extInfo.description;
663
+ }
664
+ const props = [];
665
+ if (ideName) {
666
+ props.push({ name: "cdx:vscode-extension:ide", value: ideName });
667
+ }
668
+ if (extInfo.srcPath) {
669
+ props.push({ name: "internal:SrcFile", value: extInfo.srcPath });
670
+ }
671
+ // Add capability properties from deep extension analysis
672
+ const caps = extInfo.capabilities || {};
673
+ if (caps.activationEvents?.length) {
674
+ props.push({
675
+ name: "cdx:vscode-extension:activationEvents",
676
+ value: caps.activationEvents.join(", "),
677
+ });
678
+ }
679
+ // extensionKind can come from capabilities (package.json) or directly from manifest Properties
680
+ const extensionKind = caps.extensionKind || extInfo.extensionKind;
681
+ if (extensionKind?.length) {
682
+ props.push({
683
+ name: "cdx:vscode-extension:extensionKind",
684
+ value: extensionKind.join(", "),
685
+ });
686
+ }
687
+ // extensionDependencies can come from capabilities or manifest Properties
688
+ const extensionDeps =
689
+ caps.extensionDependencies || extInfo.extensionDependencies;
690
+ if (extensionDeps?.length) {
691
+ props.push({
692
+ name: "cdx:vscode-extension:extensionDependencies",
693
+ value: extensionDeps.join(", "),
694
+ });
695
+ }
696
+ // extensionPack can come from capabilities or manifest Properties
697
+ const extensionPack = caps.extensionPack || extInfo.extensionPack;
698
+ if (extensionPack?.length) {
699
+ props.push({
700
+ name: "cdx:vscode-extension:extensionPack",
701
+ value: extensionPack.join(", "),
702
+ });
703
+ }
704
+ if (caps.untrustedWorkspaces !== undefined) {
705
+ const uws = caps.untrustedWorkspaces;
706
+ props.push({
707
+ name: "cdx:vscode-extension:untrustedWorkspaces",
708
+ value:
709
+ typeof uws === "object" && uws.supported !== undefined
710
+ ? String(uws.supported)
711
+ : String(uws),
712
+ });
713
+ }
714
+ if (caps.virtualWorkspaces !== undefined) {
715
+ const vws = caps.virtualWorkspaces;
716
+ props.push({
717
+ name: "cdx:vscode-extension:virtualWorkspaces",
718
+ value:
719
+ typeof vws === "object" && vws.supported !== undefined
720
+ ? String(vws.supported)
721
+ : String(vws),
722
+ });
723
+ }
724
+ if (caps.contributes?.length) {
725
+ props.push({
726
+ name: "cdx:vscode-extension:contributes",
727
+ value: caps.contributes.join(", "),
728
+ });
729
+ }
730
+ if (caps.main) {
731
+ props.push({ name: "cdx:vscode-extension:main", value: caps.main });
732
+ }
733
+ if (caps.browser) {
734
+ props.push({ name: "cdx:vscode-extension:browser", value: caps.browser });
735
+ }
736
+ if (caps.lifecycleScripts?.length) {
737
+ props.push({
738
+ name: "cdx:vscode-extension:lifecycleScripts",
739
+ value: caps.lifecycleScripts.join(", "),
740
+ });
741
+ }
742
+ // Properties from vsixmanifest Properties tag
743
+ if (extInfo.executesCode !== undefined) {
744
+ props.push({
745
+ name: "cdx:vscode-extension:executesCode",
746
+ value: String(extInfo.executesCode),
747
+ });
748
+ }
749
+ if (extInfo.vscodeEngine) {
750
+ props.push({
751
+ name: "cdx:vscode-extension:vscodeEngine",
752
+ value: extInfo.vscodeEngine,
753
+ });
754
+ }
755
+ if (props.length) {
756
+ component.properties = props;
757
+ }
758
+ // Build externalReferences from links (manifest Properties) or from package.json repository
759
+ const externalRefs = [];
760
+ if (extInfo.externalReferences?.length) {
761
+ externalRefs.push(...extInfo.externalReferences);
762
+ }
763
+ if (extInfo.links) {
764
+ if (extInfo.links.Source || extInfo.links.GitHub) {
765
+ const vcsUrl = extInfo.links.Source || extInfo.links.GitHub;
766
+ if (!externalRefs.some((r) => r.type === "vcs")) {
767
+ externalRefs.push({ type: "vcs", url: vcsUrl });
768
+ }
769
+ }
770
+ if (extInfo.links.Support) {
771
+ externalRefs.push({ type: "issue-tracker", url: extInfo.links.Support });
772
+ }
773
+ if (extInfo.links.Learn) {
774
+ externalRefs.push({ type: "documentation", url: extInfo.links.Learn });
775
+ }
776
+ if (extInfo.links.Getstarted) {
777
+ externalRefs.push({ type: "website", url: extInfo.links.Getstarted });
778
+ }
779
+ }
780
+ if (externalRefs.length) {
781
+ component.externalReferences = externalRefs;
782
+ }
783
+ component.evidence = {
784
+ identity: {
785
+ field: "purl",
786
+ confidence: MANIFEST_ANALYSIS_CONFIDENCE,
787
+ methods: [
788
+ {
789
+ technique: "manifest-analysis",
790
+ confidence: MANIFEST_ANALYSIS_CONFIDENCE,
791
+ value: extInfo.srcPath || "",
792
+ },
793
+ ],
794
+ },
795
+ };
796
+ return component;
797
+ }
798
+
799
+ /**
800
+ * Extract a `.vsix` file (ZIP archive) to a temporary directory for deep
801
+ * analysis. The caller is responsible for cleaning up the temp directory.
802
+ *
803
+ * @param {string} vsixFile Absolute path to the `.vsix` file
804
+ * @returns {Promise<string|undefined>} Path to the extracted temp directory, or undefined on failure
805
+ */
806
+ export async function extractVsixToTempDir(vsixFile) {
807
+ let tempDir;
808
+ let zip;
809
+ try {
810
+ tempDir = safeMkdtempSync(join(getTmpDir(), "vsix-deps-"));
811
+ zip = new StreamZip.async({ file: vsixFile });
812
+ const extracted = await safeExtractArchive(vsixFile, tempDir, async () => {
813
+ await zip.extract(null, tempDir);
814
+ });
815
+ if (!extracted) {
816
+ return undefined;
817
+ }
818
+ // Most vsix files have content under extension/ subdirectory
819
+ const extensionSubDir = join(tempDir, "extension");
820
+ if (safeExistsSync(extensionSubDir)) {
821
+ return extensionSubDir;
822
+ }
823
+ return tempDir;
824
+ } catch (e) {
825
+ if (DEBUG_MODE) {
826
+ console.log(`Error extracting vsix file ${vsixFile}:`, e.message);
827
+ }
828
+ cleanupTempDir(tempDir);
829
+ return undefined;
830
+ } finally {
831
+ if (zip) {
832
+ try {
833
+ await zip.close();
834
+ } catch (_e) {
835
+ // Best effort close
836
+ }
837
+ }
838
+ }
839
+ }
840
+
841
+ /**
842
+ * Clean up a temporary directory created during vsix extraction.
843
+ *
844
+ * @param {string} tempDir Path to the temp directory to remove
845
+ */
846
+ export function cleanupTempDir(tempDir) {
847
+ if (!tempDir) {
848
+ return;
849
+ }
850
+ // The tempDir might be a subdirectory (e.g., "extension" inside the actual temp dir)
851
+ // Walk up to verify the parent is under the temp base
852
+ const resolvedDir = resolve(tempDir);
853
+ const dirToRemove =
854
+ basename(resolvedDir) === "extension"
855
+ ? resolve(resolvedDir, "..")
856
+ : resolvedDir;
857
+ try {
858
+ // Safety: only remove dirs that are direct children of the temp base with vsix-deps- prefix
859
+ const expectedBase = resolve(getTmpDir());
860
+ const dirBaseName = basename(dirToRemove);
861
+ if (
862
+ dirBaseName.startsWith("vsix-deps-") &&
863
+ resolve(dirToRemove, "..") === expectedBase
864
+ ) {
865
+ safeRmSync(dirToRemove, { recursive: true, force: true });
866
+ }
867
+ } catch (_e) {
868
+ // Best effort cleanup
869
+ }
870
+ }
871
+
872
+ /**
873
+ * Parse a `.vsix` file (ZIP archive) and extract the extension metadata.
874
+ *
875
+ * @param {string} vsixFile Absolute path to the `.vsix` file
876
+ * @returns {Promise<Object|undefined>} CycloneDX component object or undefined
877
+ */
878
+ export async function parseVsixFile(vsixFile) {
879
+ let zip;
880
+ try {
881
+ zip = new StreamZip.async({ file: vsixFile });
882
+ const entries = await zip.entries();
883
+ let extInfo;
884
+
885
+ // Try .vsixmanifest first
886
+ for (const entry of Object.values(entries)) {
887
+ if (entry.isDirectory) {
888
+ continue;
889
+ }
890
+ if (
891
+ entry.name.endsWith(".vsixmanifest") ||
892
+ entry.name.endsWith("extension.vsixmanifest")
893
+ ) {
894
+ const fileData = await zip.entryData(entry.name);
895
+ const manifestData = fileData.toString("utf-8");
896
+ extInfo = parseVsixManifest(manifestData);
897
+ if (extInfo) {
898
+ extInfo.srcPath = vsixFile;
899
+ break;
900
+ }
901
+ }
902
+ }
903
+
904
+ // Fall back to package.json inside the extension/ directory
905
+ if (!extInfo) {
906
+ for (const entry of Object.values(entries)) {
907
+ if (entry.isDirectory) {
908
+ continue;
909
+ }
910
+ if (
911
+ entry.name === "extension/package.json" ||
912
+ entry.name === "package.json"
913
+ ) {
914
+ const fileData = await zip.entryData(entry.name);
915
+ const packageJsonData = fileData.toString("utf-8");
916
+ extInfo = parseVsixPackageJson(packageJsonData, vsixFile);
917
+ if (extInfo) {
918
+ break;
919
+ }
920
+ }
921
+ }
922
+ }
923
+
924
+ if (extInfo) {
925
+ return toComponent(extInfo);
926
+ }
927
+ return undefined;
928
+ } catch (e) {
929
+ if (DEBUG_MODE) {
930
+ console.log(`Error parsing vsix file ${vsixFile}:`, e.message);
931
+ }
932
+ return undefined;
933
+ } finally {
934
+ if (zip) {
935
+ try {
936
+ await zip.close();
937
+ } catch (_e) {
938
+ // Best effort close
939
+ }
940
+ }
941
+ }
942
+ }
943
+
944
+ /**
945
+ * Parse a single installed extension directory (already extracted).
946
+ * Looks for `package.json` (preferred) and `.vsixmanifest`.
947
+ *
948
+ * @param {string} extDir Absolute path to the extension directory (e.g. `~/.vscode/extensions/ms-python.python-2023.1.0`)
949
+ * @param {string} [ideName] Optional IDE name
950
+ * @returns {Object|undefined} CycloneDX component object or undefined
951
+ */
952
+ export function parseInstalledExtensionDir(extDir, ideName) {
953
+ // First try package.json at the root of the extension directory
954
+ const packageJsonPath = join(extDir, "package.json");
955
+ if (safeExistsSync(packageJsonPath)) {
956
+ try {
957
+ const data = readFileSync(packageJsonPath, { encoding: "utf-8" });
958
+ const extInfo = parseVsixPackageJson(data, extDir);
959
+ if (extInfo?.name) {
960
+ return toComponent(extInfo, ideName);
961
+ }
962
+ } catch (_e) {
963
+ // Fall through to vsixmanifest
964
+ }
965
+ }
966
+
967
+ // Try .vsixmanifest at the root
968
+ const manifestPath = join(extDir, ".vsixmanifest");
969
+ if (safeExistsSync(manifestPath)) {
970
+ try {
971
+ const data = readFileSync(manifestPath, { encoding: "utf-8" });
972
+ const extInfo = parseVsixManifest(data);
973
+ if (extInfo) {
974
+ extInfo.srcPath = extDir;
975
+ return toComponent(extInfo, ideName);
976
+ }
977
+ } catch (_e) {
978
+ // Ignore
979
+ }
980
+ }
981
+
982
+ // Try to infer from directory name (publisher.name-version pattern)
983
+ return parseExtensionDirName(extDir, ideName);
984
+ }
985
+
986
+ /**
987
+ * Attempt to extract extension metadata from a directory name following the
988
+ * pattern `publisher.name-version`.
989
+ *
990
+ * @param {string} extDir Absolute path to extension directory
991
+ * @param {string} [ideName] IDE name
992
+ * @returns {Object|undefined} CycloneDX component or undefined
993
+ */
994
+ export function parseExtensionDirName(extDir, ideName) {
995
+ const dirName = extDir.split(/[/\\]/).pop();
996
+ if (!dirName) {
997
+ return undefined;
998
+ }
999
+ // Pattern: publisher.name-version (e.g., ms-python.python-2023.25.0)
1000
+ // Use a non-backtracking approach: split on the last hyphen followed by a digit
1001
+ const dotIdx = dirName.indexOf(".");
1002
+ if (dotIdx < 1) {
1003
+ return undefined;
1004
+ }
1005
+ const publisher = dirName.substring(0, dotIdx);
1006
+ const rest = dirName.substring(dotIdx + 1);
1007
+ // Find the last hyphen followed by a digit to separate name from version
1008
+ let versionStart = -1;
1009
+ for (let i = rest.length - 1; i >= 0; i--) {
1010
+ if (rest[i] === "-" && i + 1 < rest.length && /\d/.test(rest[i + 1])) {
1011
+ versionStart = i;
1012
+ break;
1013
+ }
1014
+ }
1015
+ if (versionStart < 1) {
1016
+ return undefined;
1017
+ }
1018
+ const name = rest.substring(0, versionStart);
1019
+ const version = rest.substring(versionStart + 1);
1020
+ if (name && version) {
1021
+ const extInfo = {
1022
+ publisher: publisher,
1023
+ name: name,
1024
+ version,
1025
+ displayName: "",
1026
+ description: "",
1027
+ platform: "",
1028
+ srcPath: extDir,
1029
+ };
1030
+ return toComponent(extInfo, ideName);
1031
+ }
1032
+ return undefined;
1033
+ }
1034
+
1035
+ /**
1036
+ * Collect all installed extensions from a set of IDE extension directories.
1037
+ *
1038
+ * @param {Array<{name: string, dir: string}>} ideDirs Array of { name, dir } from discoverIdeExtensionDirs
1039
+ * @returns {Object[]} Array of CycloneDX component objects
1040
+ */
1041
+ export function collectInstalledExtensions(ideDirs) {
1042
+ const pkgList = [];
1043
+ const seen = new Set();
1044
+
1045
+ for (const { name: ideName, dir } of ideDirs) {
1046
+ let entries;
1047
+ try {
1048
+ entries = readdirSync(dir, { withFileTypes: true });
1049
+ } catch (_e) {
1050
+ continue;
1051
+ }
1052
+ for (const entry of entries) {
1053
+ if (!entry.isDirectory()) {
1054
+ continue;
1055
+ }
1056
+ // Skip hidden directories and special directories
1057
+ if (entry.name.startsWith(".")) {
1058
+ continue;
1059
+ }
1060
+ const extDir = join(dir, entry.name);
1061
+ const component = parseInstalledExtensionDir(extDir, ideName);
1062
+ if (component && !seen.has(component.purl)) {
1063
+ seen.add(component.purl);
1064
+ pkgList.push(component);
1065
+ }
1066
+ }
1067
+ }
1068
+ return pkgList;
1069
+ }