@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,618 @@
1
+ const IREG_NAME_CHAR_REGEX =
2
+ /^([a-zA-Z0-9\-._~!$&'()*+,;=\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|%[a-fA-F0-9]{2})*$/u;
3
+
4
+ /**
5
+ * Represents the parsed components of an IRI.
6
+ * @typedef {Object} IRIComponents
7
+ * @property {string} scheme
8
+ * @property {string} [userinfo]
9
+ * @property {string} [host]
10
+ * @property {string} [port]
11
+ * @property {string} path
12
+ * @property {string} [query]
13
+ * @property {string} [fragment]
14
+ * @property {boolean} valid
15
+ * @property {string} [error]
16
+ */
17
+
18
+ /**
19
+ * Parses an IRI string according to RFC 3987.
20
+ * @param {string} iri The IRI string to parse.
21
+ * @returns {IRIComponents} An object containing the parsed components and validity status.
22
+ */
23
+ export function parseIRI(iri) {
24
+ // Initialize result object
25
+ const result = {
26
+ scheme: "",
27
+ path: "",
28
+ valid: false,
29
+ hasAuthority: false,
30
+ error: "Parsing not started",
31
+ };
32
+
33
+ if (typeof iri !== "string") {
34
+ result.error = "Input must be a string";
35
+ return result;
36
+ }
37
+
38
+ if (iri.length === 0) {
39
+ result.error = "Input IRI is empty";
40
+ return result;
41
+ }
42
+
43
+ if (iri.trim() !== iri) {
44
+ result.error = "Input IRI is not trimmed";
45
+ return result;
46
+ }
47
+
48
+ let index = 0;
49
+ const len = iri.length;
50
+
51
+ // --- 1. Parse Scheme ---
52
+ // scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
53
+ const schemeStart = index;
54
+ if (index >= len || !isAlpha(iri.codePointAt(index))) {
55
+ result.error = "IRI must start with a scheme";
56
+ return result;
57
+ }
58
+ index++; // Consume the first ALPHA
59
+ while (index < len) {
60
+ const code = iri.codePointAt(index);
61
+ if (
62
+ isAlpha(code) ||
63
+ isDigit(code) ||
64
+ code === 0x2b ||
65
+ code === 0x2d ||
66
+ code === 0x2e
67
+ ) {
68
+ // + - .
69
+ // Move index by the character's UTF-16 code unit length
70
+ index += code >= 0x10000 ? 2 : 1;
71
+ } else {
72
+ break;
73
+ }
74
+ }
75
+ if (index === schemeStart) {
76
+ result.error = "Scheme parsing failed";
77
+ return result;
78
+ }
79
+ result.scheme = iri.substring(schemeStart, index);
80
+
81
+ // Expect ':'
82
+ if (index >= len || iri.codePointAt(index) !== 0x3a) {
83
+ // ':'
84
+ result.error = "Scheme must be followed by a colon";
85
+ return result;
86
+ }
87
+ index++; // Consume ':'
88
+
89
+ // --- 2. Parse Hierarchical Part (ihier-part) ---
90
+ // ihier-part = "//" iauthority ipath-abempty / ipath-absolute / ipath-rootless / ipath-empty
91
+ // Check for "//" indicating authority is present
92
+ let hasAuthority = false;
93
+ let authorityEnd;
94
+ if (
95
+ index + 1 < len &&
96
+ iri.codePointAt(index) === 0x2f &&
97
+ iri.codePointAt(index + 1) === 0x2f
98
+ ) {
99
+ // "//"
100
+ hasAuthority = true;
101
+ index += 2; // Consume "//"
102
+
103
+ // --- 2a. Parse Authority (iauthority) ---
104
+ // iauthority = [ iuserinfo "@" ] ihost [ ":" port ]
105
+ const authorityStart = index;
106
+ authorityEnd = index;
107
+ // Find the end of the authority component
108
+ // It ends at the first '/', '?', or '#' or at the end of the string
109
+ while (authorityEnd < len) {
110
+ const code = iri.codePointAt(authorityEnd);
111
+ if (code === 0x2f || code === 0x3f || code === 0x23) {
112
+ // '/', '?', '#'
113
+ break;
114
+ }
115
+ authorityEnd += code >= 0x10000 ? 2 : 1;
116
+ }
117
+
118
+ if (authorityStart < authorityEnd) {
119
+ const authority = iri.substring(authorityStart, authorityEnd);
120
+ const userInfoEndIdx = findUserInfoEnd(authority);
121
+
122
+ let host_part;
123
+ let port_part;
124
+
125
+ if (userInfoEndIdx !== -1) {
126
+ result.userinfo = authority.substring(0, userInfoEndIdx);
127
+ const hostPortStr = authority.substring(userInfoEndIdx + 1);
128
+ [host_part, port_part] = parseHostPort(hostPortStr);
129
+ } else {
130
+ [host_part, port_part] = parseHostPort(authority);
131
+ }
132
+
133
+ // --- Validation: Check if host_part is a valid ireg-name ---
134
+ // Only validate if it's not an IP-literal (doesn't start with '[')
135
+ // parseHostPort should handle IPv4 structural checks.
136
+ if (host_part && !host_part.startsWith("[")) {
137
+ // Trim potential trailing colon from empty port (e.g., "host:")
138
+ // This can happen if the authority ends with ':'
139
+ const trimmedHost = host_part.endsWith(":")
140
+ ? host_part.slice(0, -1)
141
+ : host_part;
142
+ if (!IREG_NAME_CHAR_REGEX.test(trimmedHost)) {
143
+ // Find a specific character that failed? Not strictly necessary for boolean check,
144
+ // but helpful for error message. Let's keep it simple for now.
145
+ result.error = `Invalid character in host (ireg-name) '${trimmedHost}' for IRI '${iri}'`;
146
+ return result; // valid remains false
147
+ }
148
+ }
149
+ // --- End Validation ---
150
+
151
+ result.host = host_part;
152
+ result.port = port_part;
153
+ }
154
+ index = authorityEnd;
155
+ } // else hasAuthority remains false, index is right after ':'
156
+
157
+ // --- 3. Parse Path (one of ipath-abempty, ipath-absolute, ipath-rootless)
158
+ const pathStart = hasAuthority ? authorityEnd : index;
159
+ // Path ends at the first '?' or '#' or at the end of the string
160
+ while (index < len) {
161
+ const code = iri.codePointAt(index);
162
+ if (code === 0x3f || code === 0x23) {
163
+ // '?' '#'
164
+ break;
165
+ }
166
+ index += code >= 0x10000 ? 2 : 1;
167
+ }
168
+ result.path = iri.substring(pathStart, index);
169
+
170
+ // --- 4. Parse Query (?)
171
+ if (index < len && iri.codePointAt(index) === 0x3f) {
172
+ // '?'
173
+ index++; // Consume '?'
174
+ const queryStart = index;
175
+ // Query ends at the first '#' or at the end of the string
176
+ while (index < len && iri.codePointAt(index) !== 0x23) {
177
+ // '#'
178
+ const code = iri.codePointAt(index);
179
+ index += code >= 0x10000 ? 2 : 1;
180
+ }
181
+ result.query = iri.substring(queryStart, index);
182
+ }
183
+
184
+ // --- 5. Parse Fragment (#)
185
+ if (index < len && iri.codePointAt(index) === 0x23) {
186
+ // '#'
187
+ index++; // Consume '#'
188
+ const fragmentStart = index;
189
+ // Fragment ends at the end of the string
190
+ index = len;
191
+ result.fragment = iri.substring(fragmentStart, index);
192
+ }
193
+ result.hasAuthority = hasAuthority;
194
+ // --- Final Validation ---
195
+ result.valid = true;
196
+ delete result.error;
197
+ return result;
198
+ }
199
+
200
+ // --- Helper Functions ---
201
+
202
+ function isAlpha(code) {
203
+ return (code >= 0x41 && code <= 0x5a) || (code >= 0x61 && code <= 0x7a); // A-Z or a-z
204
+ }
205
+
206
+ function isDigit(code) {
207
+ return code >= 0x30 && code <= 0x39; // 0-9
208
+ }
209
+
210
+ /**
211
+ * Finds the index of the last '@' character that is not inside an IPv6 literal [ ... ].
212
+ * Returns -1 if no such '@' is found.
213
+ */
214
+ function findUserInfoEnd(authority) {
215
+ let inIPv6Literal = false;
216
+ let userInfoEndIndex = -1;
217
+
218
+ for (let i = 0; i < authority.length; ) {
219
+ const code = authority.codePointAt(i);
220
+ const charLength = code >= 0x10000 ? 2 : 1;
221
+
222
+ if (code === 0x5b) {
223
+ // '['
224
+ inIPv6Literal = true;
225
+ } else if (code === 0x5d) {
226
+ // ']'
227
+ inIPv6Literal = false;
228
+ } else if (code === 0x40 && !inIPv6Literal) {
229
+ // '@'
230
+ userInfoEndIndex = i; // Keep track of the last one outside brackets
231
+ }
232
+ i += charLength; // Move by the actual character length
233
+ }
234
+ return userInfoEndIndex;
235
+ }
236
+
237
+ /**
238
+ * Parses the host and port from a string like "example.com:8080" or "[::1]:3000".
239
+ * Returns an array [host, port], where port can be undefined.
240
+ */
241
+ function parseHostPort(hostPortStr) {
242
+ if (hostPortStr.length === 0) {
243
+ return ["", undefined];
244
+ }
245
+
246
+ // Check for IPv6 literal [ ... ]
247
+ if (hostPortStr.codePointAt(0) === 0x5b) {
248
+ // '['
249
+ const endBracketIdx = hostPortStr.indexOf("]");
250
+ if (endBracketIdx === -1) {
251
+ // Malformed IPv6 literal - no closing bracket
252
+ return [hostPortStr, undefined];
253
+ }
254
+ const host = hostPortStr.substring(0, endBracketIdx + 1); // Include ']'
255
+
256
+ // Check if there's anything after the closing bracket
257
+ const afterBracket = hostPortStr.substring(endBracketIdx + 1);
258
+
259
+ // If there's content after the bracket, it must start with a colon (for port)
260
+ if (afterBracket.length > 0 && afterBracket[0] !== ":") {
261
+ // Invalid character after closing bracket - return the whole string as host
262
+ // This will cause validation to fail later
263
+ return [hostPortStr, undefined];
264
+ }
265
+
266
+ if (afterBracket.length > 0) {
267
+ // It starts with a colon, parse the port
268
+ const port = afterBracket.substring(1); // Everything after the colon
269
+ return [host, port || undefined];
270
+ }
271
+ return [host, undefined]; // No port
272
+ }
273
+ // Not an IPv6 literal, look for the last ':' not %-encoded
274
+ let portSepIdx = -1;
275
+ for (let i = hostPortStr.length - 1; i >= 0; i--) {
276
+ if (hostPortStr.codePointAt(i) === 0x3a) {
277
+ // ':'
278
+ // Check if it's percent-encoded (e.g., %3A)
279
+ // Ensure we have at least 3 chars before ':'
280
+ if (
281
+ i >= 3 &&
282
+ hostPortStr.codePointAt(i - 1) === 0x25 && // '%'
283
+ isHexDigit(hostPortStr.codePointAt(i - 2)) &&
284
+ isHexDigit(hostPortStr.codePointAt(i - 3))
285
+ ) {
286
+ // ignore
287
+ } else {
288
+ // This is the separator we are looking for
289
+ portSepIdx = i;
290
+ break;
291
+ }
292
+ }
293
+ // Adjust index for potential surrogate pairs when moving backwards
294
+ // This simple backward loop is okay for ASCII ':' check,
295
+ // but full Unicode backward iteration is complex.
296
+ // For ':' (U+003A), simple `i--` works.
297
+ }
298
+
299
+ if (portSepIdx !== -1) {
300
+ const host = hostPortStr.substring(0, portSepIdx);
301
+ const port = hostPortStr.substring(portSepIdx + 1);
302
+ return [host, port || undefined]; // Handle case like "host:" (port is empty)
303
+ }
304
+ return [hostPortStr, undefined]; // No port separator found
305
+ }
306
+
307
+ function isHexDigit(code) {
308
+ return (
309
+ (code >= 0x30 && code <= 0x39) || // 0-9
310
+ (code >= 0x41 && code <= 0x46) || // A-F
311
+ (code >= 0x61 && code <= 0x66)
312
+ ); // a-f
313
+ }
314
+
315
+ // --- Helper functions for detailed RFC 3987 validation ---
316
+ // RFC 3987 unreserved characters (including Unicode)
317
+ const UNRESERVED_CHARS =
318
+ "a-zA-Z0-9\\-._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\u0400-\\u04FF\\u0590-\\u05FF\\u0600-\\u06FF\\u0900-\\u097F\\u4E00-\\u9FFF\\uAC00-\\uD7AF";
319
+
320
+ // RFC 3987 sub-delims
321
+ const SUB_DELIMS_CHARS = "!$&'()*+,;=";
322
+
323
+ // Percent-encoded pattern
324
+ const PCT_ENCODED_PATTERN = "%[a-fA-F0-9]{2}";
325
+
326
+ // ipchar = iunreserved / pct-encoded / sub-delims / ":" / "@"
327
+ const IPCHAR_PATTERN = `(?:[${UNRESERVED_CHARS}${SUB_DELIMS_CHARS}:@]|${PCT_ENCODED_PATTERN})`;
328
+
329
+ // ireg-name = *( iunreserved / pct-encoded / sub-delims )
330
+ const IREG_NAME_PATTERN = `(?:[${UNRESERVED_CHARS}${SUB_DELIMS_CHARS}]|${PCT_ENCODED_PATTERN})*`;
331
+
332
+ // Compile regexes
333
+ const IPCHAR_REGEX = new RegExp(`^${IPCHAR_PATTERN}*$`, "u");
334
+ const IREG_NAME_REGEX = new RegExp(`^${IREG_NAME_PATTERN}$`, "u");
335
+
336
+ function isValidIpCharSequence(str) {
337
+ if (str === null || str === undefined) {
338
+ return true;
339
+ }
340
+ return IPCHAR_REGEX.test(str);
341
+ }
342
+
343
+ function isValidIPv6(ipv6Address) {
344
+ // Simplified regex for IPv6 address validation
345
+ const IPV6_REGEX =
346
+ /^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|^::$|^(?:[0-9a-fA-F]{1,4}:){1,7}:$|^::(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,6}::[0-9a-fA-F]{1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,5}(?::[0-9a-fA-F]{1,4}){1,2}$|^(?:[0-9a-fA-F]{1,4}:){1,4}(?::[0-9a-fA-F]{1,4}){1,3}$|^(?:[0-9a-fA-F]{1,4}:){1,3}(?::[0-9a-fA-F]{1,4}){1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,2}(?::[0-9a-fA-F]{1,4}){1,5}$|^[0-9a-fA-F]{1,4}:(?::[0-9a-fA-F]{1,4}){1,6}$|^:(?::[0-9a-fA-F]{1,4}){1,7}$/;
347
+ return IPV6_REGEX.test(ipv6Address);
348
+ }
349
+
350
+ function isValidIregName(hostStr) {
351
+ if (hostStr === null || hostStr === undefined || hostStr === "") {
352
+ return true;
353
+ }
354
+ // Check if it's an IPv6 literal
355
+ if (hostStr.startsWith("[") && hostStr.endsWith("]")) {
356
+ // Extract the IPv6 address without the brackets
357
+ const ipv6Address = hostStr.slice(1, -1);
358
+ // Validate the IPv6 address
359
+ return isValidIPv6(ipv6Address);
360
+ }
361
+
362
+ // Check if it's an IPv4 address
363
+ if (/^(\d{1,3}\.){3}\d{1,3}$/.test(hostStr)) {
364
+ return true;
365
+ }
366
+
367
+ // For internationalized domain names, we need to be more permissive
368
+ // Allow Unicode characters in domain names
369
+ return IREG_NAME_REGEX.test(hostStr);
370
+ }
371
+
372
+ function validateParsedComponents(components) {
373
+ if (!components.valid) {
374
+ return components;
375
+ }
376
+
377
+ // 1. Validate Authority (host part)
378
+ if (
379
+ components.host !== undefined &&
380
+ components.host !== null &&
381
+ components.host !== ""
382
+ ) {
383
+ if (!isValidIregName(components.host)) {
384
+ return {
385
+ ...components,
386
+ valid: false,
387
+ error: `Invalid character in ireg-name host: '${components.host}'`,
388
+ };
389
+ }
390
+ }
391
+
392
+ // 2. Validate Path segments
393
+ if (components.path !== undefined && components.path !== null) {
394
+ const segments = components.path.split("/");
395
+ const isValidPath = segments.every((segment) =>
396
+ isValidIpCharSequence(segment),
397
+ );
398
+ if (!isValidPath) {
399
+ const failingSegment = segments.find((s) => !isValidIpCharSequence(s));
400
+ return {
401
+ ...components,
402
+ valid: false,
403
+ error: `Invalid character in path segment: '${failingSegment}' (Path: '${components.path}')`,
404
+ };
405
+ }
406
+ }
407
+
408
+ // 3. Validate Query
409
+ if (components.query !== undefined && components.query !== null) {
410
+ // iquery allows ipchar, /, ?
411
+ const IQUERY_PATTERN = `(?:${IPCHAR_PATTERN}|[/?])*`;
412
+ const IQUERY_REGEX = new RegExp(`^${IQUERY_PATTERN}$`, "u");
413
+ if (!IQUERY_REGEX.test(components.query)) {
414
+ return {
415
+ ...components,
416
+ valid: false,
417
+ error: `Invalid character in query: '${components.query}'`,
418
+ };
419
+ }
420
+ }
421
+
422
+ // 4. Validate Fragment
423
+ if (components.fragment !== undefined && components.fragment !== null) {
424
+ // ifragment allows ipchar, /, ?
425
+ const IFRAGMENT_PATTERN = `(?:${IPCHAR_PATTERN}|[/?])*`;
426
+ const IFRAGMENT_REGEX = new RegExp(`^${IFRAGMENT_PATTERN}$`, "u");
427
+ if (!IFRAGMENT_REGEX.test(components.fragment)) {
428
+ return {
429
+ ...components,
430
+ valid: false,
431
+ error: `Invalid character in fragment: '${components.fragment}'`,
432
+ };
433
+ }
434
+ }
435
+
436
+ // Special handling for IPv6 literals
437
+ if (
438
+ components.scheme &&
439
+ components.host?.startsWith("[") &&
440
+ components.host.endsWith("]")
441
+ ) {
442
+ return components;
443
+ }
444
+
445
+ if (
446
+ components.scheme &&
447
+ !components.host &&
448
+ !components.path &&
449
+ !components.query
450
+ ) {
451
+ return {
452
+ ...components,
453
+ valid: false,
454
+ error: "No hostname",
455
+ };
456
+ }
457
+ return components;
458
+ }
459
+
460
+ /**
461
+ * Possible ways of validating an IRI.
462
+ */
463
+ export const IriValidationStrategy = Object.freeze({
464
+ /**
465
+ * Validates the IRI according to RFC 3987 using a custom parser.
466
+ */
467
+ Parse: "parse",
468
+
469
+ /**
470
+ * Validates that the IRI has a valid scheme and does not contain any character forbidden by the Turtle specification.
471
+ */
472
+ Pragmatic: "pragmatic",
473
+
474
+ /**
475
+ * Does not validate the IRI at all.
476
+ */
477
+ None: "none",
478
+ });
479
+
480
+ // biome-ignore-start lint/suspicious/noControlCharactersInRegex: parser
481
+ // Using the regex from the original code
482
+ const PRAGMATIC_IRI_REGEX =
483
+ /^[A-Za-z][\d+-.A-Za-z]*:[^\u0000-\u0020"<>\\^`{|}]*$/u;
484
+ // biome-ignore-end lint/suspicious/noControlCharactersInRegex: parser
485
+
486
+ /**
487
+ * Validate a given IRI according to the given strategy.
488
+ *
489
+ * @param {string} iri a string that may be an IRI.
490
+ * @param {IriValidationStrategy} strategy IRI validation strategy.
491
+ * @return {Error | undefined} An error if the IRI is invalid, or undefined if it is valid.
492
+ */
493
+ export function validateIri(iri, strategy = IriValidationStrategy.Parse) {
494
+ switch (strategy) {
495
+ case IriValidationStrategy.Parse: {
496
+ // console.log(`DEBUG: Validating IRI: '${iri}' with Parse strategy`);
497
+ let parseResult = parseIRI(iri);
498
+ // console.log(
499
+ // "DEBUG: parseIRI result:",
500
+ // JSON.stringify(parseResult, null, 2),
501
+ // ); // Log full result
502
+
503
+ if (parseResult.valid) {
504
+ // console.log(
505
+ // "DEBUG: IRI is structurally valid, performing detailed checks...",
506
+ // );
507
+ parseResult = validateParsedComponents(parseResult);
508
+ // console.log(
509
+ // "DEBUG: validateParsedComponents result:",
510
+ // JSON.stringify(parseResult, null, 2),
511
+ // ); // Log full result after detailed checks
512
+ }
513
+
514
+ if (parseResult.valid) {
515
+ // console.log(`DEBUG: Final result for '${iri}': VALID`);
516
+ return undefined;
517
+ }
518
+ const errorMessage =
519
+ parseResult.error ||
520
+ `IRI failed detailed RFC 3987 validation: '${iri}'`;
521
+ // console.log(
522
+ // `DEBUG: Final result for '${iri}': INVALID - ${errorMessage}`,
523
+ // );
524
+ return new Error(
525
+ `Invalid IRI according to RFC 3987 parsing: ${errorMessage}`,
526
+ );
527
+ }
528
+ case IriValidationStrategy.Pragmatic:
529
+ return PRAGMATIC_IRI_REGEX.test(iri)
530
+ ? undefined
531
+ : new Error(`Invalid IRI: '${iri}'`);
532
+ case IriValidationStrategy.None:
533
+ return undefined;
534
+ default:
535
+ return new Error(`Not supported validation strategy "${strategy}"`);
536
+ }
537
+ }
538
+
539
+ const isAsciiHexCode = (code) => {
540
+ return (
541
+ (code >= 0x30 && code <= 0x39) ||
542
+ (code >= 0x41 && code <= 0x46) ||
543
+ (code >= 0x61 && code <= 0x66)
544
+ );
545
+ };
546
+
547
+ const hasValidPercentEncoding = (value) => {
548
+ for (let index = 0; index < value.length; index++) {
549
+ if (value.charCodeAt(index) !== 0x25) {
550
+ continue;
551
+ }
552
+ const firstHex = value.charCodeAt(index + 1);
553
+ const secondHex = value.charCodeAt(index + 2);
554
+ if (!isAsciiHexCode(firstHex) || !isAsciiHexCode(secondHex)) {
555
+ return false;
556
+ }
557
+ index += 2;
558
+ }
559
+ return true;
560
+ };
561
+
562
+ /**
563
+ * Function to validate an externalReference URL for conforming to the JSON schema or bomLink
564
+ * https://github.com/CycloneDX/cyclonedx-core-java/blob/75575318b268dda9e2a290761d7db11b4f414255/src/main/resources/bom-1.5.schema.json#L1140
565
+ * https://datatracker.ietf.org/doc/html/rfc3987#section-2.2
566
+ * https://cyclonedx.org/capabilities/bomlink/
567
+ *
568
+ * @param {String} iri IRI to validate
569
+ *
570
+ * @returns {Boolean} Flag indicating whether the supplied URL is valid or not
571
+ *
572
+ */
573
+ export function isValidIriReference(iri) {
574
+ if (typeof iri !== "string") {
575
+ return false;
576
+ }
577
+ const trimmedIri = iri.trim();
578
+ if (iri === "" || iri !== trimmedIri) {
579
+ return false;
580
+ }
581
+
582
+ if (/[${}]/.test(iri)) {
583
+ return false;
584
+ }
585
+
586
+ // Validate percent-encoding with a linear scan to avoid regex backtracking
587
+ // issues on very long attacker-controlled inputs.
588
+ if (!hasValidPercentEncoding(iri)) {
589
+ return false;
590
+ }
591
+
592
+ // Use the dedicated IRI validator for strict RFC 3987 compliance check
593
+ const validateIriResult = validateIri(iri, IriValidationStrategy.Strict);
594
+
595
+ // If the IRI validator reports an error, it's invalid.
596
+ if (validateIriResult instanceof Error) {
597
+ return false;
598
+ }
599
+
600
+ // Optional: Additional check for common URI schemes (like http/https)
601
+ // using the built-in URL constructor for stricter URI syntax conformance.
602
+ // This might catch cases where an IRI is valid per RFC 3987 but not
603
+ // strictly a valid URI as parsed by the URL constructor (e.g., missing host for http).
604
+ // Only apply this if the IRI looks like it starts with a scheme like http.
605
+ if (/^https?:/i.test(iri)) {
606
+ // Case-insensitive check for http/https
607
+ try {
608
+ // Attempt to construct a URL object. If it fails, it's likely not a valid URI structure.
609
+ new URL(iri); // Use iri here
610
+ } catch (_error) {
611
+ // If URL construction fails, consider the IRI reference invalid for http-like schemes.
612
+ return false;
613
+ }
614
+ }
615
+
616
+ // 8. If all checks pass, the IRI reference is considered valid.
617
+ return true;
618
+ }