@cdxgen/cdxgen 0.0.1 → 13.0.1

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 +2335 -0
  4. package/bin/convert.js +220 -0
  5. package/bin/evinse.js +353 -0
  6. package/bin/hbom.js +504 -0
  7. package/bin/repl.js +2224 -0
  8. package/bin/sign.js +195 -0
  9. package/bin/tracebom.js +303 -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 +1882 -0
  85. package/lib/cli/cliOptions.js +543 -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 +280 -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 +920 -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 +583 -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 +1793 -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 +383 -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 +267 -0
  215. package/lib/inventory/traceRunner.js +439 -0
  216. package/lib/inventory/unicodeScan.js +147 -0
  217. package/lib/managers/binary.js +3459 -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 +329 -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 +50 -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 +201 -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 +22 -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 +147 -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,1092 @@
1
+ import { lstatSync, readFileSync } from "node:fs";
2
+ import { tmpdir, totalmem } from "node:os";
3
+ import { delimiter as _delimiter, dirname, join, resolve } from "node:path";
4
+ import process from "node:process";
5
+
6
+ import { DEBUG_MODE, readEnvironmentVariable } from "../core/activity.js";
7
+ import {
8
+ safeExistsSync,
9
+ safeMkdtempSync,
10
+ safeRmSync,
11
+ safeSpawnSync,
12
+ } from "../core/fs.js";
13
+ import { TRACE_MODE } from "../core/logger.js";
14
+ import { dirNameStr, isWin } from "../core/paths.js";
15
+
16
+ const ASTGEN_DEFAULT_IGNORE_DIRS = [
17
+ "venv",
18
+ "docs",
19
+ "e2e",
20
+ "e2e-beta",
21
+ "examples",
22
+ "cypress",
23
+ "jest-cache",
24
+ "eslint-rules",
25
+ "codemods",
26
+ "flow-typed",
27
+ "i18n",
28
+ ];
29
+
30
+ const ATOM_JS_LANGUAGES = new Set([
31
+ "javascript",
32
+ "js",
33
+ "jsx",
34
+ "node",
35
+ "nodejs",
36
+ "typescript",
37
+ "ts",
38
+ "tsx",
39
+ ]);
40
+
41
+ // atom 3 ships per-platform sub-packages. The native sub-packages embed a
42
+ // GraalVM native image (`bin/atom`) and need no JDK; the jar sub-packages
43
+ // carry `plugins/` (jars + launchers) and require Java 23+. This set must stay
44
+ // in lockstep with `NATIVE_PACKAGES` in @appthreat/atom/resolve.js; the
45
+ // `atomProviderKind` parity test in atomUtils.poku.js guards the drift.
46
+ /**
47
+ * Platform-specific @appthreat/atom-* native package names that carry the
48
+ * bundled native `atom` binary.
49
+ */
50
+ export const ATOM_NATIVE_PACKAGES = new Set([
51
+ "@appthreat/atom-linux-amd64",
52
+ "@appthreat/atom-linux-arm64",
53
+ "@appthreat/atom-darwin-arm64",
54
+ "@appthreat/atom-linux-amd64-musl",
55
+ "@appthreat/atom-windows-amd64",
56
+ ]);
57
+
58
+ const ATOM_PHP_LANGUAGES = new Set(["php"]);
59
+
60
+ // Absolute ceiling on atom's heap. Past this point a larger heap buys a
61
+ // collector that runs less often rather than an analysis that succeeds where it
62
+ // otherwise would not, while the reservation itself is what pushes a build
63
+ // agent into swap or an OOM kill.
64
+ const ATOM_MAX_HEAP_CAP_BYTES = 8 * 1024 ** 3;
65
+
66
+ // A heap this small still completes the repository fixtures, so it is the floor
67
+ // applied on memory-constrained containers rather than a target.
68
+ const ATOM_MIN_HEAP_FLOOR_BYTES = 2 * 1024 ** 3;
69
+
70
+ // Below this, slicing a large project is slow before it is fatal, so the run is
71
+ // worth a warning even though it is allowed to proceed.
72
+ const ATOM_COMFORTABLE_HEAP_BYTES = 7 * 1024 ** 3;
73
+
74
+ // atom is spawned once per language and the ceiling is identical every time, so
75
+ // the warning belongs to the ceiling rather than to each spawn.
76
+ let warnedAtomHeapCeiling;
77
+
78
+ function escapeScalaRegexLiteral(value) {
79
+ return value.replace(/[\\^$*+?.()|[\]{}]/g, "\\$&");
80
+ }
81
+
82
+ function normalizeGlobPattern(pattern) {
83
+ pattern = `${pattern}`;
84
+ let normalizedPattern = "";
85
+ for (let i = 0; i < pattern.length; i++) {
86
+ const char = pattern[i];
87
+ if (char !== "\\") {
88
+ normalizedPattern += char;
89
+ continue;
90
+ }
91
+ const nextChar = pattern[i + 1];
92
+ if (nextChar && "*?[]{}()!+@,".includes(nextChar)) {
93
+ normalizedPattern += char;
94
+ normalizedPattern += nextChar;
95
+ i++;
96
+ } else {
97
+ normalizedPattern += "/";
98
+ }
99
+ }
100
+ return normalizedPattern.replace(/^\.\//, "");
101
+ }
102
+
103
+ function splitGlobAlternates(value, separator = ",") {
104
+ const alternates = [];
105
+ let current = "";
106
+ let braceDepth = 0;
107
+ let bracketDepth = 0;
108
+ let parenDepth = 0;
109
+ for (let i = 0; i < value.length; i++) {
110
+ const char = value[i];
111
+ if (char === "\\") {
112
+ current += char;
113
+ if (i + 1 < value.length) {
114
+ current += value[++i];
115
+ }
116
+ continue;
117
+ }
118
+ if (char === "[" && bracketDepth === 0) {
119
+ bracketDepth++;
120
+ } else if (char === "]" && bracketDepth > 0) {
121
+ bracketDepth--;
122
+ } else if (!bracketDepth) {
123
+ if (char === "{") {
124
+ braceDepth++;
125
+ } else if (char === "}" && braceDepth > 0) {
126
+ braceDepth--;
127
+ } else if (char === "(") {
128
+ parenDepth++;
129
+ } else if (char === ")" && parenDepth > 0) {
130
+ parenDepth--;
131
+ } else if (char === separator && braceDepth === 0 && parenDepth === 0) {
132
+ alternates.push(current);
133
+ current = "";
134
+ continue;
135
+ }
136
+ }
137
+ current += char;
138
+ }
139
+ alternates.push(current);
140
+ return alternates;
141
+ }
142
+
143
+ function findClosingGlobToken(value, startIndex, openChar, closeChar) {
144
+ if (openChar === "[") {
145
+ for (let i = startIndex + 1; i < value.length; i++) {
146
+ if (value[i] === "\\") {
147
+ i++;
148
+ } else if (value[i] === closeChar) {
149
+ return i;
150
+ }
151
+ }
152
+ return -1;
153
+ }
154
+ let depth = 0;
155
+ let inBracket = false;
156
+ for (let i = startIndex; i < value.length; i++) {
157
+ const char = value[i];
158
+ if (char === "\\") {
159
+ i++;
160
+ continue;
161
+ }
162
+ if (char === "[" && !inBracket) {
163
+ inBracket = true;
164
+ } else if (char === "]" && inBracket) {
165
+ inBracket = false;
166
+ } else if (!inBracket) {
167
+ if (char === openChar) {
168
+ depth++;
169
+ } else if (char === closeChar) {
170
+ depth--;
171
+ if (depth === 0) {
172
+ return i;
173
+ }
174
+ }
175
+ }
176
+ }
177
+ return -1;
178
+ }
179
+
180
+ function globCharClassToRegex(value) {
181
+ if (!value.length) {
182
+ return "\\[";
183
+ }
184
+ let classValue = value;
185
+ let prefix = "";
186
+ if (classValue[0] === "!" || classValue[0] === "^") {
187
+ prefix = "^";
188
+ classValue = classValue.slice(1);
189
+ }
190
+ if (!classValue.length) {
191
+ return "\\[";
192
+ }
193
+ classValue = classValue.replace(/\\/g, "\\\\").replace(/]/g, "\\]");
194
+ return `[${prefix}${classValue}]`;
195
+ }
196
+
197
+ function globSegmentToScalaRegex(segment) {
198
+ let regex = "";
199
+ for (let i = 0; i < segment.length; i++) {
200
+ const char = segment[i];
201
+ const nextChar = segment[i + 1];
202
+ if (char === "\\") {
203
+ if (i + 1 < segment.length) {
204
+ regex += escapeScalaRegexLiteral(segment[++i]);
205
+ } else {
206
+ regex += "\\\\";
207
+ }
208
+ } else if (char === "*" && nextChar !== "(") {
209
+ regex += "[^/\\\\]*";
210
+ } else if (char === "?" && nextChar !== "(") {
211
+ regex += "[^/\\\\]";
212
+ } else if (char === "[") {
213
+ const bracketEnd = findClosingGlobToken(segment, i, "[", "]");
214
+ if (bracketEnd === -1) {
215
+ regex += "\\[";
216
+ } else {
217
+ regex += globCharClassToRegex(segment.slice(i + 1, bracketEnd));
218
+ i = bracketEnd;
219
+ }
220
+ } else if (char === "{") {
221
+ const braceEnd = findClosingGlobToken(segment, i, "{", "}");
222
+ if (braceEnd === -1) {
223
+ regex += "\\{";
224
+ } else {
225
+ const alternates = splitGlobAlternates(
226
+ segment.slice(i + 1, braceEnd),
227
+ ).map((alternate) => globSegmentToScalaRegex(alternate));
228
+ regex += `(?:${alternates.join("|")})`;
229
+ i = braceEnd;
230
+ }
231
+ } else if (["@", "?", "+", "*", "!"].includes(char) && nextChar === "(") {
232
+ const parenEnd = findClosingGlobToken(segment, i + 1, "(", ")");
233
+ if (parenEnd === -1) {
234
+ regex += escapeScalaRegexLiteral(char);
235
+ } else {
236
+ const alternates = splitGlobAlternates(
237
+ segment.slice(i + 2, parenEnd),
238
+ "|",
239
+ ).map((alternate) => globSegmentToScalaRegex(alternate));
240
+ const alternateRegex = `(?:${alternates.join("|")})`;
241
+ if (char === "@") {
242
+ regex += alternateRegex;
243
+ } else if (char === "?") {
244
+ regex += `${alternateRegex}?`;
245
+ } else if (char === "+") {
246
+ regex += `${alternateRegex}+`;
247
+ } else if (char === "*") {
248
+ regex += `${alternateRegex}*`;
249
+ } else {
250
+ regex += `(?!(?:${alternates.join("|")})$)[^/\\\\]*`;
251
+ }
252
+ i = parenEnd;
253
+ }
254
+ } else {
255
+ regex += escapeScalaRegexLiteral(char);
256
+ }
257
+ }
258
+ return regex;
259
+ }
260
+
261
+ function getExcludePatterns(options = {}) {
262
+ if (!Array.isArray(options.exclude)) {
263
+ return [];
264
+ }
265
+ return options.exclude
266
+ .flatMap((pattern) => {
267
+ pattern = `${pattern}`;
268
+ return pattern.includes(",") && !pattern.includes("{")
269
+ ? pattern.split(",")
270
+ : [pattern];
271
+ })
272
+ .map((pattern) => pattern.trim())
273
+ .filter(Boolean)
274
+ .filter((pattern) => !pattern.startsWith("!"));
275
+ }
276
+
277
+ function extractIgnoreDirsFromExcludePatterns(
278
+ patterns,
279
+ includeExactPathFragments = false,
280
+ ) {
281
+ const ignoreDirs = new Set();
282
+ for (const pattern of patterns) {
283
+ const normalizedPattern = normalizeGlobPattern(pattern);
284
+ const isExactPath = !/[!*?{}[\]]/.test(normalizedPattern);
285
+ const segments = normalizedPattern.split("/").filter(Boolean);
286
+ const literalSegments = segments.filter(
287
+ (segment) =>
288
+ !/[!*?{}[\]]/.test(segment) && segment !== "." && segment !== "..",
289
+ );
290
+ if (!literalSegments.length) {
291
+ continue;
292
+ }
293
+ const dirName = literalSegments.at(-1);
294
+ if (
295
+ dirName &&
296
+ ((includeExactPathFragments && isExactPath) ||
297
+ !dirName.includes(".") ||
298
+ segments.at(-1) !== dirName)
299
+ ) {
300
+ ignoreDirs.add(dirName);
301
+ }
302
+ }
303
+ return Array.from(ignoreDirs);
304
+ }
305
+
306
+ function globToScalaRegexFragment(pattern) {
307
+ pattern = normalizeGlobPattern(pattern);
308
+ const isAbsolute = pattern.startsWith("/");
309
+ const segments = pattern.split("/").filter(Boolean);
310
+ if (!segments.length) {
311
+ return "$^";
312
+ }
313
+ if (segments.length === 1 && segments[0] === "**") {
314
+ return ".*";
315
+ }
316
+ let regex = isAbsolute ? "^[/\\\\]" : "(?:^|.*[/\\\\])";
317
+ for (let i = 0; i < segments.length; i++) {
318
+ const segment = segments[i];
319
+ const isLast = i === segments.length - 1;
320
+ const nextSegment = segments[i + 1];
321
+ if (segment === "**") {
322
+ if (i === 0) {
323
+ continue;
324
+ }
325
+ if (isLast) {
326
+ regex += "(?:[/\\\\].*)?";
327
+ } else {
328
+ regex += "(?:[/\\\\][^/\\\\]+)*[/\\\\]";
329
+ }
330
+ continue;
331
+ }
332
+ regex += globSegmentToScalaRegex(segment);
333
+ if (!isLast && nextSegment !== "**") {
334
+ regex += "[/\\\\]";
335
+ }
336
+ }
337
+ return `${regex}$`;
338
+ }
339
+
340
+ /**
341
+ * Convert cdxgen's glob-style exclude patterns to a Scala/Java regex string.
342
+ *
343
+ * @param {string[]} patterns Glob patterns from cdxgen's `--exclude` option
344
+ * @returns {string|undefined} Scala-compatible regex or undefined when empty
345
+ */
346
+ export function globPatternsToAtomIgnoreRegex(patterns = []) {
347
+ const fragments = getExcludePatterns({ exclude: patterns }).map((pattern) =>
348
+ globToScalaRegexFragment(pattern),
349
+ );
350
+ if (!fragments.length) {
351
+ return undefined;
352
+ }
353
+ return `(?:${fragments.join("|")})`;
354
+ }
355
+
356
+ /**
357
+ * Determine whether a file path is excluded by the given atom-style glob
358
+ * exclude patterns.
359
+ *
360
+ * @param {string} filePath File path to test.
361
+ * @param {string[]} [patterns=[]] Glob exclude patterns.
362
+ * @returns {boolean} True when the path matches an exclude pattern.
363
+ */
364
+ export function isPathExcludedByGlobPatterns(filePath, patterns = []) {
365
+ const atomIgnoreRegex = globPatternsToAtomIgnoreRegex(patterns);
366
+ if (!atomIgnoreRegex) {
367
+ return false;
368
+ }
369
+ const normalizedPath = `${filePath}`.replace(/\\/g, "/").replace(/^\.\//, "");
370
+ let regex;
371
+ try {
372
+ // The pattern is compiled from globs by globToScalaRegexFragment, which
373
+ // escapes every literal it emits, so a pattern the engine rejects means the
374
+ // glob itself was malformed and nothing should be excluded on its account.
375
+ regex = new RegExp(atomIgnoreRegex);
376
+ } catch (_e) {
377
+ return false;
378
+ }
379
+ return regex.test(normalizedPath) || regex.test(`./${normalizedPath}`);
380
+ }
381
+
382
+ /**
383
+ * Remove atom-slice entries whose source file matches the given glob exclude
384
+ * patterns, preserving the original slice structure otherwise.
385
+ *
386
+ * Filters `objectSlices`, `userDefinedTypes`, `reachables`, and reachable
387
+ * `paths`/`graph` nodes/edges that reference excluded files.
388
+ *
389
+ * @param {object|Array} sliceData Atom slice data object or array.
390
+ * @param {string[]} [patterns=[]] Glob exclude patterns.
391
+ * @returns {object|Array} Filtered slice data (shallow copy when an object).
392
+ */
393
+ export function filterAtomSlicesByExcludePatterns(sliceData, patterns = []) {
394
+ if (!sliceData || !getExcludePatterns({ exclude: patterns }).length) {
395
+ return sliceData;
396
+ }
397
+ const shouldKeepFile = (fileName) =>
398
+ !fileName || !isPathExcludedByGlobPatterns(fileName, patterns);
399
+ if (Array.isArray(sliceData)) {
400
+ return sliceData.filter((slice) => shouldKeepFile(slice.fileName));
401
+ }
402
+ const filteredSliceData = { ...sliceData };
403
+ if (Array.isArray(filteredSliceData.objectSlices)) {
404
+ filteredSliceData.objectSlices = filteredSliceData.objectSlices.filter(
405
+ (slice) => shouldKeepFile(slice.fileName),
406
+ );
407
+ }
408
+ if (Array.isArray(filteredSliceData.userDefinedTypes)) {
409
+ filteredSliceData.userDefinedTypes =
410
+ filteredSliceData.userDefinedTypes.filter((slice) =>
411
+ shouldKeepFile(slice.fileName),
412
+ );
413
+ }
414
+ if (Array.isArray(filteredSliceData.reachables)) {
415
+ filteredSliceData.reachables = filteredSliceData.reachables.filter(
416
+ (reachable) =>
417
+ (reachable.flows || []).every((flow) =>
418
+ shouldKeepFile(flow.parentFileName || flow.fileName),
419
+ ),
420
+ );
421
+ }
422
+ if (
423
+ filteredSliceData.graph?.nodes &&
424
+ Array.isArray(filteredSliceData.paths)
425
+ ) {
426
+ const excludedNodeIds = new Set(
427
+ filteredSliceData.graph.nodes
428
+ .filter((node) => !shouldKeepFile(node.parentFileName || node.fileName))
429
+ .map((node) => node.id),
430
+ );
431
+ filteredSliceData.paths = filteredSliceData.paths.filter((path) =>
432
+ path.every((nodeId) => !excludedNodeIds.has(nodeId)),
433
+ );
434
+ const retainedNodeIds = new Set(filteredSliceData.paths.flat());
435
+ filteredSliceData.graph = {
436
+ ...filteredSliceData.graph,
437
+ nodes: filteredSliceData.graph.nodes.filter(
438
+ (node) => retainedNodeIds.has(node.id) || !excludedNodeIds.has(node.id),
439
+ ),
440
+ edges: (filteredSliceData.graph.edges || []).filter((edge) => {
441
+ const source = edge.src ?? edge.source;
442
+ const destination = edge.dst ?? edge.destination;
443
+ return (
444
+ !excludedNodeIds.has(source) && !excludedNodeIds.has(destination)
445
+ );
446
+ }),
447
+ };
448
+ }
449
+ return filteredSliceData;
450
+ }
451
+
452
+ function mergeCsvValues(...valueLists) {
453
+ const values = new Set();
454
+ for (const valueList of valueLists) {
455
+ if (Array.isArray(valueList)) {
456
+ valueList.forEach((value) => {
457
+ values.add(`${value}`.trim());
458
+ });
459
+ } else if (typeof valueList === "string" && valueList.length) {
460
+ valueList.split(",").forEach((value) => {
461
+ values.add(value.trim());
462
+ });
463
+ }
464
+ }
465
+ return Array.from(values).filter(Boolean).join(",");
466
+ }
467
+
468
+ function mergeRegexValues(...regexValues) {
469
+ const values = regexValues
470
+ .map((regexValue) => `${regexValue || ""}`.trim())
471
+ .filter(Boolean);
472
+ if (!values.length) {
473
+ return undefined;
474
+ }
475
+ return values.map((regexValue) => `(?:${regexValue})`).join("|");
476
+ }
477
+
478
+ /**
479
+ * Build additional environment variables for Atom from cdxgen CLI options.
480
+ *
481
+ * @param {Object} options CLI options
482
+ * @param {string} language Atom language name
483
+ * @returns {Object} Environment variables to pass to Atom
484
+ */
485
+ export function buildAtomCommandEnv(options = {}, language = "") {
486
+ const excludePatterns = getExcludePatterns(options);
487
+ const normalizedLanguage = `${language}`.toLowerCase();
488
+ // PHP frontend: the atom 3 dispatcher clobbers PHP_PARSER_BIN with a path
489
+ // that does not exist on native platforms, and atom 3.0.x crashes parsing
490
+ // that bogus value. Forward the resolved php-parse location through the env
491
+ // so executeAtom can bypass the dispatcher for PHP (see
492
+ // resolveDirectAtomBinaryPath). Computed independently of exclude patterns.
493
+ const phpParseBin = ATOM_PHP_LANGUAGES.has(normalizedLanguage)
494
+ ? resolvePhpParseBin()
495
+ : undefined;
496
+ if (!excludePatterns.length) {
497
+ return phpParseBin ? { PHP_PARSER_BIN: phpParseBin } : {};
498
+ }
499
+ const chenIgnoreDirs = mergeCsvValues(
500
+ readEnvironmentVariable("CHEN_IGNORE_DIRS"),
501
+ extractIgnoreDirsFromExcludePatterns(excludePatterns, true),
502
+ );
503
+ const env = {};
504
+ if (chenIgnoreDirs) {
505
+ env.CHEN_IGNORE_DIRS = chenIgnoreDirs;
506
+ }
507
+ const atomIgnoreRegex = globPatternsToAtomIgnoreRegex(excludePatterns);
508
+ if (ATOM_JS_LANGUAGES.has(normalizedLanguage)) {
509
+ const astgenBaseIgnoreDirs =
510
+ readEnvironmentVariable("ASTGEN_IGNORE_DIRS") === undefined
511
+ ? ASTGEN_DEFAULT_IGNORE_DIRS
512
+ : readEnvironmentVariable("ASTGEN_IGNORE_DIRS");
513
+ const astgenIgnoreDirs = mergeCsvValues(
514
+ astgenBaseIgnoreDirs,
515
+ "node_modules",
516
+ extractIgnoreDirsFromExcludePatterns(excludePatterns),
517
+ );
518
+ if (astgenIgnoreDirs) {
519
+ env.ASTGEN_IGNORE_DIRS = astgenIgnoreDirs;
520
+ }
521
+ const astgenIgnoreFilePattern = mergeRegexValues(
522
+ readEnvironmentVariable("ASTGEN_IGNORE_FILE_PATTERN"),
523
+ atomIgnoreRegex,
524
+ );
525
+ if (astgenIgnoreFilePattern) {
526
+ env.ASTGEN_IGNORE_FILE_PATTERN = astgenIgnoreFilePattern;
527
+ }
528
+ }
529
+ if (phpParseBin) {
530
+ env.PHP_PARSER_BIN = phpParseBin;
531
+ }
532
+ return env;
533
+ }
534
+
535
+ /**
536
+ * Detect the libc flavour on Linux without shelling out. Mirrors the cheap
537
+ * branches of atom's `getLinuxLibc` (Alpine release file first, then glibc
538
+ * default). atom additionally consults `process.report` and `ldd --version`;
539
+ * those are only needed to disambiguate exotic setups and are intentionally not
540
+ * reproduced here to keep this call subprocess-free.
541
+ */
542
+ function detectLinuxLibc() {
543
+ if (safeExistsSync("/etc/alpine-release")) {
544
+ return "musl";
545
+ }
546
+ return "glibc";
547
+ }
548
+
549
+ /**
550
+ * Resolve the atom platform sub-package name and provider kind for the current
551
+ * (or supplied) runtime. This is a cdxgen-side reimplementation of atom's own
552
+ * `resolveAtomProvider`, kept here rather than imported from
553
+ * `@appthreat/atom/resolve.js` so it is safe under every cdxgen runtime
554
+ * (node, bun, deno, caxa) and inside the extracted caxa tree where the
555
+ * dispatcher's own resolver may not find a sibling sub-package.
556
+ *
557
+ * The returned `preferredPkg`/`kind` pair must agree with atom's
558
+ * `resolveAtomProvider` and `NATIVE_PACKAGES`; the parity test in
559
+ * atomUtils.poku.js asserts the agreement for all eight published triples.
560
+ *
561
+ * @param {Object} [opts] Optional overrides for testability
562
+ * @param {string} [opts.platform] Defaults to `process.platform`
563
+ * @param {string} [opts.arch] Defaults to `process.arch`
564
+ * @param {string} [opts.libc] Defaults to detected libc on linux
565
+ * @returns {{preferredPkg: string, kind: "native"|"jar", platform: string, arch: string, libc?: string}}
566
+ */
567
+ export function resolveAtomProvider(opts = {}) {
568
+ const platform = opts.platform || process.platform;
569
+ const arch = opts.arch || process.arch;
570
+ let libc = opts.libc;
571
+ if (platform === "linux" && !libc) {
572
+ libc = detectLinuxLibc();
573
+ }
574
+ let preferredPkg = "@appthreat/atom-jar";
575
+ let kind = "jar";
576
+ if (platform === "win32") {
577
+ if (arch === "x64") {
578
+ preferredPkg = "@appthreat/atom-windows-amd64";
579
+ kind = "native";
580
+ } else if (arch === "arm64") {
581
+ preferredPkg = "@appthreat/atom-windows-arm64";
582
+ kind = "jar";
583
+ }
584
+ } else if (platform === "darwin") {
585
+ if (arch === "arm64") {
586
+ preferredPkg = "@appthreat/atom-darwin-arm64";
587
+ kind = "native";
588
+ } else if (arch === "x64") {
589
+ preferredPkg = "@appthreat/atom-darwin-amd64";
590
+ kind = "jar";
591
+ }
592
+ } else if (platform === "linux") {
593
+ if (arch === "x64") {
594
+ preferredPkg =
595
+ libc === "musl"
596
+ ? "@appthreat/atom-linux-amd64-musl"
597
+ : "@appthreat/atom-linux-amd64";
598
+ kind = "native";
599
+ } else if (arch === "arm64") {
600
+ if (libc === "musl") {
601
+ preferredPkg = "@appthreat/atom-linux-arm64-musl";
602
+ kind = "jar";
603
+ } else {
604
+ preferredPkg = "@appthreat/atom-linux-arm64";
605
+ kind = "native";
606
+ }
607
+ }
608
+ }
609
+ return { preferredPkg, kind, platform, arch, libc };
610
+ }
611
+
612
+ /**
613
+ * Returns `"native"` or `"jar"` for the currently resolved atom provider.
614
+ * Used to gate Java/JDK advice so users on the five native platforms are not
615
+ * told to install a JDK for a failure that has nothing to do with Java.
616
+ */
617
+ export function atomProviderKind() {
618
+ return resolveAtomProvider().kind;
619
+ }
620
+
621
+ /**
622
+ * Locate the `php-parse` binary that the PHP frontend needs.
623
+ *
624
+ * atom 3's dispatcher unconditionally sets `PHP_PARSER_BIN=<ATOM_HOME>/bin/php-parse`,
625
+ * which for a native sub-package does not exist and also clobbers a caller-set
626
+ * value. cdxgen therefore resolves the real location and forwards it through
627
+ * the child env (see `buildAtomCommandEnv`); `executeAtom` then spawns the
628
+ * native binary directly for PHP so the dispatcher cannot clobber it (see
629
+ * `resolveDirectAtomBinaryPath`). Resolution order:
630
+ * 1. explicit `PHP_PARSER_BIN` env var (operators / container images)
631
+ * 2. `@appthreat/atom-parsetools/plugins/bin/php-parse` under cdxgen's own
632
+ * node_modules, then under `GLOBAL_NODE_MODULES_PATH` for global installs
633
+ *
634
+ * Returns `undefined` when neither is found, in which case PHP analysis runs
635
+ * through the dispatcher unchanged (and fails on native platforms until atom
636
+ * fixes the clobber).
637
+ *
638
+ * @returns {string|undefined}
639
+ */
640
+ export function resolvePhpParseBin() {
641
+ if (readEnvironmentVariable("PHP_PARSER_BIN")) {
642
+ return readEnvironmentVariable("PHP_PARSER_BIN");
643
+ }
644
+ const roots = [dirNameStr];
645
+ if (readEnvironmentVariable("GLOBAL_NODE_MODULES_PATH")) {
646
+ roots.push(dirname(readEnvironmentVariable("GLOBAL_NODE_MODULES_PATH")));
647
+ }
648
+ for (const root of roots) {
649
+ const candidate = join(
650
+ root,
651
+ "node_modules",
652
+ "@appthreat",
653
+ "atom-parsetools",
654
+ "plugins",
655
+ "bin",
656
+ "php-parse",
657
+ );
658
+ if (safeExistsSync(candidate)) {
659
+ return candidate;
660
+ }
661
+ }
662
+ return undefined;
663
+ }
664
+
665
+ /**
666
+ * Resolve the atom native binary path directly, bypassing the dispatcher.
667
+ *
668
+ * This is required for the PHP frontend: the dispatcher clobbers
669
+ * `PHP_PARSER_BIN` with a path that does not exist on native platforms, and
670
+ * atom 3.0.x crashes in `defaultPhpParserBin` parsing that bogus value before
671
+ * any `--frontend-args php-parser-bin=` override is consulted. Spawning the
672
+ * native binary directly lets cdxgen control the child env, so the correct
673
+ * `PHP_PARSER_BIN` reaches atom. Returns `undefined` when the provider is the
674
+ * jar kind or the native binary cannot be located (in which case the dispatcher
675
+ * is used as-is).
676
+ *
677
+ * @returns {string|undefined}
678
+ */
679
+ export function resolveDirectAtomBinaryPath() {
680
+ const { preferredPkg, kind } = resolveAtomProvider();
681
+ if (kind !== "native") {
682
+ return undefined;
683
+ }
684
+ const folder = preferredPkg.split("/")[1];
685
+ const exeName = isWin ? "atom.exe" : "atom";
686
+ const version = readAtomVersion();
687
+ const roots = [join(dirNameStr, "node_modules")];
688
+ if (readEnvironmentVariable("GLOBAL_NODE_MODULES_PATH")) {
689
+ roots.push(readEnvironmentVariable("GLOBAL_NODE_MODULES_PATH"));
690
+ }
691
+ const candidates = [];
692
+ for (const root of roots) {
693
+ candidates.push(join(root, "@appthreat", folder, "bin", exeName));
694
+ candidates.push(
695
+ join(
696
+ root,
697
+ "@appthreat",
698
+ "atom",
699
+ "node_modules",
700
+ "@appthreat",
701
+ folder,
702
+ "bin",
703
+ exeName,
704
+ ),
705
+ );
706
+ if (version) {
707
+ candidates.push(
708
+ join(
709
+ root,
710
+ ".pnpm",
711
+ `@appthreat+${folder}@${version}`,
712
+ "node_modules",
713
+ "@appthreat",
714
+ folder,
715
+ "bin",
716
+ exeName,
717
+ ),
718
+ );
719
+ }
720
+ }
721
+ for (const candidate of candidates) {
722
+ if (safeExistsSync(candidate)) {
723
+ return candidate;
724
+ }
725
+ }
726
+ return undefined;
727
+ }
728
+
729
+ function readAtomVersion() {
730
+ const roots = [join(dirNameStr, "node_modules")];
731
+ if (readEnvironmentVariable("GLOBAL_NODE_MODULES_PATH")) {
732
+ roots.push(readEnvironmentVariable("GLOBAL_NODE_MODULES_PATH"));
733
+ }
734
+ for (const root of roots) {
735
+ try {
736
+ const pj = JSON.parse(
737
+ readFileSync(join(root, "@appthreat", "atom", "package.json"), "utf8"),
738
+ );
739
+ if (pj.version) {
740
+ return pj.version;
741
+ }
742
+ } catch {
743
+ // try the next root
744
+ }
745
+ }
746
+ return undefined;
747
+ }
748
+
749
+ /**
750
+ * Retrieves the atom command by referring to various environment variables
751
+ */
752
+ export function getAtomCommand() {
753
+ if (readEnvironmentVariable("ATOM_CMD")) {
754
+ return readEnvironmentVariable("ATOM_CMD");
755
+ }
756
+ if (readEnvironmentVariable("ATOM_HOME")) {
757
+ // For atom 3 native installs, ATOM_HOME points at the platform sub-package
758
+ // directory (the dispatcher sets it to `dirname(dirname(binPath))`), which
759
+ // contains `bin/atom`. For jar installs it points at `plugins/`, where
760
+ // `bin/atom` is the launcher. Either way `join(ATOM_HOME, "bin", "atom")`
761
+ // is the correct path, so this branch needs no change for atom 3.
762
+ return join(readEnvironmentVariable("ATOM_HOME"), "bin", "atom");
763
+ }
764
+ const NODE_CMD = readEnvironmentVariable("NODE_CMD") || "node";
765
+ const localAtom = join(
766
+ dirNameStr,
767
+ "node_modules",
768
+ "@appthreat",
769
+ "atom",
770
+ "index.js",
771
+ );
772
+ if (safeExistsSync(localAtom)) {
773
+ return `${NODE_CMD} ${localAtom}`;
774
+ }
775
+ return "atom";
776
+ }
777
+
778
+ /**
779
+ * Compute the maximum heap atom may grow to, in bytes.
780
+ *
781
+ * Neither of atom's two runtimes bounds itself to anything a machine can
782
+ * comfortably back: a GraalVM native image defaults to
783
+ * `MaximumHeapSizePercent=80` of physical memory, and HotSpot to a quarter of
784
+ * it. Both use a collector that grows the heap in preference to collecting, so
785
+ * on a large host atom reserves tens of gigabytes and the machine, not atom,
786
+ * is what runs out of memory.
787
+ *
788
+ * The ceiling is therefore the smaller of half of physical memory and
789
+ * `ATOM_MAX_HEAP_CAP_BYTES`, with a floor so that a small container still gets
790
+ * a workable heap. `ATOM_MAX_HEAP` overrides the whole calculation and accepts
791
+ * a plain byte count or a `k`/`m`/`g` suffix.
792
+ *
793
+ * @returns {number|undefined} Heap ceiling in bytes, or `undefined` to leave the runtime default in place
794
+ */
795
+ export function atomMaxHeapBytes() {
796
+ const configured = readEnvironmentVariable("ATOM_MAX_HEAP");
797
+ if (configured) {
798
+ const match = /^(\d+)([kmg]?)b?$/i.exec(configured.trim());
799
+ if (!match) {
800
+ console.warn(
801
+ `WARN: Ignoring ATOM_MAX_HEAP='${configured}'. Expected a byte count, optionally suffixed with k, m, or g.`,
802
+ );
803
+ } else {
804
+ const scale = { "": 1, k: 1024, m: 1024 ** 2, g: 1024 ** 3 };
805
+ const bytes = Number(match[1]) * scale[match[2].toLowerCase()];
806
+ // Zero is the runtime's own "unset" value, so it is the way to ask for
807
+ // the unbounded default back.
808
+ return bytes > 0 ? bytes : undefined;
809
+ }
810
+ }
811
+ const total = totalmem();
812
+ if (!total) {
813
+ return undefined;
814
+ }
815
+ return Math.max(
816
+ ATOM_MIN_HEAP_FLOOR_BYTES,
817
+ Math.min(Math.floor(total / 2), ATOM_MAX_HEAP_CAP_BYTES),
818
+ );
819
+ }
820
+
821
+ /**
822
+ * Warn when atom is about to run with a heap that slicing may not fit in.
823
+ *
824
+ * Below the comfortable threshold the failure is not a clean error: the
825
+ * collector spends progressively longer reclaiming an almost-full heap, so the
826
+ * run first becomes very slow and only then dies. Saying so up front turns an
827
+ * apparent hang into an actionable message. It is said once per ceiling, so the
828
+ * per-language spawns of a single run share one warning.
829
+ *
830
+ * @param {number} maxHeap Heap ceiling in bytes that atom will run with
831
+ */
832
+ function warnOnTightAtomHeap(maxHeap) {
833
+ if (
834
+ maxHeap === warnedAtomHeapCeiling ||
835
+ maxHeap >= ATOM_COMFORTABLE_HEAP_BYTES
836
+ ) {
837
+ return;
838
+ }
839
+ warnedAtomHeapCeiling = maxHeap;
840
+ const asGib = (bytes) => Math.round((bytes / 1024 ** 3) * 10) / 10;
841
+ console.warn(
842
+ `WARN: atom is limited to a ${asGib(maxHeap)} GiB heap, below the ${asGib(
843
+ ATOM_COMFORTABLE_HEAP_BYTES,
844
+ )} GiB that slice computation is comfortable with. Slicing large projects may take a long time or run out of memory. Raise it with ATOM_MAX_HEAP (for example ATOM_MAX_HEAP=8g) on a host with more memory.`,
845
+ );
846
+ }
847
+
848
+ /**
849
+ * Build the runtime arguments and environment that bound atom's heap.
850
+ *
851
+ * A native image takes its heap ceiling as a `-XX:` argument, which its runtime
852
+ * consumes before the command line reaches atom's own parser. A jar install is
853
+ * launched through a script that owns the `java` command line, so the only way
854
+ * in is `JAVA_TOOL_OPTIONS`, and an existing value is left alone rather than
855
+ * overridden.
856
+ *
857
+ * @param {string[]} args Arguments destined for atom, mutated in place
858
+ * @param {Object} env Environment for the atom process, mutated in place
859
+ */
860
+ function applyAtomHeapLimit(args, env) {
861
+ const maxHeap = atomMaxHeapBytes();
862
+ if (!maxHeap) {
863
+ return;
864
+ }
865
+ warnOnTightAtomHeap(maxHeap);
866
+ if (atomProviderKind() === "jar") {
867
+ if (!env.JAVA_TOOL_OPTIONS) {
868
+ env.JAVA_TOOL_OPTIONS = `-Xmx${Math.floor(maxHeap / 1024 ** 2)}m`;
869
+ }
870
+ return;
871
+ }
872
+ if (!args.some((arg) => String(arg).startsWith("-XX:MaxHeapSize="))) {
873
+ args.unshift(`-XX:MaxHeapSize=${maxHeap}`);
874
+ }
875
+ }
876
+
877
+ /**
878
+ * Execute the atom tool against a source directory or file with the given arguments.
879
+ *
880
+ * Resolves the atom binary via `getAtomCommand`, sets up the required environment
881
+ * (including `JAVA_HOME` from `ATOM_JAVA_HOME` if set), and spawns the process.
882
+ * Logs diagnostic messages for common failure modes such as unsupported Java versions,
883
+ * missing `astgen`, and JVM crashes.
884
+ *
885
+ * @param {string} src Path to the source directory or file to analyse
886
+ * @param {string[]} args Arguments to pass to the atom command
887
+ * @param {Object} extra_env Additional environment variables to merge into the process environment
888
+ * @returns {boolean} `true` if atom executed successfully and the language is supported; `false` otherwise
889
+ */
890
+ export function executeAtom(src, args, extra_env = {}) {
891
+ const cwd =
892
+ safeExistsSync(src) && lstatSync(src).isDirectory() ? src : dirname(src);
893
+ let ATOM_BIN = getAtomCommand();
894
+ // PHP on a native platform: the atom 3 dispatcher clobbers PHP_PARSER_BIN
895
+ // with a non-existent path and atom 3.0.x crashes parsing it before any
896
+ // --frontend-args override is honoured. When the caller forwards a resolved
897
+ // PHP_PARSER_BIN (see buildAtomCommandEnv) and the resolved command is the
898
+ // dispatcher, spawn the native binary directly so our env reaches atom. This
899
+ // must happen before the space-split below prepends index.js to argv.
900
+ let bypassAtomHome;
901
+ if (extra_env.PHP_PARSER_BIN && ATOM_BIN.includes("index.js")) {
902
+ const directBinary = resolveDirectAtomBinaryPath();
903
+ if (directBinary) {
904
+ ATOM_BIN = directBinary;
905
+ // The dispatcher exports ATOM_HOME=<sub-package dir> for the child. Set
906
+ // the same value here so bypassing it does not change anything else atom
907
+ // derives from that variable.
908
+ bypassAtomHome = dirname(dirname(directBinary));
909
+ }
910
+ }
911
+ let isSupported = true;
912
+ const env = {
913
+ ...process.env,
914
+ ...extra_env,
915
+ };
916
+ // Bound the heap while argv still starts at atom's own arguments: the
917
+ // space-split below prepends the launcher script, which has to stay first.
918
+ applyAtomHeapLimit(args, env);
919
+ if (ATOM_BIN.includes(" ")) {
920
+ const tmpA = ATOM_BIN.split(" ");
921
+ if (tmpA && tmpA.length > 1) {
922
+ ATOM_BIN = tmpA[0];
923
+ args.unshift(tmpA[1]);
924
+ }
925
+ }
926
+ if (DEBUG_MODE) {
927
+ console.log("Executing", ATOM_BIN);
928
+ }
929
+ if (bypassAtomHome) {
930
+ env.ATOM_HOME = bypassAtomHome;
931
+ }
932
+ // Surface atom 3's resolver diagnostics under verbose debug. The dispatcher
933
+ // traces every candidate path it inspects, which is the cheapest way to
934
+ // diagnose a payload-less install.
935
+ if (TRACE_MODE && env.ATOM_DEBUG === undefined) {
936
+ env.ATOM_DEBUG = "1";
937
+ }
938
+ // Atom requires Java >= 23 (jar-kind platforms only)
939
+ if (readEnvironmentVariable("ATOM_JAVA_HOME")) {
940
+ env.JAVA_HOME = readEnvironmentVariable("ATOM_JAVA_HOME");
941
+ }
942
+ if (isWin) {
943
+ env.PATH = `${env.PATH || env.Path}${_delimiter}${join(
944
+ dirNameStr,
945
+ "node_modules",
946
+ ".bin",
947
+ )}`;
948
+ } else {
949
+ env.PATH = `${env.PATH}${_delimiter}${join(
950
+ dirNameStr,
951
+ "node_modules",
952
+ ".bin",
953
+ )}`;
954
+ }
955
+ const result = safeSpawnSync(ATOM_BIN, args, {
956
+ cwd,
957
+ shell: isWin,
958
+ killSignal: "SIGKILL",
959
+ env,
960
+ });
961
+ const isJarKind = atomProviderKind() === "jar";
962
+ if (result.stderr) {
963
+ if (
964
+ isJarKind &&
965
+ (result.stderr?.includes(
966
+ "has been compiled by a more recent version of the Java Runtime",
967
+ ) ||
968
+ result.stderr?.includes(
969
+ "Error: Could not create the Java Virtual Machine",
970
+ ))
971
+ ) {
972
+ console.log(
973
+ "Atom requires Java 23 or above. To improve the SBOM accuracy, please install a suitable version, set the JAVA_HOME environment variable, and re-run cdxgen.\nAlternatively, use the cdxgen container image.",
974
+ );
975
+ console.log(
976
+ env["JAVA_HOME"]
977
+ ? "JAVA_HOME is currently set. Check that it points to a supported JDK."
978
+ : "JAVA_HOME is not set.",
979
+ );
980
+ } else if (result.stderr?.includes("astgen")) {
981
+ console.warn(
982
+ "WARN: Unable to locate astgen command. Install atom globally using sudo npm install -g @appthreat/atom-parsetools to resolve this issue.",
983
+ );
984
+ } else if (
985
+ result.stderr?.includes(
986
+ "The crash happened outside the Java Virtual Machine in native code",
987
+ )
988
+ ) {
989
+ console.warn(
990
+ "WARN: The binary plugin used by atom has crashed. Please try an alternative container image and file an issue with steps to reproduce at: https://github.com/AppThreat/atom/issues",
991
+ );
992
+ } else if (
993
+ result.stderr?.includes("Could not parse command line options")
994
+ ) {
995
+ console.warn(
996
+ "Invalid command-line options passed to atom. Please file a bug in the cdxgen repository.",
997
+ );
998
+ }
999
+ }
1000
+ if (result.stdout) {
1001
+ if (result.stdout.includes("No language frontend supported for language")) {
1002
+ console.log("This language is not yet supported by atom.");
1003
+ isSupported = false;
1004
+ } else if (
1005
+ isJarKind &&
1006
+ (result.stdout.includes(
1007
+ "The crash happened outside the Java Virtual Machine in native code",
1008
+ ) ||
1009
+ result.stdout.includes(
1010
+ "A fatal error has been detected by the Java Runtime Environment",
1011
+ ))
1012
+ ) {
1013
+ console.warn(
1014
+ "WARN: The binary plugin used by atom has crashed. Please try an alternative container image and file an issue with steps to reproduce at: https://github.com/AppThreat/atom/issues",
1015
+ );
1016
+ }
1017
+ }
1018
+ if (DEBUG_MODE) {
1019
+ if (result.stdout) {
1020
+ console.log(result.stdout);
1021
+ }
1022
+ if (result.stderr) {
1023
+ console.log(result.stderr);
1024
+ }
1025
+ }
1026
+ // atom 3's dispatcher propagates the child exit status, so a non-zero exit is
1027
+ // finally observable. Report it rather than treating a failed analysis as a
1028
+ // success (the spawn `error` field is only set when the process could not be
1029
+ // launched at all). A null status (signal/timeout) is treated as failure.
1030
+ if (result.status !== null && result.status !== 0) {
1031
+ console.warn(
1032
+ `WARN: atom exited with status ${result.status}; the analysis may be incomplete.`,
1033
+ );
1034
+ return false;
1035
+ }
1036
+ return isSupported && !result.error && result.status === 0;
1037
+ }
1038
+
1039
+ /**
1040
+ * Find the imported modules in the application with atom parsedeps command
1041
+ *
1042
+ * @param {string} src
1043
+ * @param {string} language
1044
+ * @param {string} methodology
1045
+ * @param {string} slicesFile
1046
+ * @param {Object} options CLI options
1047
+ * @returns List of imported modules
1048
+ */
1049
+ export function findAppModules(
1050
+ src,
1051
+ language,
1052
+ methodology = "usages",
1053
+ slicesFile = undefined,
1054
+ options = {},
1055
+ ) {
1056
+ const tempDir = safeMkdtempSync(join(tmpdir(), "atom-deps-"));
1057
+ const atomFile = join(tempDir, `${language}-app.atom`);
1058
+ if (!slicesFile) {
1059
+ slicesFile = join(tempDir, "slices.json");
1060
+ }
1061
+ let retList = [];
1062
+ const args = [
1063
+ methodology,
1064
+ "-l",
1065
+ language,
1066
+ "-o",
1067
+ resolve(atomFile),
1068
+ "--slice-outfile",
1069
+ resolve(slicesFile),
1070
+ ];
1071
+ args.push(resolve(src));
1072
+ executeAtom(src, args, buildAtomCommandEnv(options, language));
1073
+ if (safeExistsSync(slicesFile)) {
1074
+ const slicesData = JSON.parse(readFileSync(slicesFile, "utf-8"), {
1075
+ encoding: "utf-8",
1076
+ });
1077
+ if (slicesData && Object.keys(slicesData) && slicesData.modules) {
1078
+ retList = slicesData.modules;
1079
+ } else {
1080
+ retList = slicesData;
1081
+ }
1082
+ } else {
1083
+ console.log(
1084
+ "Slicing was not successful. For large projects (> 1 million lines of code), try running atom cli externally in Java mode. Please refer to the instructions in https://github.com/cdxgen/cdxgen/blob/master/ADVANCED.md.",
1085
+ );
1086
+ }
1087
+ // Clean up
1088
+ if (tempDir?.startsWith(tmpdir())) {
1089
+ safeRmSync(tempDir, { recursive: true, force: true });
1090
+ }
1091
+ return retList;
1092
+ }