@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,861 @@
1
+ import { readFileSync } from "node:fs";
2
+
3
+ import { tryBuildPurl } from "../inventory/purl.js";
4
+
5
+ /**
6
+ * Zig `build.zig.zon` parser.
7
+ *
8
+ * `build.zig.zon` is ZON — Zig Object Notation — and it is not JSON. It uses
9
+ * unquoted `.field = value` syntax, `.{}` anonymous struct literals, tuples
10
+ * (positional struct fields), multiline string literals, character literals,
11
+ * hex/underscore-separated numbers, and enum literals (`.foo`). A naive
12
+ * `JSON.parse` with fixups cannot read it, so this module ships a real
13
+ * tokenizer and recursive-descent parser.
14
+ *
15
+ * The grammar implemented here is the subset that appears in `build.zig.zon`:
16
+ * anonymous struct literals, tuples, string literals (with the full Zig escape
17
+ * set), multiline string literals, numbers, character literals, booleans,
18
+ * `null`, enum literals, and `//` line comments — ZON is Zig syntax, and the
19
+ * manifest `zig init` generates is largely comments.
20
+ */
21
+
22
+ /**
23
+ * Parse a Zig `build.zig.zon` file and return a package list and parent
24
+ * component describing the project and its dependencies.
25
+ *
26
+ * Zig dependencies are content-addressed rather than versioned by tag, so a
27
+ * fetched dependency's identity comes from its `.hash`. Two encodings are in
28
+ * use: the pre-0.14 hex multihash, where a `1220` prefix denotes SHA-2-256
29
+ * (codec `0x12`, 32-byte length `0x20`), and the 0.14+ form
30
+ * `<name>-<version>-<base64 digest>`, which carries the dependency's declared
31
+ * version. The multihash digest is emitted as a CycloneDX `hashes[]` entry
32
+ * when the codec is recognised; the raw hash string is always kept as a
33
+ * property so nothing is lost for encodings that cannot be decoded.
34
+ *
35
+ * `zig` is not a registered purl type, so dependencies use `pkg:generic/...`
36
+ * with a `cdx:purl:proposedType=zig` property and a `download_url` qualifier
37
+ * built from the `url`.
38
+ *
39
+ * @param {string} zonFile Path to `build.zig.zon`
40
+ * @returns {{ pkgList: object[], parentComponent: object }} parsed packages
41
+ */
42
+ export function parseBuildZigZon(zonFile) {
43
+ let content;
44
+ try {
45
+ content = readFileSync(zonFile, "utf-8");
46
+ } catch (error) {
47
+ console.warn(`Failed to read ${zonFile}: ${error.message}`);
48
+ return { pkgList: [], parentComponent: {} };
49
+ }
50
+ return parseBuildZigZonContent(content, zonFile);
51
+ }
52
+
53
+ /**
54
+ * Parse ZON content (already read from a file or extracted from an archive)
55
+ * into a package list and parent component.
56
+ *
57
+ * The content-based entry point lets the resolver parse manifests read from
58
+ * `.tar.gz` cache archives without writing them to a temp file.
59
+ *
60
+ * @param {string} content Raw ZON source
61
+ * @param {string} [sourceLabel] Path or label used in `internal:SrcFile`
62
+ * evidence. When omitted, `"<zon-content>"` is used.
63
+ * @returns {{ pkgList: object[], parentComponent: object }} parsed packages
64
+ */
65
+ export function parseBuildZigZonContent(
66
+ content,
67
+ sourceLabel = "<zon-content>",
68
+ ) {
69
+ const pkgList = [];
70
+ let parentComponent = {};
71
+
72
+ let root;
73
+ try {
74
+ root = parseZon(content);
75
+ } catch (error) {
76
+ console.warn(`Failed to parse ZON content: ${error.message}`);
77
+ return { pkgList, parentComponent };
78
+ }
79
+
80
+ if (!root || typeof root !== "object") {
81
+ return { pkgList, parentComponent };
82
+ }
83
+
84
+ const name = typeof root.name === "string" ? root.name : undefined;
85
+ const version = typeof root.version === "string" ? root.version : undefined;
86
+ if (name) {
87
+ parentComponent = {
88
+ type: "application",
89
+ name,
90
+ ...(version ? { version } : {}),
91
+ description: `Zig project: ${name}`,
92
+ properties: [
93
+ { name: "internal:SrcFile", value: sourceLabel },
94
+ ...(version ? [{ name: "cdx:zig:version", value: version }] : []),
95
+ ],
96
+ };
97
+ if (root.minimum_zig_version) {
98
+ parentComponent.properties.push({
99
+ name: "cdx:zig:minimum_zig_version",
100
+ value: `${root.minimum_zig_version}`,
101
+ });
102
+ }
103
+ if (root.fingerprint) {
104
+ parentComponent.properties.push({
105
+ name: "cdx:zig:fingerprint",
106
+ value: `${root.fingerprint}`,
107
+ });
108
+ }
109
+ }
110
+
111
+ const dependencies = root.dependencies;
112
+ if (
113
+ dependencies &&
114
+ typeof dependencies === "object" &&
115
+ !Array.isArray(dependencies)
116
+ ) {
117
+ for (const [depName, depData] of Object.entries(dependencies)) {
118
+ // Skip the parser's internal positional-tuple bucket.
119
+ if (depName === "_positional") continue;
120
+ if (!depData || typeof depData !== "object") continue;
121
+ const pkg = buildZigPackage(depName, depData, sourceLabel);
122
+ if (pkg) {
123
+ pkgList.push(pkg);
124
+ }
125
+ }
126
+ }
127
+
128
+ return { pkgList, parentComponent };
129
+ }
130
+
131
+ /**
132
+ * Build a component-like package record for a single Zig dependency.
133
+ *
134
+ * A dependency is either fetched (carries `.url` and `.hash`) or local
135
+ * (carries `.path`). Both are scoped `required` — a path dependency is a build
136
+ * input the package cannot be built without. Its local nature is recorded in
137
+ * `cdx:zig:local` and `cdx:zig:path` instead, and it carries no `download_url`
138
+ * because there is nothing to fetch.
139
+ *
140
+ * @param {string} depName Dependency name
141
+ * @param {object} depData Parsed dependency struct
142
+ * @param {string} zonFile Source file path for evidence
143
+ * @returns {object|null} Package record, or null when the entry is unusable
144
+ */
145
+ function buildZigPackage(depName, depData, zonFile) {
146
+ const url = typeof depData.url === "string" ? depData.url : undefined;
147
+ const hash = typeof depData.hash === "string" ? depData.hash : undefined;
148
+ const depPath = typeof depData.path === "string" ? depData.path : undefined;
149
+ const isLocal = !!depPath && !url;
150
+ const isLazy = depData.lazy === true;
151
+
152
+ const version = zigDepVersion(url, hash);
153
+ const properties = [
154
+ { name: "internal:SrcFile", value: zonFile },
155
+ { name: "cdx:purl:proposedType", value: "zig" },
156
+ ];
157
+ if (url) {
158
+ properties.push({ name: "cdx:zig:url", value: url });
159
+ }
160
+ if (depPath) {
161
+ properties.push({ name: "cdx:zig:path", value: depPath });
162
+ }
163
+ if (hash) {
164
+ properties.push({ name: "cdx:zig:hash", value: hash });
165
+ }
166
+ if (isLocal) {
167
+ properties.push({ name: "cdx:zig:local", value: "true" });
168
+ }
169
+ if (isLazy) {
170
+ properties.push({ name: "cdx:zig:lazy", value: "true" });
171
+ }
172
+
173
+ const qualifiers = {};
174
+ if (url) {
175
+ qualifiers.download_url = url;
176
+ }
177
+
178
+ const purl = tryBuildPurl({
179
+ type: "generic",
180
+ name: depName,
181
+ version: version || undefined,
182
+ qualifiers: Object.keys(qualifiers).length ? qualifiers : undefined,
183
+ });
184
+
185
+ const pkg = {
186
+ name: depName,
187
+ ...(version ? { version } : {}),
188
+ type: "library",
189
+ scope: isLazy ? "optional" : "required",
190
+ properties,
191
+ evidence: {
192
+ identity: {
193
+ field: "purl",
194
+ confidence: 1.0,
195
+ methods: [
196
+ {
197
+ technique: "manifest-analysis",
198
+ confidence: 1.0,
199
+ value: zonFile,
200
+ },
201
+ ],
202
+ },
203
+ },
204
+ };
205
+
206
+ if (purl) {
207
+ pkg.purl = purl;
208
+ pkg["bom-ref"] = decodeURIComponent(purl);
209
+ } else {
210
+ pkg["bom-ref"] = `library:${depName}:${version || ""}`;
211
+ }
212
+
213
+ // A `.path` dependency is a directory, not a published artefact: it has no
214
+ // url and no hash, so every local dependency of a given name would otherwise
215
+ // share the versionless ref `pkg:generic/<name>`. Two sibling manifests each
216
+ // declaring a `local_lib` would then collide on bom-ref and silently merge
217
+ // their edges. The normalised relative path is what distinguishes them, so
218
+ // it keys the ref while the purl stays a plain package identity.
219
+ if (isLocal) {
220
+ pkg["bom-ref"] = `library:${depName}:${normalizeZigPath(depPath)}`;
221
+ }
222
+
223
+ // Decode the multihash only when the codec is unambiguously SHA-2-256.
224
+ // A mislabelled hashes.alg is worse than an absent hash, because downstream
225
+ // tools verify fetched artefacts against it.
226
+ const decoded = decodeZigHash(hash);
227
+ if (decoded) {
228
+ pkg.hashes = [{ alg: decoded.alg, content: decoded.content }];
229
+ }
230
+
231
+ return pkg;
232
+ }
233
+
234
+ /**
235
+ * Normalise a `.path` dependency's relative path into a stable key.
236
+ *
237
+ * `./libs/local`, `libs/local` and `libs/local/` all name the same directory,
238
+ * so they collapse to one form. Backslashes fold to forward slashes so a
239
+ * manifest written on Windows keys the same as one written on POSIX.
240
+ *
241
+ * @param {string} depPath Raw `.path` value from the manifest
242
+ * @returns {string} Normalised relative path
243
+ */
244
+ function normalizeZigPath(depPath) {
245
+ const segments = [];
246
+ for (const segment of depPath.replace(/\\/g, "/").split("/")) {
247
+ if (segment === "" || segment === ".") {
248
+ continue;
249
+ }
250
+ if (segment === ".." && segments.length && segments.at(-1) !== "..") {
251
+ segments.pop();
252
+ continue;
253
+ }
254
+ segments.push(segment);
255
+ }
256
+ return segments.join("/") || ".";
257
+ }
258
+
259
+ /**
260
+ * Derive a version string for a Zig dependency from its URL or hash.
261
+ *
262
+ * Zig dependencies have no explicit version field; identity is the content
263
+ * hash. When the URL points at a version tag we extract it so the purl is
264
+ * readable; otherwise the short hash is the stable, content-addressed version.
265
+ *
266
+ * @param {string|undefined} url Fetch URL
267
+ * @param {string|undefined} hash Multihash string
268
+ * @returns {string|undefined} A version string, or undefined when neither is present
269
+ */
270
+ function zigDepVersion(url, hash) {
271
+ if (url) {
272
+ const tagVersion = extractTagVersion(url);
273
+ if (tagVersion) {
274
+ return tagVersion;
275
+ }
276
+ }
277
+ if (hash) {
278
+ const packaged = parsePackageHash(hash);
279
+ if (packaged?.version) {
280
+ return packaged.version;
281
+ }
282
+ const decoded = decodeZigHash(hash);
283
+ if (decoded) {
284
+ return decoded.content.substring(0, 12);
285
+ }
286
+ }
287
+ return undefined;
288
+ }
289
+
290
+ /**
291
+ * Split a Zig 0.14+ package hash into its parts.
292
+ *
293
+ * Since 0.14 the `.hash` field is `<name>-<version>-<digest>`, where the
294
+ * digest is base64 rather than the older `1220…` hex multihash. The version is
295
+ * the dependency's own declared version, which is a better identifier than any
296
+ * digest prefix, so it is preferred when present.
297
+ *
298
+ * @param {string|undefined} hash Hash field value
299
+ * @returns {{name: string, version: string, digest: string}|null} parts, or null
300
+ */
301
+ function parsePackageHash(hash) {
302
+ if (typeof hash !== "string") {
303
+ return null;
304
+ }
305
+ const match = hash.match(
306
+ /^([A-Za-z_][A-Za-z0-9_]*)-(\d[^-]*)-([A-Za-z0-9_-]+)$/,
307
+ );
308
+ if (!match) {
309
+ return null;
310
+ }
311
+ return { name: match[1], version: match[2], digest: match[3] };
312
+ }
313
+
314
+ /**
315
+ * Extract a version-like token from a Zig fetch URL's tag segment.
316
+ *
317
+ * Recognises GitHub/GitLab archive URLs of the form
318
+ * `.../archive/<refs/tags/>X.Y.Z.tar.gz` and bare trailing tag archives. Only
319
+ * returns a value when the final segment looks like a version, so commit-hash
320
+ * archives are left for the hash fallback.
321
+ *
322
+ * @param {string} url Fetch URL
323
+ * @returns {string|undefined} Version token, or undefined
324
+ */
325
+ function extractTagVersion(url) {
326
+ const cleaned = url.split("?")[0].replace(/\.tar\.gz$|\.zip$|\.tgz$/i, "");
327
+ const segments = cleaned.split("/");
328
+ const last = segments[segments.length - 1];
329
+ // Accept dotted version-ish tokens (0.14.0, v1.2.3, 2024.1). Reject pure
330
+ // hex commit hashes, which the hash fallback handles.
331
+ if (/^v?\d+(\.\d+)+/.test(last)) {
332
+ return last.startsWith("v") ? last.slice(1) : last;
333
+ }
334
+ return undefined;
335
+ }
336
+
337
+ /**
338
+ * Decode a Zig multihash string into an algorithm and digest.
339
+ *
340
+ * Zig's `.hash` is a multihash: the first byte is the hash codec and the
341
+ * second is the digest length. Only `0x12` (SHA-2-256) with a 32-byte digest
342
+ * is decoded, because that is what Zig emits and it maps to a CycloneDX
343
+ * algorithm downstream tools can verify against.
344
+ *
345
+ * @param {string|undefined} hash Multihash hex string
346
+ * @returns {{alg: string, content: string}|null} decoded hash, or null
347
+ */
348
+ function decodeZigHash(hash) {
349
+ if (!hash || typeof hash !== "string") {
350
+ return null;
351
+ }
352
+ // Hex digits only; Zig hashes sometimes include the multihash bytes verbatim.
353
+ const hex = hash.toLowerCase();
354
+ if (hex.length < 4) {
355
+ return null;
356
+ }
357
+ const codec = hex.substring(0, 2);
358
+ const lengthByte = hex.substring(2, 4);
359
+ if (codec === "12" && lengthByte === "20") {
360
+ // 0x12 = sha2-256, 0x20 = 32 bytes (64 hex chars)
361
+ const digest = hex.substring(4, 68);
362
+ if (digest.length === 64) {
363
+ return { alg: "SHA-256", content: digest };
364
+ }
365
+ }
366
+ return null;
367
+ }
368
+
369
+ // ---------------------------------------------------------------------------
370
+ // ZON tokenizer
371
+ // ---------------------------------------------------------------------------
372
+
373
+ const SINGLE_CHAR_TOKENS = new Set(["{", "}", "[", "]", "(", ")", ",", "="]);
374
+
375
+ /**
376
+ * Tokenize a ZON source string.
377
+ *
378
+ * The tokenizer is intentionally separate from the parser so each literal form
379
+ * (string escapes, multiline strings, hex numbers, char literals) is handled
380
+ * in one place and can be unit-tested in isolation.
381
+ *
382
+ * @param {string} src ZON source
383
+ * @returns {Array<{type: string, value: *}>} tokens
384
+ * @throws {Error} when the source contains a character that cannot begin a token
385
+ */
386
+ export function tokenizeZon(src) {
387
+ const tokens = [];
388
+ let i = 0;
389
+ const len = src.length;
390
+
391
+ const isIdentStart = (c) => /[A-Za-z_]/.test(c);
392
+ const isIdentPart = (c) => /[A-Za-z0-9_]/.test(c);
393
+ const isDigit = (c) => c >= "0" && c <= "9";
394
+
395
+ while (i < len) {
396
+ const c = src[i];
397
+
398
+ // Whitespace
399
+ if (c === " " || c === "\t" || c === "\r" || c === "\n") {
400
+ i++;
401
+ continue;
402
+ }
403
+
404
+ // Line comment. ZON is Zig syntax, so `//` runs to the end of the line.
405
+ // The manifest `zig init` generates is mostly comments, which makes this
406
+ // the common case rather than an edge case. Zig has no block comments.
407
+ if (c === "/" && src[i + 1] === "/") {
408
+ while (i < len && src[i] !== "\n") {
409
+ i++;
410
+ }
411
+ continue;
412
+ }
413
+
414
+ // Anonymous struct literal ".{"
415
+ if (c === "." && src[i + 1] === "{") {
416
+ tokens.push({ type: "STRUCT_START", value: ".{" });
417
+ i += 2;
418
+ continue;
419
+ }
420
+
421
+ // Field access / enum literal ".identifier" or ".@"quoted id""
422
+ if (c === ".") {
423
+ i++;
424
+ if (src[i] === "@" && src[i + 1] === '"') {
425
+ const str = readString(src, i + 1);
426
+ tokens.push({ type: "DOT_IDENT", value: str.value });
427
+ i = str.end;
428
+ } else if (isIdentStart(src[i])) {
429
+ let name = "";
430
+ while (i < len && isIdentPart(src[i])) {
431
+ name += src[i];
432
+ i++;
433
+ }
434
+ tokens.push({ type: "DOT_IDENT", value: name });
435
+ } else {
436
+ throw new Error(`Unexpected "." at position ${i}`);
437
+ }
438
+ continue;
439
+ }
440
+
441
+ // Single-line string literal
442
+ if (c === '"') {
443
+ const str = readString(src, i);
444
+ tokens.push({ type: "STRING", value: str.value });
445
+ i = str.end;
446
+ continue;
447
+ }
448
+
449
+ // Multiline string literal: lines beginning with "\\"
450
+ if (c === "\\" && src[i + 1] === "\\") {
451
+ const ml = readMultilineString(src, i);
452
+ tokens.push({ type: "STRING", value: ml.value });
453
+ i = ml.end;
454
+ continue;
455
+ }
456
+
457
+ // Character / unicode code point literal
458
+ if (c === "'") {
459
+ const ch = readCharLiteral(src, i);
460
+ tokens.push({ type: "STRING", value: ch.value });
461
+ i = ch.end;
462
+ continue;
463
+ }
464
+
465
+ // Number literal (integer or float, decimal or hex, with underscores)
466
+ if (isDigit(c) || (c === "-" && isDigit(src[i + 1]))) {
467
+ const num = readNumber(src, i);
468
+ tokens.push({ type: "NUMBER", value: num.value });
469
+ i = num.end;
470
+ continue;
471
+ }
472
+
473
+ // Identifier / keyword
474
+ if (isIdentStart(c)) {
475
+ let name = "";
476
+ while (i < len && isIdentPart(src[i])) {
477
+ name += src[i];
478
+ i++;
479
+ }
480
+ if (name === "true") {
481
+ tokens.push({ type: "BOOL", value: true });
482
+ } else if (name === "false") {
483
+ tokens.push({ type: "BOOL", value: false });
484
+ } else if (name === "null") {
485
+ tokens.push({ type: "NULL", value: null });
486
+ } else {
487
+ // Other identifiers (e.g. "undefined") are passed through as plain
488
+ // identifier tokens; the parser treats them as opaque values.
489
+ tokens.push({ type: "IDENT", value: name });
490
+ }
491
+ continue;
492
+ }
493
+
494
+ // Built-in-style "@identifier" — treat the whole token as an identifier so
495
+ // unusual manifests do not crash the parser, even though build.zig.zon
496
+ // does not normally contain them.
497
+ if (c === "@") {
498
+ let name = "@";
499
+ i++;
500
+ while (i < len && isIdentPart(src[i])) {
501
+ name += src[i];
502
+ i++;
503
+ }
504
+ tokens.push({ type: "IDENT", value: name });
505
+ continue;
506
+ }
507
+
508
+ if (SINGLE_CHAR_TOKENS.has(c)) {
509
+ tokens.push({ type: c, value: c });
510
+ i++;
511
+ continue;
512
+ }
513
+
514
+ throw new Error(`Unexpected character "${c}" at position ${i}`);
515
+ }
516
+
517
+ return tokens;
518
+ }
519
+
520
+ /**
521
+ * Read a double-quoted string literal starting at `start` (the opening quote),
522
+ * applying Zig's escape sequences.
523
+ *
524
+ * @param {string} src Source
525
+ * @param {number} start Index of the opening `"`
526
+ * @returns {{value: string, end: number}} decoded string and index after the closing quote
527
+ */
528
+ function readString(src, start) {
529
+ let i = start + 1;
530
+ let out = "";
531
+ while (i < src.length) {
532
+ const c = src[i];
533
+ if (c === '"') {
534
+ return { value: out, end: i + 1 };
535
+ }
536
+ if (c === "\\") {
537
+ i++;
538
+ const esc = src[i];
539
+ if (esc === "n") {
540
+ out += "\n";
541
+ } else if (esc === "r") {
542
+ out += "\r";
543
+ } else if (esc === "t") {
544
+ out += "\t";
545
+ } else if (esc === "\\") {
546
+ out += "\\";
547
+ } else if (esc === "'") {
548
+ out += "'";
549
+ } else if (esc === '"') {
550
+ out += '"';
551
+ } else if (esc === "x") {
552
+ out += String.fromCharCode(
553
+ Number.parseInt(src.substring(i + 1, i + 3), 16),
554
+ );
555
+ i += 2;
556
+ } else if (esc === "u") {
557
+ if (src[i + 1] !== "{") {
558
+ throw new Error("Expected '{' after \\u");
559
+ }
560
+ const close = src.indexOf("}", i + 2);
561
+ if (close === -1) {
562
+ throw new Error("Unterminated \\u{...} escape");
563
+ }
564
+ const codePoint = Number.parseInt(src.substring(i + 2, close), 16);
565
+ out += String.fromCodePoint(codePoint);
566
+ i = close;
567
+ } else {
568
+ out += esc;
569
+ }
570
+ i++;
571
+ } else {
572
+ out += c;
573
+ i++;
574
+ }
575
+ }
576
+ throw new Error("Unterminated string literal");
577
+ }
578
+
579
+ /**
580
+ * Read a Zig multiline string literal. Each line beginning with `\\`
581
+ * contributes its remainder; a newline separates consecutive `\\` lines.
582
+ *
583
+ * @param {string} src Source
584
+ * @param {number} start Index of the first backslash
585
+ * @returns {{value: string, end: number}} concatenated string and index past the last line
586
+ */
587
+ function readMultilineString(src, start) {
588
+ let i = start;
589
+ const lines = [];
590
+ while (i < src.length && src[i] === "\\" && src[i + 1] === "\\") {
591
+ // Move past the two backslashes.
592
+ i += 2;
593
+ // Read to end of line.
594
+ let lineEnd = src.indexOf("\n", i);
595
+ if (lineEnd === -1) {
596
+ lineEnd = src.length;
597
+ }
598
+ let line = src.substring(i, lineEnd);
599
+ // Trim a trailing CR so CRLF files behave like LF ones.
600
+ if (line.endsWith("\r")) {
601
+ line = line.slice(0, -1);
602
+ }
603
+ lines.push(line);
604
+ // Advance past the newline.
605
+ i = lineEnd + 1 === src.length ? src.length : lineEnd + 1;
606
+ // Skip blank lines between continuation markers? Zig requires the next
607
+ // line to also begin with `\\` to continue; intervening whitespace-only
608
+ // lines terminate the literal, so we do not skip here.
609
+ }
610
+ return { value: lines.join("\n"), end: i };
611
+ }
612
+
613
+ /**
614
+ * Read a character literal `'…'`, returning its string value with escapes
615
+ * applied. A char literal may encode a single byte or a unicode code point.
616
+ *
617
+ * @param {string} src Source
618
+ * @param {number} start Index of the opening `'`
619
+ * @returns {{value: string, end: number}} decoded character and index after the closing quote
620
+ */
621
+ function readCharLiteral(src, start) {
622
+ let i = start + 1;
623
+ let value = "";
624
+ while (i < src.length) {
625
+ const c = src[i];
626
+ if (c === "'") {
627
+ return { value, end: i + 1 };
628
+ }
629
+ if (c === "\\") {
630
+ i++;
631
+ const esc = src[i];
632
+ if (esc === "n") {
633
+ value += "\n";
634
+ } else if (esc === "r") {
635
+ value += "\r";
636
+ } else if (esc === "t") {
637
+ value += "\t";
638
+ } else if (esc === "\\") {
639
+ value += "\\";
640
+ } else if (esc === "'") {
641
+ value += "'";
642
+ } else if (esc === '"') {
643
+ value += '"';
644
+ } else if (esc === "x") {
645
+ value += String.fromCharCode(
646
+ Number.parseInt(src.substring(i + 1, i + 3), 16),
647
+ );
648
+ i += 2;
649
+ } else if (esc === "u") {
650
+ const close = src.indexOf("}", i + 2);
651
+ const codePoint = Number.parseInt(src.substring(i + 2, close), 16);
652
+ value += String.fromCodePoint(codePoint);
653
+ i = close;
654
+ } else {
655
+ value += esc;
656
+ }
657
+ i++;
658
+ } else {
659
+ value += c;
660
+ i++;
661
+ }
662
+ }
663
+ throw new Error("Unterminated character literal");
664
+ }
665
+
666
+ /**
667
+ * Read a numeric literal: decimal integer, hex integer (`0x…`), or float, all
668
+ * optionally containing `_` separators and a leading sign. The raw digits are
669
+ * returned as a string so callers decide whether to treat them as a number.
670
+ *
671
+ * @param {string} src Source
672
+ * @param {number} start Index of the first digit (or sign)
673
+ * @returns {{value: string, end: number}} normalised number string and end index
674
+ */
675
+ function readNumber(src, start) {
676
+ let i = start;
677
+ if (src[i] === "-") {
678
+ i++;
679
+ }
680
+ if (src[i] === "0" && (src[i + 1] === "x" || src[i + 1] === "X")) {
681
+ i += 2;
682
+ let digits = "";
683
+ while (i < src.length && /[0-9a-fA-F_]/.test(src[i])) {
684
+ digits += src[i];
685
+ i++;
686
+ }
687
+ return {
688
+ value: `${src[start] === "-" ? "-" : ""}0x${digits.replace(/_/g, "")}`,
689
+ end: i,
690
+ };
691
+ }
692
+ let digits = "";
693
+ while (i < src.length && /[0-9_]/.test(src[i])) {
694
+ digits += src[i];
695
+ i++;
696
+ }
697
+ if (src[i] === "." && /[0-9]/.test(src[i + 1])) {
698
+ digits += ".";
699
+ i++;
700
+ while (i < src.length && /[0-9_]/.test(src[i])) {
701
+ digits += src[i];
702
+ i++;
703
+ }
704
+ }
705
+ // Exponent (e.g. 1e10).
706
+ if (src[i] === "e" || src[i] === "E") {
707
+ digits += src[i];
708
+ i++;
709
+ if (src[i] === "+" || src[i] === "-") {
710
+ digits += src[i];
711
+ i++;
712
+ }
713
+ while (i < src.length && /[0-9_]/.test(src[i])) {
714
+ digits += src[i];
715
+ i++;
716
+ }
717
+ }
718
+ return {
719
+ value: `${src[start] === "-" ? "-" : ""}${digits.replace(/_/g, "")}`,
720
+ end: i,
721
+ };
722
+ }
723
+
724
+ // ---------------------------------------------------------------------------
725
+ // ZON recursive-descent parser
726
+ // ---------------------------------------------------------------------------
727
+
728
+ /**
729
+ * Parse a ZON source string into a JavaScript value.
730
+ *
731
+ * Structs become plain objects keyed by field name; tuple (positional) values
732
+ * are collected under a `_positional` array. Enum literals (`.foo`) become the
733
+ * bare identifier string.
734
+ *
735
+ * @param {string} src ZON source
736
+ * @returns {*} parsed value
737
+ */
738
+ export function parseZon(src) {
739
+ const tokens = tokenizeZon(src);
740
+ const parser = new ZonParser(tokens);
741
+ const result = parser.parseValue();
742
+ parser.expectEnd();
743
+ return result;
744
+ }
745
+
746
+ /**
747
+ * Recursive-descent parser over a token stream. Kept as a class so the parse
748
+ * position is shared across the mutually recursive value/array/struct rules.
749
+ */
750
+ class ZonParser {
751
+ constructor(tokens) {
752
+ this.tokens = tokens;
753
+ this.pos = 0;
754
+ }
755
+
756
+ peek() {
757
+ return this.tokens[this.pos];
758
+ }
759
+
760
+ next() {
761
+ return this.tokens[this.pos++];
762
+ }
763
+
764
+ expect(type) {
765
+ const tok = this.next();
766
+ if (!tok || tok.type !== type) {
767
+ throw new Error(
768
+ `Expected ${type} but got ${tok ? tok.type : "end of input"}`,
769
+ );
770
+ }
771
+ return tok;
772
+ }
773
+
774
+ expectEnd() {
775
+ if (this.pos < this.tokens.length) {
776
+ const tok = this.peek();
777
+ throw new Error(`Unexpected trailing token ${tok.type}`);
778
+ }
779
+ }
780
+
781
+ parseValue() {
782
+ const tok = this.peek();
783
+ if (!tok) {
784
+ throw new Error("Unexpected end of input");
785
+ }
786
+ switch (tok.type) {
787
+ case "STRUCT_START":
788
+ return this.parseStruct();
789
+ case "[":
790
+ return this.parseArray();
791
+ case "(": {
792
+ // Parenthesised expression: unwrap to the inner value.
793
+ this.next();
794
+ const inner = this.parseValue();
795
+ this.expect(")");
796
+ return inner;
797
+ }
798
+ case "STRING":
799
+ this.next();
800
+ return tok.value;
801
+ case "NUMBER":
802
+ this.next();
803
+ return tok.value;
804
+ case "BOOL":
805
+ this.next();
806
+ return tok.value;
807
+ case "NULL":
808
+ this.next();
809
+ return null;
810
+ case "IDENT":
811
+ // "undefined" and other bare identifiers pass through as strings.
812
+ this.next();
813
+ return tok.value;
814
+ case "DOT_IDENT":
815
+ // Enum literal `.foo` → bare identifier string.
816
+ this.next();
817
+ return tok.value;
818
+ default:
819
+ throw new Error(`Unexpected token ${tok.type}`);
820
+ }
821
+ }
822
+
823
+ parseArray() {
824
+ this.expect("[");
825
+ const items = [];
826
+ while (this.peek() && this.peek().type !== "]") {
827
+ items.push(this.parseValue());
828
+ if (this.peek() && this.peek().type === ",") {
829
+ this.next();
830
+ } else {
831
+ break;
832
+ }
833
+ }
834
+ this.expect("]");
835
+ return items;
836
+ }
837
+
838
+ parseStruct() {
839
+ this.expect("STRUCT_START");
840
+ const result = { _positional: [] };
841
+ while (this.peek() && this.peek().type !== "}") {
842
+ const tok = this.peek();
843
+ if (tok.type === "DOT_IDENT") {
844
+ // Named field: .name = value
845
+ this.next();
846
+ this.expect("=");
847
+ result[tok.value] = this.parseValue();
848
+ } else {
849
+ // Positional (tuple) element.
850
+ result._positional.push(this.parseValue());
851
+ }
852
+ if (this.peek() && this.peek().type === ",") {
853
+ this.next();
854
+ } else {
855
+ break;
856
+ }
857
+ }
858
+ this.expect("}");
859
+ return result;
860
+ }
861
+ }