@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.
- package/README.md +921 -87
- package/bin/audit.js +239 -0
- package/bin/cdxgen.js +2324 -0
- package/bin/convert.js +213 -0
- package/bin/evinse.js +353 -0
- package/bin/hbom.js +495 -0
- package/bin/repl.js +2224 -0
- package/bin/sign.js +195 -0
- package/bin/tracebom.js +295 -0
- package/bin/validate.js +268 -0
- package/bin/verify.js +189 -0
- package/data/README.md +307 -0
- package/data/bom-1.4.schema.json +1605 -0
- package/data/bom-1.5.schema.json +3660 -0
- package/data/bom-1.6.schema.json +5511 -0
- package/data/bom-1.7.schema.json +6700 -0
- package/data/cbomosdb-queries.json +68 -0
- package/data/component-tags.json +339 -0
- package/data/container-knowledge-index.json +125 -0
- package/data/cosdb-queries.json +17 -0
- package/data/crypto-oid.json +1998 -0
- package/data/cryptography-defs.json +3793 -0
- package/data/cryptography-defs.schema.json +576 -0
- package/data/cyclonedx-2.0-bundled.schema.json +7182 -0
- package/data/frameworks-list.json +219 -0
- package/data/glibc-stdlib.json +117 -0
- package/data/gtfobins-index.json +6296 -0
- package/data/helpers/init.gradle +71 -0
- package/data/jsf-0.82.schema.json +211 -0
- package/data/known-licenses.json +82 -0
- package/data/lic-mapping.json +338 -0
- package/data/license-aliases.json +6624 -0
- package/data/license-db.json +39059 -0
- package/data/license-deprecations.json +302 -0
- package/data/lolbas-index.json +150 -0
- package/data/predictive-audit-allowlist.json +11 -0
- package/data/pypi-pkg-aliases.json +1199 -0
- package/data/python-stdlib.json +308 -0
- package/data/queries-darwin.json +193 -0
- package/data/queries-win.json +257 -0
- package/data/queries.json +268 -0
- package/data/ruby-known-modules.json +281 -0
- package/data/rules/ai-agent-governance.yaml +323 -0
- package/data/rules/ai-bom.yaml +268 -0
- package/data/rules/ai-oversight.yaml +186 -0
- package/data/rules/ai-provenance.yaml +92 -0
- package/data/rules/asar-archives.yaml +150 -0
- package/data/rules/cbom-security.yaml +165 -0
- package/data/rules/chrome-extensions.yaml +248 -0
- package/data/rules/ci-permissions.yaml +802 -0
- package/data/rules/container-risk.yaml +353 -0
- package/data/rules/dependency-sources.yaml +236 -0
- package/data/rules/golem-go.yaml +229 -0
- package/data/rules/hbom-compliance.yaml +325 -0
- package/data/rules/hbom-performance.yaml +307 -0
- package/data/rules/hbom-security.yaml +248 -0
- package/data/rules/host-topology.yaml +165 -0
- package/data/rules/mcp-servers.yaml +388 -0
- package/data/rules/obom-runtime.yaml +1776 -0
- package/data/rules/package-integrity.yaml +364 -0
- package/data/rules/rootfs-hardening.yaml +179 -0
- package/data/rules/vscode-extensions.yaml +237 -0
- package/data/spdx-export.schema.json +6794 -0
- package/data/spdx-license-list.json +7449 -0
- package/data/spdx-licenses.json +759 -0
- package/data/spdx.schema.json +819 -0
- package/data/templates/README.md +3 -0
- package/data/templates/asvs-4.0.3.cdx.json +2943 -0
- package/data/templates/asvs-5.0.cdx.json +3046 -0
- package/data/templates/bsimm-v13.cdx.json +1008 -0
- package/data/templates/masvs-2.0.0.cdx.json +225 -0
- package/data/templates/nist-ssdf-1.1.cdx.json +828 -0
- package/data/templates/pcissc-secure-slc-1.1.cdx.json +1027 -0
- package/data/templates/scvs-1.0.0.cdx.json +813 -0
- package/data/templates/ssaf-DRAFT-2023-11.cdx.json +127 -0
- package/data/vendor-alias.json +41967 -0
- package/data/wrapdb-releases.json +4227 -0
- package/index.cjs +15 -0
- package/lib/audit/index.js +2800 -0
- package/lib/audit/progress.js +114 -0
- package/lib/audit/reporters.js +937 -0
- package/lib/audit/scoring.js +560 -0
- package/lib/audit/targets.js +798 -0
- package/lib/cli/bomAssembly.js +1833 -0
- package/lib/cli/cliOptions.js +513 -0
- package/lib/cli/index.js +2759 -0
- package/lib/cli/jsBom.js +2087 -0
- package/lib/cli/jvmBom.js +1858 -0
- package/lib/cli/managedBom.js +2083 -0
- package/lib/cli/nativeBom.js +2125 -0
- package/lib/core/activity.js +1087 -0
- package/lib/core/env.js +719 -0
- package/lib/core/fs.js +1058 -0
- package/lib/core/httpClient.js +730 -0
- package/lib/core/logger.js +142 -0
- package/lib/core/parallel.js +323 -0
- package/lib/core/paths.js +70 -0
- package/lib/core/projectConfig.js +122 -0
- package/lib/core/propertySanitizer.js +174 -0
- package/lib/core/spdx.js +5 -0
- package/lib/core/state.js +59 -0
- package/lib/core/text.js +207 -0
- package/lib/core/ui.js +876 -0
- package/lib/core/urls.js +84 -0
- package/lib/ecosystems/asarutils.js +1636 -0
- package/lib/ecosystems/bunutils.js +402 -0
- package/lib/ecosystems/caxa.js +77 -0
- package/lib/ecosystems/chromextutils.js +1174 -0
- package/lib/ecosystems/cmakeResolver.js +587 -0
- package/lib/ecosystems/cppEvidence.js +305 -0
- package/lib/ecosystems/denoutils.js +1094 -0
- package/lib/ecosystems/dotnetutils.js +132 -0
- package/lib/ecosystems/ecosystems.js +2772 -0
- package/lib/ecosystems/golem.js +1807 -0
- package/lib/ecosystems/gradleutils.js +1048 -0
- package/lib/ecosystems/jsEvidence.js +317 -0
- package/lib/ecosystems/npmutils.js +586 -0
- package/lib/ecosystems/parsers-bazel.js +875 -0
- package/lib/ecosystems/parsers-dotnet.js +1430 -0
- package/lib/ecosystems/parsers-gleam.js +302 -0
- package/lib/ecosystems/parsers-go.js +818 -0
- package/lib/ecosystems/parsers-js.js +4222 -0
- package/lib/ecosystems/parsers-jvm.js +948 -0
- package/lib/ecosystems/parsers-misc.js +3191 -0
- package/lib/ecosystems/parsers-python.js +2070 -0
- package/lib/ecosystems/parsers-rust.js +1294 -0
- package/lib/ecosystems/parsers-zig.js +861 -0
- package/lib/ecosystems/pep770.js +341 -0
- package/lib/ecosystems/pylockutils.js +427 -0
- package/lib/ecosystems/pythonutils.js +1281 -0
- package/lib/ecosystems/registryProvenance.js +1003 -0
- package/lib/ecosystems/remote/huggingface.js +1343 -0
- package/lib/ecosystems/rubyutils.js +1629 -0
- package/lib/ecosystems/rusi.js +820 -0
- package/lib/ecosystems/sbtutils.js +972 -0
- package/lib/ecosystems/tea.js +607 -0
- package/lib/ecosystems/utils.js +575 -0
- package/lib/ecosystems/zigResolver.js +410 -0
- package/lib/evinser/db.js +145 -0
- package/lib/evinser/evinser.js +2362 -0
- package/lib/evinser/scalasem.js +65 -0
- package/lib/evinser/swiftsem.js +767 -0
- package/lib/helpers/annotationFormatter.js +84 -0
- package/lib/helpers/bomSigner.js +312 -0
- package/lib/helpers/exportUtils.js +160 -0
- package/lib/helpers/remote/dependency-track.js +117 -0
- package/lib/helpers/versutils.js +202 -0
- package/lib/helpers/vsixutils.js +1069 -0
- package/lib/inventory/agentFormulationParser.js +322 -0
- package/lib/inventory/aiCollector.js +2140 -0
- package/lib/inventory/aiInventory.js +414 -0
- package/lib/inventory/aiModelVariants.js +121 -0
- package/lib/inventory/aiOversightCollector.js +661 -0
- package/lib/inventory/aiProvenanceCollector.js +822 -0
- package/lib/inventory/analyzer.js +6089 -0
- package/lib/inventory/analyzerScope.js +807 -0
- package/lib/inventory/astWorker.js +20 -0
- package/lib/inventory/atomUtils.js +1092 -0
- package/lib/inventory/auditCategories.js +192 -0
- package/lib/inventory/bomUtils.js +369 -0
- package/lib/inventory/cacheCommands.js +182 -0
- package/lib/inventory/cacheDir.js +104 -0
- package/lib/inventory/cbomutils.js +590 -0
- package/lib/inventory/cdxrs.js +434 -0
- package/lib/inventory/ciParsers/azurePipelines.js +295 -0
- package/lib/inventory/ciParsers/circleCi.js +286 -0
- package/lib/inventory/ciParsers/common.js +24 -0
- package/lib/inventory/ciParsers/githubActions.js +2434 -0
- package/lib/inventory/ciParsers/gitlabCi.js +213 -0
- package/lib/inventory/ciParsers/jenkins.js +180 -0
- package/lib/inventory/citations.js +234 -0
- package/lib/inventory/communityAiConfigParser.js +756 -0
- package/lib/inventory/containerRisk.js +204 -0
- package/lib/inventory/cryptoAlgorithmFamily.js +258 -0
- package/lib/inventory/deps.js +807 -0
- package/lib/inventory/depsUtils.js +588 -0
- package/lib/inventory/display.js +2128 -0
- package/lib/inventory/dosai.js +601 -0
- package/lib/inventory/dosaiParsers.js +154 -0
- package/lib/inventory/dynamic.js +145 -0
- package/lib/inventory/envcontext.js +1789 -0
- package/lib/inventory/evidenceUtils.js +774 -0
- package/lib/inventory/fetchBatch.js +779 -0
- package/lib/inventory/fetchRate.js +255 -0
- package/lib/inventory/forgeEnricher.js +300 -0
- package/lib/inventory/formulationParsers.js +422 -0
- package/lib/inventory/gtfobins.js +339 -0
- package/lib/inventory/hbom.js +719 -0
- package/lib/inventory/hbomAnalysis.js +310 -0
- package/lib/inventory/hbomLoader.js +35 -0
- package/lib/inventory/hostTopology.js +835 -0
- package/lib/inventory/inventoryStats.js +100 -0
- package/lib/inventory/jsonLike.js +121 -0
- package/lib/inventory/licenseEnhancer.js +918 -0
- package/lib/inventory/lolbas.js +285 -0
- package/lib/inventory/mcp.js +253 -0
- package/lib/inventory/mcpConfigParser.js +683 -0
- package/lib/inventory/mcpDiscovery.js +112 -0
- package/lib/inventory/mcpPinning.js +209 -0
- package/lib/inventory/osPackageResolver.js +493 -0
- package/lib/inventory/osinfo.js +277 -0
- package/lib/inventory/osqueryTransform.js +274 -0
- package/lib/inventory/plugins.js +466 -0
- package/lib/inventory/protobom.js +231 -0
- package/lib/inventory/protobomLoader.js +43 -0
- package/lib/inventory/provenanceUtils.js +224 -0
- package/lib/inventory/purl.js +749 -0
- package/lib/inventory/rustFormulationParser.js +339 -0
- package/lib/inventory/sbomDocument.js +340 -0
- package/lib/inventory/source.js +1488 -0
- package/lib/inventory/spdx.js +361 -0
- package/lib/inventory/spdxExpression.js +512 -0
- package/lib/inventory/spdxUtils.js +107 -0
- package/lib/inventory/table.js +263 -0
- package/lib/inventory/traceRunner.js +439 -0
- package/lib/inventory/unicodeScan.js +147 -0
- package/lib/managers/binary.js +3307 -0
- package/lib/managers/containerutils.js +125 -0
- package/lib/managers/docker.js +2145 -0
- package/lib/managers/dockerConnection.js +162 -0
- package/lib/managers/oci.js +704 -0
- package/lib/managers/piptree.js +267 -0
- package/lib/parsers/cmakeCache.js +199 -0
- package/lib/parsers/gguf.js +492 -0
- package/lib/parsers/gitAiNotes.js +233 -0
- package/lib/parsers/gitmodules.js +239 -0
- package/lib/parsers/htmlExtract.js +610 -0
- package/lib/parsers/huggingfaceManifest.js +551 -0
- package/lib/parsers/huggingfaceUtils.js +506 -0
- package/lib/parsers/iri.js +618 -0
- package/lib/parsers/npmrc.js +99 -0
- package/lib/parsers/ollama.js +101 -0
- package/lib/parsers/xml.js +841 -0
- package/lib/server/openapi.yaml +433 -0
- package/lib/server/server.js +616 -0
- package/lib/stages/postgen/annotator.js +977 -0
- package/lib/stages/postgen/auditBom.js +468 -0
- package/lib/stages/postgen/postgen.js +1239 -0
- package/lib/stages/postgen/ruleEngine.js +731 -0
- package/lib/stages/postgen/sortBom.js +195 -0
- package/lib/stages/postgen/spdxConverter.js +796 -0
- package/lib/stages/postgen/specVersionCompat.js +703 -0
- package/lib/stages/pregen/envAudit.js +388 -0
- package/lib/stages/pregen/pregen.js +637 -0
- package/lib/third-party/README.md +9 -0
- package/lib/third-party/arborist/CHANGELOG.md +1109 -0
- package/lib/third-party/arborist/LICENSE.md +20 -0
- package/lib/third-party/arborist/README.md +315 -0
- package/lib/third-party/arborist/lib/arborist/index.js +258 -0
- package/lib/third-party/arborist/lib/arborist/load-actual.js +605 -0
- package/lib/third-party/arborist/lib/arborist/load-virtual.js +300 -0
- package/lib/third-party/arborist/lib/bin-links.js +120 -0
- package/lib/third-party/arborist/lib/calc-dep-flags.js +130 -0
- package/lib/third-party/arborist/lib/case-insensitive-map.js +51 -0
- package/lib/third-party/arborist/lib/consistent-resolve.js +42 -0
- package/lib/third-party/arborist/lib/debug.js +50 -0
- package/lib/third-party/arborist/lib/dep-valid.js +190 -0
- package/lib/third-party/arborist/lib/edge.js +417 -0
- package/lib/third-party/arborist/lib/from-path.js +36 -0
- package/lib/third-party/arborist/lib/gather-dep-set.js +43 -0
- package/lib/third-party/arborist/lib/index.js +22 -0
- package/lib/third-party/arborist/lib/inventory.js +138 -0
- package/lib/third-party/arborist/lib/link.js +169 -0
- package/lib/third-party/arborist/lib/node.js +1673 -0
- package/lib/third-party/arborist/lib/npm-extension.js +45 -0
- package/lib/third-party/arborist/lib/override-resolves.js +11 -0
- package/lib/third-party/arborist/lib/override-set.js +319 -0
- package/lib/third-party/arborist/lib/package-extensions.js +289 -0
- package/lib/third-party/arborist/lib/printable.js +210 -0
- package/lib/third-party/arborist/lib/proc-log.js +30 -0
- package/lib/third-party/arborist/lib/realpath.js +100 -0
- package/lib/third-party/arborist/lib/relpath.js +4 -0
- package/lib/third-party/arborist/lib/shrinkwrap.js +1291 -0
- package/lib/third-party/arborist/lib/spec-from-lock.js +34 -0
- package/lib/third-party/arborist/lib/tree-check.js +165 -0
- package/lib/third-party/arborist/lib/validate-npm-package-name.js +107 -0
- package/lib/third-party/arborist/lib/version-from-tgz.js +51 -0
- package/lib/third-party/arborist/lib/yarn-lock.js +397 -0
- package/lib/validator/bomValidator.js +985 -0
- package/lib/validator/complianceEngine.js +241 -0
- package/lib/validator/complianceRules.js +1680 -0
- package/lib/validator/generated/runtime.mjs +17 -0
- package/lib/validator/generated/validate-1.6.mjs +21258 -0
- package/lib/validator/generated/validate-1.7.mjs +24803 -0
- package/lib/validator/generated/validate-2.0.mjs +22931 -0
- package/lib/validator/index.js +246 -0
- package/lib/validator/reporters/annotations.js +142 -0
- package/lib/validator/reporters/console.js +160 -0
- package/lib/validator/reporters/index.js +41 -0
- package/lib/validator/reporters/json.js +37 -0
- package/lib/validator/reporters/sarif.js +184 -0
- package/package.json +209 -26
- package/types/bin/audit.d.ts +3 -0
- package/types/bin/audit.d.ts.map +1 -0
- package/types/bin/cdxgen.d.ts +3 -0
- package/types/bin/cdxgen.d.ts.map +1 -0
- package/types/bin/convert.d.ts +3 -0
- package/types/bin/convert.d.ts.map +1 -0
- package/types/bin/evinse.d.ts +3 -0
- package/types/bin/evinse.d.ts.map +1 -0
- package/types/bin/hbom.d.ts +3 -0
- package/types/bin/hbom.d.ts.map +1 -0
- package/types/bin/repl.d.ts +3 -0
- package/types/bin/repl.d.ts.map +1 -0
- package/types/bin/sign.d.ts +3 -0
- package/types/bin/sign.d.ts.map +1 -0
- package/types/bin/tracebom.d.ts +3 -0
- package/types/bin/tracebom.d.ts.map +1 -0
- package/types/bin/validate.d.ts +14 -0
- package/types/bin/validate.d.ts.map +1 -0
- package/types/bin/verify.d.ts +3 -0
- package/types/bin/verify.d.ts.map +1 -0
- package/types/lib/audit/index.d.ts +153 -0
- package/types/lib/audit/index.d.ts.map +1 -0
- package/types/lib/audit/progress.d.ts +31 -0
- package/types/lib/audit/progress.d.ts.map +1 -0
- package/types/lib/audit/reporters.d.ts +62 -0
- package/types/lib/audit/reporters.d.ts.map +1 -0
- package/types/lib/audit/scoring.d.ts +36 -0
- package/types/lib/audit/scoring.d.ts.map +1 -0
- package/types/lib/audit/targets.d.ts +77 -0
- package/types/lib/audit/targets.d.ts.map +1 -0
- package/types/lib/cli/bomAssembly.d.ts +315 -0
- package/types/lib/cli/bomAssembly.d.ts.map +1 -0
- package/types/lib/cli/cliOptions.d.ts +156 -0
- package/types/lib/cli/cliOptions.d.ts.map +1 -0
- package/types/lib/cli/index.d.ts +107 -0
- package/types/lib/cli/index.d.ts.map +1 -0
- package/types/lib/cli/jsBom.d.ts +94 -0
- package/types/lib/cli/jsBom.d.ts.map +1 -0
- package/types/lib/cli/jvmBom.d.ts +54 -0
- package/types/lib/cli/jvmBom.d.ts.map +1 -0
- package/types/lib/cli/managedBom.d.ts +105 -0
- package/types/lib/cli/managedBom.d.ts.map +1 -0
- package/types/lib/cli/nativeBom.d.ts +143 -0
- package/types/lib/cli/nativeBom.d.ts.map +1 -0
- package/types/lib/core/activity.d.ts +178 -0
- package/types/lib/core/activity.d.ts.map +1 -0
- package/types/lib/core/env.d.ts +192 -0
- package/types/lib/core/env.d.ts.map +1 -0
- package/types/lib/core/fs.d.ts +158 -0
- package/types/lib/core/fs.d.ts.map +1 -0
- package/types/lib/core/httpClient.d.ts +149 -0
- package/types/lib/core/httpClient.d.ts.map +1 -0
- package/types/lib/core/logger.d.ts +28 -0
- package/types/lib/core/logger.d.ts.map +1 -0
- package/types/lib/core/parallel.d.ts +95 -0
- package/types/lib/core/parallel.d.ts.map +1 -0
- package/types/lib/core/paths.d.ts +36 -0
- package/types/lib/core/paths.d.ts.map +1 -0
- package/types/lib/core/projectConfig.d.ts +23 -0
- package/types/lib/core/projectConfig.d.ts.map +1 -0
- package/types/lib/core/propertySanitizer.d.ts +23 -0
- package/types/lib/core/propertySanitizer.d.ts.map +1 -0
- package/types/lib/core/spdx.d.ts +5 -0
- package/types/lib/core/spdx.d.ts.map +1 -0
- package/types/lib/core/state.d.ts +20 -0
- package/types/lib/core/state.d.ts.map +1 -0
- package/types/lib/core/text.d.ts +78 -0
- package/types/lib/core/text.d.ts.map +1 -0
- package/types/lib/core/ui.d.ts +87 -0
- package/types/lib/core/ui.d.ts.map +1 -0
- package/types/lib/core/urls.d.ts +43 -0
- package/types/lib/core/urls.d.ts.map +1 -0
- package/types/lib/ecosystems/asarutils.d.ts +71 -0
- package/types/lib/ecosystems/asarutils.d.ts.map +1 -0
- package/types/lib/ecosystems/bunutils.d.ts +38 -0
- package/types/lib/ecosystems/bunutils.d.ts.map +1 -0
- package/types/lib/ecosystems/caxa.d.ts +8 -0
- package/types/lib/ecosystems/caxa.d.ts.map +1 -0
- package/types/lib/ecosystems/chromextutils.d.ts +97 -0
- package/types/lib/ecosystems/chromextutils.d.ts.map +1 -0
- package/types/lib/ecosystems/cmakeResolver.d.ts +176 -0
- package/types/lib/ecosystems/cmakeResolver.d.ts.map +1 -0
- package/types/lib/ecosystems/cppEvidence.d.ts +35 -0
- package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -0
- package/types/lib/ecosystems/denoutils.d.ts +76 -0
- package/types/lib/ecosystems/denoutils.d.ts.map +1 -0
- package/types/lib/ecosystems/dotnetutils.d.ts +45 -0
- package/types/lib/ecosystems/dotnetutils.d.ts.map +1 -0
- package/types/lib/ecosystems/ecosystems.d.ts +279 -0
- package/types/lib/ecosystems/ecosystems.d.ts.map +1 -0
- package/types/lib/ecosystems/golem.d.ts +60 -0
- package/types/lib/ecosystems/golem.d.ts.map +1 -0
- package/types/lib/ecosystems/gradleutils.d.ts +139 -0
- package/types/lib/ecosystems/gradleutils.d.ts.map +1 -0
- package/types/lib/ecosystems/jsEvidence.d.ts +17 -0
- package/types/lib/ecosystems/jsEvidence.d.ts.map +1 -0
- package/types/lib/ecosystems/npmutils.d.ts +183 -0
- package/types/lib/ecosystems/npmutils.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-bazel.d.ts +36 -0
- package/types/lib/ecosystems/parsers-bazel.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-dotnet.d.ts +116 -0
- package/types/lib/ecosystems/parsers-dotnet.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-gleam.d.ts +33 -0
- package/types/lib/ecosystems/parsers-gleam.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-go.d.ts +92 -0
- package/types/lib/ecosystems/parsers-go.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-js.d.ts +242 -0
- package/types/lib/ecosystems/parsers-js.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-jvm.d.ts +100 -0
- package/types/lib/ecosystems/parsers-jvm.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-misc.d.ts +450 -0
- package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-python.d.ts +145 -0
- package/types/lib/ecosystems/parsers-python.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-rust.d.ts +56 -0
- package/types/lib/ecosystems/parsers-rust.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-zig.d.ts +83 -0
- package/types/lib/ecosystems/parsers-zig.d.ts.map +1 -0
- package/types/lib/ecosystems/pep770.d.ts +38 -0
- package/types/lib/ecosystems/pep770.d.ts.map +1 -0
- package/types/lib/ecosystems/pylockutils.d.ts +68 -0
- package/types/lib/ecosystems/pylockutils.d.ts.map +1 -0
- package/types/lib/ecosystems/pythonutils.d.ts +70 -0
- package/types/lib/ecosystems/pythonutils.d.ts.map +1 -0
- package/types/lib/ecosystems/registryProvenance.d.ts +26 -0
- package/types/lib/ecosystems/registryProvenance.d.ts.map +1 -0
- package/types/lib/ecosystems/remote/huggingface.d.ts +31 -0
- package/types/lib/ecosystems/remote/huggingface.d.ts.map +1 -0
- package/types/lib/ecosystems/rubyutils.d.ts +182 -0
- package/types/lib/ecosystems/rubyutils.d.ts.map +1 -0
- package/types/lib/ecosystems/rusi.d.ts +40 -0
- package/types/lib/ecosystems/rusi.d.ts.map +1 -0
- package/types/lib/ecosystems/sbtutils.d.ts +179 -0
- package/types/lib/ecosystems/sbtutils.d.ts.map +1 -0
- package/types/lib/ecosystems/tea.d.ts +180 -0
- package/types/lib/ecosystems/tea.d.ts.map +1 -0
- package/types/lib/ecosystems/utils.d.ts +41 -0
- package/types/lib/ecosystems/utils.d.ts.map +1 -0
- package/types/lib/ecosystems/zigResolver.d.ts +70 -0
- package/types/lib/ecosystems/zigResolver.d.ts.map +1 -0
- package/types/lib/evinser/db.d.ts +17 -0
- package/types/lib/evinser/db.d.ts.map +1 -0
- package/types/lib/evinser/evinser.d.ts +354 -0
- package/types/lib/evinser/evinser.d.ts.map +1 -0
- package/types/lib/evinser/scalasem.d.ts +15 -0
- package/types/lib/evinser/scalasem.d.ts.map +1 -0
- package/types/lib/evinser/swiftsem.d.ts +103 -0
- package/types/lib/evinser/swiftsem.d.ts.map +1 -0
- package/types/lib/helpers/annotationFormatter.d.ts +23 -0
- package/types/lib/helpers/annotationFormatter.d.ts.map +1 -0
- package/types/lib/helpers/bomSigner.d.ts +28 -0
- package/types/lib/helpers/bomSigner.d.ts.map +1 -0
- package/types/lib/helpers/exportUtils.d.ts +52 -0
- package/types/lib/helpers/exportUtils.d.ts.map +1 -0
- package/types/lib/helpers/remote/dependency-track.d.ts +23 -0
- package/types/lib/helpers/remote/dependency-track.d.ts.map +1 -0
- package/types/lib/helpers/versutils.d.ts +8 -0
- package/types/lib/helpers/versutils.d.ts.map +1 -0
- package/types/lib/helpers/vsixutils.d.ts +130 -0
- package/types/lib/helpers/vsixutils.d.ts.map +1 -0
- package/types/lib/inventory/agentFormulationParser.d.ts +21 -0
- package/types/lib/inventory/agentFormulationParser.d.ts.map +1 -0
- package/types/lib/inventory/aiCollector.d.ts +61 -0
- package/types/lib/inventory/aiCollector.d.ts.map +1 -0
- package/types/lib/inventory/aiInventory.d.ts +103 -0
- package/types/lib/inventory/aiInventory.d.ts.map +1 -0
- package/types/lib/inventory/aiModelVariants.d.ts +31 -0
- package/types/lib/inventory/aiModelVariants.d.ts.map +1 -0
- package/types/lib/inventory/aiOversightCollector.d.ts +28 -0
- package/types/lib/inventory/aiOversightCollector.d.ts.map +1 -0
- package/types/lib/inventory/aiProvenanceCollector.d.ts +13 -0
- package/types/lib/inventory/aiProvenanceCollector.d.ts.map +1 -0
- package/types/lib/inventory/analyzer.d.ts +157 -0
- package/types/lib/inventory/analyzer.d.ts.map +1 -0
- package/types/lib/inventory/analyzerScope.d.ts +106 -0
- package/types/lib/inventory/analyzerScope.d.ts.map +1 -0
- package/types/lib/inventory/astWorker.d.ts +9 -0
- package/types/lib/inventory/astWorker.d.ts.map +1 -0
- package/types/lib/inventory/atomUtils.d.ts +159 -0
- package/types/lib/inventory/atomUtils.d.ts.map +1 -0
- package/types/lib/inventory/auditCategories.d.ts +80 -0
- package/types/lib/inventory/auditCategories.d.ts.map +1 -0
- package/types/lib/inventory/bomUtils.d.ts +145 -0
- package/types/lib/inventory/bomUtils.d.ts.map +1 -0
- package/types/lib/inventory/cacheCommands.d.ts +28 -0
- package/types/lib/inventory/cacheCommands.d.ts.map +1 -0
- package/types/lib/inventory/cacheDir.d.ts +55 -0
- package/types/lib/inventory/cacheDir.d.ts.map +1 -0
- package/types/lib/inventory/cbomutils.d.ts +37 -0
- package/types/lib/inventory/cbomutils.d.ts.map +1 -0
- package/types/lib/inventory/cdxrs.d.ts +90 -0
- package/types/lib/inventory/cdxrs.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/azurePipelines.d.ts +27 -0
- package/types/lib/inventory/ciParsers/azurePipelines.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/circleCi.d.ts +27 -0
- package/types/lib/inventory/ciParsers/circleCi.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/common.d.ts +11 -0
- package/types/lib/inventory/ciParsers/common.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/githubActions.d.ts +38 -0
- package/types/lib/inventory/ciParsers/githubActions.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/gitlabCi.d.ts +26 -0
- package/types/lib/inventory/ciParsers/gitlabCi.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/jenkins.d.ts +26 -0
- package/types/lib/inventory/ciParsers/jenkins.d.ts.map +1 -0
- package/types/lib/inventory/citations.d.ts +90 -0
- package/types/lib/inventory/citations.d.ts.map +1 -0
- package/types/lib/inventory/communityAiConfigParser.d.ts +14 -0
- package/types/lib/inventory/communityAiConfigParser.d.ts.map +1 -0
- package/types/lib/inventory/containerRisk.d.ts +20 -0
- package/types/lib/inventory/containerRisk.d.ts.map +1 -0
- package/types/lib/inventory/cryptoAlgorithmFamily.d.ts +37 -0
- package/types/lib/inventory/cryptoAlgorithmFamily.d.ts.map +1 -0
- package/types/lib/inventory/deps.d.ts +140 -0
- package/types/lib/inventory/deps.d.ts.map +1 -0
- package/types/lib/inventory/depsUtils.d.ts +74 -0
- package/types/lib/inventory/depsUtils.d.ts.map +1 -0
- package/types/lib/inventory/display.d.ts +227 -0
- package/types/lib/inventory/display.d.ts.map +1 -0
- package/types/lib/inventory/dosai.d.ts +130 -0
- package/types/lib/inventory/dosai.d.ts.map +1 -0
- package/types/lib/inventory/dosaiParsers.d.ts +59 -0
- package/types/lib/inventory/dosaiParsers.d.ts.map +1 -0
- package/types/lib/inventory/dynamic.d.ts +25 -0
- package/types/lib/inventory/dynamic.d.ts.map +1 -0
- package/types/lib/inventory/envcontext.d.ts +377 -0
- package/types/lib/inventory/envcontext.d.ts.map +1 -0
- package/types/lib/inventory/evidenceUtils.d.ts +74 -0
- package/types/lib/inventory/evidenceUtils.d.ts.map +1 -0
- package/types/lib/inventory/fetchBatch.d.ts +127 -0
- package/types/lib/inventory/fetchBatch.d.ts.map +1 -0
- package/types/lib/inventory/fetchRate.d.ts +118 -0
- package/types/lib/inventory/fetchRate.d.ts.map +1 -0
- package/types/lib/inventory/forgeEnricher.d.ts +31 -0
- package/types/lib/inventory/forgeEnricher.d.ts.map +1 -0
- package/types/lib/inventory/formulationParsers.d.ts +50 -0
- package/types/lib/inventory/formulationParsers.d.ts.map +1 -0
- package/types/lib/inventory/gtfobins.d.ts +27 -0
- package/types/lib/inventory/gtfobins.d.ts.map +1 -0
- package/types/lib/inventory/hbom.d.ts +58 -0
- package/types/lib/inventory/hbom.d.ts.map +1 -0
- package/types/lib/inventory/hbomAnalysis.d.ts +56 -0
- package/types/lib/inventory/hbomAnalysis.d.ts.map +1 -0
- package/types/lib/inventory/hbomLoader.d.ts +7 -0
- package/types/lib/inventory/hbomLoader.d.ts.map +1 -0
- package/types/lib/inventory/hostTopology.d.ts +47 -0
- package/types/lib/inventory/hostTopology.d.ts.map +1 -0
- package/types/lib/inventory/inventoryStats.d.ts +42 -0
- package/types/lib/inventory/inventoryStats.d.ts.map +1 -0
- package/types/lib/inventory/jsonLike.d.ts +23 -0
- package/types/lib/inventory/jsonLike.d.ts.map +1 -0
- package/types/lib/inventory/licenseEnhancer.d.ts +70 -0
- package/types/lib/inventory/licenseEnhancer.d.ts.map +1 -0
- package/types/lib/inventory/lolbas.d.ts +16 -0
- package/types/lib/inventory/lolbas.d.ts.map +1 -0
- package/types/lib/inventory/mcp.d.ts +29 -0
- package/types/lib/inventory/mcp.d.ts.map +1 -0
- package/types/lib/inventory/mcpConfigParser.d.ts +20 -0
- package/types/lib/inventory/mcpConfigParser.d.ts.map +1 -0
- package/types/lib/inventory/mcpDiscovery.d.ts +33 -0
- package/types/lib/inventory/mcpDiscovery.d.ts.map +1 -0
- package/types/lib/inventory/mcpPinning.d.ts +11 -0
- package/types/lib/inventory/mcpPinning.d.ts.map +1 -0
- package/types/lib/inventory/osPackageResolver.d.ts +49 -0
- package/types/lib/inventory/osPackageResolver.d.ts.map +1 -0
- package/types/lib/inventory/osinfo.d.ts +120 -0
- package/types/lib/inventory/osinfo.d.ts.map +1 -0
- package/types/lib/inventory/osqueryTransform.d.ts +84 -0
- package/types/lib/inventory/osqueryTransform.d.ts.map +1 -0
- package/types/lib/inventory/plugins.d.ts +58 -0
- package/types/lib/inventory/plugins.d.ts.map +1 -0
- package/types/lib/inventory/protobom.d.ts +71 -0
- package/types/lib/inventory/protobom.d.ts.map +1 -0
- package/types/lib/inventory/protobomLoader.d.ts +17 -0
- package/types/lib/inventory/protobomLoader.d.ts.map +1 -0
- package/types/lib/inventory/provenanceUtils.d.ts +98 -0
- package/types/lib/inventory/provenanceUtils.d.ts.map +1 -0
- package/types/lib/inventory/purl.d.ts +313 -0
- package/types/lib/inventory/purl.d.ts.map +1 -0
- package/types/lib/inventory/rustFormulationParser.d.ts +17 -0
- package/types/lib/inventory/rustFormulationParser.d.ts.map +1 -0
- package/types/lib/inventory/sbomDocument.d.ts +59 -0
- package/types/lib/inventory/sbomDocument.d.ts.map +1 -0
- package/types/lib/inventory/source.d.ts +163 -0
- package/types/lib/inventory/source.d.ts.map +1 -0
- package/types/lib/inventory/spdx.d.ts +66 -0
- package/types/lib/inventory/spdx.d.ts.map +1 -0
- package/types/lib/inventory/spdxExpression.d.ts +58 -0
- package/types/lib/inventory/spdxExpression.d.ts.map +1 -0
- package/types/lib/inventory/spdxUtils.d.ts +12 -0
- package/types/lib/inventory/spdxUtils.d.ts.map +1 -0
- package/types/lib/inventory/table.d.ts +19 -0
- package/types/lib/inventory/table.d.ts.map +1 -0
- package/types/lib/inventory/traceRunner.d.ts +80 -0
- package/types/lib/inventory/traceRunner.d.ts.map +1 -0
- package/types/lib/inventory/unicodeScan.d.ts +46 -0
- package/types/lib/inventory/unicodeScan.d.ts.map +1 -0
- package/types/lib/managers/binary.d.ts +76 -0
- package/types/lib/managers/binary.d.ts.map +1 -0
- package/types/lib/managers/containerutils.d.ts +30 -0
- package/types/lib/managers/containerutils.d.ts.map +1 -0
- package/types/lib/managers/docker.d.ts +157 -0
- package/types/lib/managers/docker.d.ts.map +1 -0
- package/types/lib/managers/dockerConnection.d.ts +42 -0
- package/types/lib/managers/dockerConnection.d.ts.map +1 -0
- package/types/lib/managers/oci.d.ts +21 -0
- package/types/lib/managers/oci.d.ts.map +1 -0
- package/types/lib/managers/piptree.d.ts +13 -0
- package/types/lib/managers/piptree.d.ts.map +1 -0
- package/types/lib/parsers/cmakeCache.d.ts +70 -0
- package/types/lib/parsers/cmakeCache.d.ts.map +1 -0
- package/types/lib/parsers/gguf.d.ts +39 -0
- package/types/lib/parsers/gguf.d.ts.map +1 -0
- package/types/lib/parsers/gitAiNotes.d.ts +15 -0
- package/types/lib/parsers/gitAiNotes.d.ts.map +1 -0
- package/types/lib/parsers/gitmodules.d.ts +88 -0
- package/types/lib/parsers/gitmodules.d.ts.map +1 -0
- package/types/lib/parsers/htmlExtract.d.ts +34 -0
- package/types/lib/parsers/htmlExtract.d.ts.map +1 -0
- package/types/lib/parsers/huggingfaceManifest.d.ts +153 -0
- package/types/lib/parsers/huggingfaceManifest.d.ts.map +1 -0
- package/types/lib/parsers/huggingfaceUtils.d.ts +155 -0
- package/types/lib/parsers/huggingfaceUtils.d.ts.map +1 -0
- package/types/lib/parsers/iri.d.ts +68 -0
- package/types/lib/parsers/iri.d.ts.map +1 -0
- package/types/lib/parsers/npmrc.d.ts +33 -0
- package/types/lib/parsers/npmrc.d.ts.map +1 -0
- package/types/lib/parsers/ollama.d.ts +22 -0
- package/types/lib/parsers/ollama.d.ts.map +1 -0
- package/types/lib/parsers/xml.d.ts +47 -0
- package/types/lib/parsers/xml.d.ts.map +1 -0
- package/types/lib/server/server.d.ts +51 -0
- package/types/lib/server/server.d.ts.map +1 -0
- package/types/lib/stages/postgen/annotator.d.ts +36 -0
- package/types/lib/stages/postgen/annotator.d.ts.map +1 -0
- package/types/lib/stages/postgen/auditBom.d.ts +92 -0
- package/types/lib/stages/postgen/auditBom.d.ts.map +1 -0
- package/types/lib/stages/postgen/postgen.d.ts +59 -0
- package/types/lib/stages/postgen/postgen.d.ts.map +1 -0
- package/types/lib/stages/postgen/ruleEngine.d.ts +18 -0
- package/types/lib/stages/postgen/ruleEngine.d.ts.map +1 -0
- package/types/lib/stages/postgen/sortBom.d.ts +34 -0
- package/types/lib/stages/postgen/sortBom.d.ts.map +1 -0
- package/types/lib/stages/postgen/spdxConverter.d.ts +11 -0
- package/types/lib/stages/postgen/spdxConverter.d.ts.map +1 -0
- package/types/lib/stages/postgen/specVersionCompat.d.ts +71 -0
- package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -0
- package/types/lib/stages/pregen/envAudit.d.ts +14 -0
- package/types/lib/stages/pregen/envAudit.d.ts.map +1 -0
- package/types/lib/stages/pregen/pregen.d.ts +59 -0
- package/types/lib/stages/pregen/pregen.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/arborist/index.d.ts +47 -0
- package/types/lib/third-party/arborist/lib/arborist/index.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/arborist/load-actual.d.ts +4 -0
- package/types/lib/third-party/arborist/lib/arborist/load-actual.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/arborist/load-virtual.d.ts +4 -0
- package/types/lib/third-party/arborist/lib/arborist/load-virtual.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/bin-links.d.ts +18 -0
- package/types/lib/third-party/arborist/lib/bin-links.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/calc-dep-flags.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/calc-dep-flags.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/case-insensitive-map.d.ts +9 -0
- package/types/lib/third-party/arborist/lib/case-insensitive-map.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/consistent-resolve.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/consistent-resolve.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/debug.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/debug.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/dep-valid.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/dep-valid.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/edge.d.ts +46 -0
- package/types/lib/third-party/arborist/lib/edge.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/from-path.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/from-path.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/gather-dep-set.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/gather-dep-set.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/index.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/index.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/inventory.d.ts +14 -0
- package/types/lib/third-party/arborist/lib/inventory.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/link.d.ts +18 -0
- package/types/lib/third-party/arborist/lib/link.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/node.d.ts +112 -0
- package/types/lib/third-party/arborist/lib/node.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/npm-extension.d.ts +18 -0
- package/types/lib/third-party/arborist/lib/npm-extension.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/override-resolves.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/override-resolves.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/override-set.d.ts +27 -0
- package/types/lib/third-party/arborist/lib/override-set.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/package-extensions.d.ts +36 -0
- package/types/lib/third-party/arborist/lib/package-extensions.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/printable.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/printable.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/proc-log.d.ts +20 -0
- package/types/lib/third-party/arborist/lib/proc-log.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/realpath.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/realpath.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/relpath.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/relpath.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/shrinkwrap.d.ts +54 -0
- package/types/lib/third-party/arborist/lib/shrinkwrap.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/spec-from-lock.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/spec-from-lock.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/tree-check.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/tree-check.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/validate-npm-package-name.d.ts +13 -0
- package/types/lib/third-party/arborist/lib/validate-npm-package-name.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/version-from-tgz.d.ts +6 -0
- package/types/lib/third-party/arborist/lib/version-from-tgz.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/yarn-lock.d.ts +35 -0
- package/types/lib/third-party/arborist/lib/yarn-lock.d.ts.map +1 -0
- package/types/lib/validator/bomValidator.d.ts +40 -0
- package/types/lib/validator/bomValidator.d.ts.map +1 -0
- package/types/lib/validator/complianceEngine.d.ts +72 -0
- package/types/lib/validator/complianceEngine.d.ts.map +1 -0
- package/types/lib/validator/complianceRules.d.ts +61 -0
- package/types/lib/validator/complianceRules.d.ts.map +1 -0
- package/types/lib/validator/index.d.ts +101 -0
- package/types/lib/validator/index.d.ts.map +1 -0
- package/types/lib/validator/reporters/annotations.d.ts +37 -0
- package/types/lib/validator/reporters/annotations.d.ts.map +1 -0
- package/types/lib/validator/reporters/console.d.ts +34 -0
- package/types/lib/validator/reporters/console.d.ts.map +1 -0
- package/types/lib/validator/reporters/index.d.ts +30 -0
- package/types/lib/validator/reporters/index.d.ts.map +1 -0
- package/types/lib/validator/reporters/json.d.ts +11 -0
- package/types/lib/validator/reporters/json.d.ts.map +1 -0
- package/types/lib/validator/reporters/sarif.d.ts +22 -0
- package/types/lib/validator/reporters/sarif.d.ts.map +1 -0
- package/mod.d.ts +0 -7
- package/mod.js +0 -22
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
import { arch as runtimeArch, platform as runtimePlatform } from "node:os";
|
|
2
|
+
import { delimiter, join } from "node:path";
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
|
|
5
|
+
import { DEBUG_MODE, readEnvironmentVariable } from "../core/activity.js";
|
|
6
|
+
import { isDeno } from "../core/env.js";
|
|
7
|
+
import { safeExistsSync, safeSpawnSync } from "../core/fs.js";
|
|
8
|
+
import { dirNameStr } from "../core/paths.js";
|
|
9
|
+
import { retrieveCdxgenPluginVersion } from "./envcontext.js";
|
|
10
|
+
|
|
11
|
+
const PLUGIN_ENV_COMMAND_NAMES = {
|
|
12
|
+
"cargo-auditable": "CARGO_AUDITABLE_CMD",
|
|
13
|
+
cdxrs: "CDXRS_CMD",
|
|
14
|
+
dosai: "DOSAI_CMD",
|
|
15
|
+
golem: "GOLEM_CMD",
|
|
16
|
+
osquery: "OSQUERY_CMD",
|
|
17
|
+
rusi: "RUSI_CMD",
|
|
18
|
+
sourcekitten: "SOURCEKITTEN_CMD",
|
|
19
|
+
trivy: "TRIVY_CMD",
|
|
20
|
+
trustinspector: "TRUSTINSPECTOR_CMD",
|
|
21
|
+
cdxui: "CDXUI_CMD",
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
function isMusl() {
|
|
25
|
+
const result = safeSpawnSync("ldd", ["--version"]);
|
|
26
|
+
return result?.stdout?.includes("musl") || result?.stderr?.includes("musl");
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function hasUsablePluginsDir(pluginsDir) {
|
|
30
|
+
return (
|
|
31
|
+
safeExistsSync(pluginsDir) &&
|
|
32
|
+
(safeExistsSync(join(pluginsDir, "plugins-manifest.json")) ||
|
|
33
|
+
[
|
|
34
|
+
"cargo-auditable",
|
|
35
|
+
"cdxrs",
|
|
36
|
+
"dosai",
|
|
37
|
+
"golem",
|
|
38
|
+
"osquery",
|
|
39
|
+
"rusi",
|
|
40
|
+
"sourcekitten",
|
|
41
|
+
"trivy",
|
|
42
|
+
"trustinspector",
|
|
43
|
+
"cdxui",
|
|
44
|
+
].some((pluginName) => safeExistsSync(join(pluginsDir, pluginName))))
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Determine the normalized plugin target tuple for the current runtime.
|
|
50
|
+
*
|
|
51
|
+
* @returns {{arch: string, extn: string, platform: string, pluginsBinSuffix: string}}
|
|
52
|
+
*/
|
|
53
|
+
export function getPluginsBinTarget() {
|
|
54
|
+
let platform = runtimePlatform();
|
|
55
|
+
let extn = "";
|
|
56
|
+
let pluginsBinSuffix = "";
|
|
57
|
+
if (platform === "win32") {
|
|
58
|
+
platform = "windows";
|
|
59
|
+
extn = ".exe";
|
|
60
|
+
} else if (platform === "linux" && isMusl()) {
|
|
61
|
+
platform = "linuxmusl";
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
let arch = `${runtimeArch()}`;
|
|
65
|
+
if (arch === "x32") {
|
|
66
|
+
arch = "386";
|
|
67
|
+
} else if (arch === "x64") {
|
|
68
|
+
arch = "amd64";
|
|
69
|
+
pluginsBinSuffix = `-${platform}-amd64`;
|
|
70
|
+
} else if (arch === "arm64") {
|
|
71
|
+
pluginsBinSuffix = `-${platform}-arm64`;
|
|
72
|
+
} else if (arch === "ppc64") {
|
|
73
|
+
arch = "ppc64le";
|
|
74
|
+
pluginsBinSuffix = "-ppc64";
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
arch,
|
|
79
|
+
extn,
|
|
80
|
+
platform,
|
|
81
|
+
pluginsBinSuffix,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Resolve cdxgen companion plugin directory candidates for npx-style layouts.
|
|
87
|
+
*
|
|
88
|
+
* npm's npx layout installs cdxgen and @cdxgen/cdxgen-plugins-bin as sibling
|
|
89
|
+
* packages under a shared node_modules root such as
|
|
90
|
+
* `~/.npm/_npx/<hash>/node_modules/`. Deno's npm cache keeps versioned package
|
|
91
|
+
* directories under a registry root such as
|
|
92
|
+
* `~/.cache/deno/npm/registry.npmjs.org/`. This helper derives both candidate
|
|
93
|
+
* plugin directories from `dirNameStr`.
|
|
94
|
+
*
|
|
95
|
+
* @param {string} dirNameStr The directory of the cdxgen package.
|
|
96
|
+
* @param {string} pluginVersion The version of cdxgen-plugins-bin.
|
|
97
|
+
* @param {{pluginsBinSuffix: string}} target The plugin target info.
|
|
98
|
+
* @returns {{extraNMBinPath: string|undefined, pluginsDir: string}[]}
|
|
99
|
+
*/
|
|
100
|
+
function resolveNpxPluginsDirs(dirNameStr, pluginVersion, target) {
|
|
101
|
+
// Normalize Windows and POSIX separators before tokenizing the path.
|
|
102
|
+
const normalizedDirName = dirNameStr.replaceAll("\\", "/");
|
|
103
|
+
const parts = normalizedDirName.split("/");
|
|
104
|
+
const pluginsPackageName = `cdxgen-plugins-bin${target.pluginsBinSuffix}`;
|
|
105
|
+
/** @type {{extraNMBinPath: string|undefined, pluginsDir: string}[]} */
|
|
106
|
+
const candidates = [];
|
|
107
|
+
|
|
108
|
+
const nodeModulesIdx = parts.lastIndexOf("node_modules");
|
|
109
|
+
if (nodeModulesIdx !== -1) {
|
|
110
|
+
const nodeModulesRoot = parts.slice(0, nodeModulesIdx + 1).join("/");
|
|
111
|
+
candidates.push({
|
|
112
|
+
extraNMBinPath: join(nodeModulesRoot, ".bin"),
|
|
113
|
+
pluginsDir: join(
|
|
114
|
+
nodeModulesRoot,
|
|
115
|
+
"@cdxgen",
|
|
116
|
+
pluginsPackageName,
|
|
117
|
+
"plugins",
|
|
118
|
+
),
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const registryIdx = parts.lastIndexOf("registry.npmjs.org");
|
|
123
|
+
if (registryIdx !== -1) {
|
|
124
|
+
// Include the registry segment itself so the plugins directory resolves
|
|
125
|
+
// to `<registry-root>/registry.npmjs.org/@cdxgen/...`. The previous
|
|
126
|
+
// `slice(0, registryIdx)` dropped `registry.npmjs.org`, which broke plugin
|
|
127
|
+
// discovery for Deno installs (`deno add` / `deno run npm:`) whose cache
|
|
128
|
+
// nests versioned packages under `.../npm/registry.npmjs.org/`.
|
|
129
|
+
const registryRoot = parts.slice(0, registryIdx + 1).join("/");
|
|
130
|
+
candidates.push({
|
|
131
|
+
extraNMBinPath: undefined,
|
|
132
|
+
pluginsDir: join(
|
|
133
|
+
registryRoot,
|
|
134
|
+
"@cdxgen",
|
|
135
|
+
pluginsPackageName,
|
|
136
|
+
pluginVersion,
|
|
137
|
+
"plugins",
|
|
138
|
+
),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return candidates;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Resolve the cdxgen companion plugins directory for the current runtime.
|
|
147
|
+
*
|
|
148
|
+
* @returns {{
|
|
149
|
+
* arch: string,
|
|
150
|
+
* extn: string,
|
|
151
|
+
* extraNMBinPath: string|undefined,
|
|
152
|
+
* platform: string,
|
|
153
|
+
* pluginManifestFile: string|undefined,
|
|
154
|
+
* pluginVersion: string|undefined,
|
|
155
|
+
* pluginsBinSuffix: string,
|
|
156
|
+
* pluginsDir: string,
|
|
157
|
+
* }}
|
|
158
|
+
*/
|
|
159
|
+
export function resolveCdxgenPlugins() {
|
|
160
|
+
const target = getPluginsBinTarget();
|
|
161
|
+
const pluginVersion = retrieveCdxgenPluginVersion();
|
|
162
|
+
let pluginsDir = readEnvironmentVariable("CDXGEN_PLUGINS_DIR") || "";
|
|
163
|
+
let extraNMBinPath;
|
|
164
|
+
|
|
165
|
+
if (!pluginsDir && hasUsablePluginsDir(join(dirNameStr, "plugins"))) {
|
|
166
|
+
pluginsDir = join(dirNameStr, "plugins");
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (
|
|
170
|
+
!pluginsDir &&
|
|
171
|
+
hasUsablePluginsDir(
|
|
172
|
+
join(
|
|
173
|
+
dirNameStr,
|
|
174
|
+
"node_modules",
|
|
175
|
+
"@cdxgen",
|
|
176
|
+
`cdxgen-plugins-bin${target.pluginsBinSuffix}`,
|
|
177
|
+
"plugins",
|
|
178
|
+
),
|
|
179
|
+
)
|
|
180
|
+
) {
|
|
181
|
+
pluginsDir = join(
|
|
182
|
+
dirNameStr,
|
|
183
|
+
"node_modules",
|
|
184
|
+
"@cdxgen",
|
|
185
|
+
`cdxgen-plugins-bin${target.pluginsBinSuffix}`,
|
|
186
|
+
"plugins",
|
|
187
|
+
);
|
|
188
|
+
if (safeExistsSync(join(dirNameStr, "node_modules", ".bin"))) {
|
|
189
|
+
extraNMBinPath = join(dirNameStr, "node_modules", ".bin");
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (!pluginsDir) {
|
|
194
|
+
let globalNodePath =
|
|
195
|
+
readEnvironmentVariable("GLOBAL_NODE_MODULES_PATH") || undefined;
|
|
196
|
+
if (!globalNodePath) {
|
|
197
|
+
// Under Deno there is no global pnpm store to probe; spawning
|
|
198
|
+
// `pnpm root -g` only clutters debug output (the binary may not even be
|
|
199
|
+
// installed). The registry/npx fallbacks below cover the Deno cache.
|
|
200
|
+
if (isDeno) {
|
|
201
|
+
if (DEBUG_MODE) {
|
|
202
|
+
console.log(
|
|
203
|
+
'Skipping "pnpm root -g" lookup under the Deno runtime; relying on the Deno npm cache layout instead.',
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
} else {
|
|
207
|
+
if (DEBUG_MODE) {
|
|
208
|
+
console.log(
|
|
209
|
+
'Trying to find the global node_modules path with "pnpm root -g" command.',
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
const result = safeSpawnSync(
|
|
213
|
+
target.platform === "windows" ? "pnpm.cmd" : "pnpm",
|
|
214
|
+
["root", "-g"],
|
|
215
|
+
);
|
|
216
|
+
if (result?.stdout) {
|
|
217
|
+
globalNodePath = `${result.stdout.trim()}/`;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
let globalPlugins;
|
|
223
|
+
if (globalNodePath) {
|
|
224
|
+
globalPlugins = join(
|
|
225
|
+
globalNodePath,
|
|
226
|
+
"@cdxgen",
|
|
227
|
+
`cdxgen-plugins-bin${target.pluginsBinSuffix}`,
|
|
228
|
+
"plugins",
|
|
229
|
+
);
|
|
230
|
+
extraNMBinPath = join(
|
|
231
|
+
globalNodePath,
|
|
232
|
+
"..",
|
|
233
|
+
".pnpm",
|
|
234
|
+
"node_modules",
|
|
235
|
+
".bin",
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
let altGlobalPlugins;
|
|
240
|
+
if (
|
|
241
|
+
dirNameStr.includes(join("node_modules", ".pnpm", "@cyclonedx+cdxgen"))
|
|
242
|
+
) {
|
|
243
|
+
const tmpA = dirNameStr.split(join("node_modules", ".pnpm"));
|
|
244
|
+
altGlobalPlugins = join(
|
|
245
|
+
tmpA[0],
|
|
246
|
+
"node_modules",
|
|
247
|
+
".pnpm",
|
|
248
|
+
`@cdxgen+cdxgen-plugins-bin${target.pluginsBinSuffix}@${pluginVersion}`,
|
|
249
|
+
"node_modules",
|
|
250
|
+
"@cdxgen",
|
|
251
|
+
`cdxgen-plugins-bin${target.pluginsBinSuffix}`,
|
|
252
|
+
"plugins",
|
|
253
|
+
);
|
|
254
|
+
if (safeExistsSync(join(tmpA[0], "node_modules", ".bin"))) {
|
|
255
|
+
extraNMBinPath = join(tmpA[0], "node_modules", ".bin");
|
|
256
|
+
}
|
|
257
|
+
} else if (dirNameStr.includes(join(".pnpm", "@cyclonedx+cdxgen"))) {
|
|
258
|
+
const tmpA = dirNameStr.split(".pnpm");
|
|
259
|
+
altGlobalPlugins = join(
|
|
260
|
+
tmpA[0],
|
|
261
|
+
".pnpm",
|
|
262
|
+
`@cdxgen+cdxgen-plugins-bin${target.pluginsBinSuffix}@${pluginVersion}`,
|
|
263
|
+
"node_modules",
|
|
264
|
+
"@cdxgen",
|
|
265
|
+
`cdxgen-plugins-bin${target.pluginsBinSuffix}`,
|
|
266
|
+
"plugins",
|
|
267
|
+
);
|
|
268
|
+
if (safeExistsSync(join(tmpA[0], ".bin"))) {
|
|
269
|
+
extraNMBinPath = join(tmpA[0], ".bin");
|
|
270
|
+
}
|
|
271
|
+
} else if (dirNameStr.includes(join("caxa", "applications"))) {
|
|
272
|
+
altGlobalPlugins = join(
|
|
273
|
+
dirNameStr,
|
|
274
|
+
"node_modules",
|
|
275
|
+
"pnpm",
|
|
276
|
+
`@cdxgen+cdxgen-plugins-bin${target.pluginsBinSuffix}@${pluginVersion}`,
|
|
277
|
+
"node_modules",
|
|
278
|
+
"@cdxgen",
|
|
279
|
+
`cdxgen-plugins-bin${target.pluginsBinSuffix}`,
|
|
280
|
+
"plugins",
|
|
281
|
+
);
|
|
282
|
+
extraNMBinPath = join(dirNameStr, "node_modules", ".bin");
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Fallback: npx cache layout (Deno/npm) where cdxgen lives alongside
|
|
286
|
+
// @cdxgen/cdxgen-plugins-bin under a shared registry root such as
|
|
287
|
+
// `~/.cache/deno/npm/registry.npmjs.org/`.
|
|
288
|
+
if (!pluginsDir) {
|
|
289
|
+
const npxPluginCandidates = resolveNpxPluginsDirs(
|
|
290
|
+
dirNameStr,
|
|
291
|
+
pluginVersion,
|
|
292
|
+
target,
|
|
293
|
+
);
|
|
294
|
+
for (const npxPluginCandidate of npxPluginCandidates) {
|
|
295
|
+
if (!hasUsablePluginsDir(npxPluginCandidate.pluginsDir)) {
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
pluginsDir = npxPluginCandidate.pluginsDir;
|
|
299
|
+
if (
|
|
300
|
+
npxPluginCandidate.extraNMBinPath &&
|
|
301
|
+
safeExistsSync(npxPluginCandidate.extraNMBinPath)
|
|
302
|
+
) {
|
|
303
|
+
extraNMBinPath = npxPluginCandidate.extraNMBinPath;
|
|
304
|
+
}
|
|
305
|
+
if (DEBUG_MODE) {
|
|
306
|
+
console.log("Found npx plugins", pluginsDir);
|
|
307
|
+
}
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (globalPlugins && safeExistsSync(globalPlugins)) {
|
|
313
|
+
pluginsDir = globalPlugins;
|
|
314
|
+
if (DEBUG_MODE) {
|
|
315
|
+
console.log("Found global plugins", pluginsDir);
|
|
316
|
+
}
|
|
317
|
+
} else if (altGlobalPlugins && safeExistsSync(altGlobalPlugins)) {
|
|
318
|
+
pluginsDir = altGlobalPlugins;
|
|
319
|
+
if (DEBUG_MODE) {
|
|
320
|
+
console.log("Found global plugins", pluginsDir);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
if (!pluginsDir) {
|
|
326
|
+
// The plugins directory ships inside the platform-specific package
|
|
327
|
+
// (`@cdxgen/cdxgen-plugins-bin${pluginsBinSuffix}`), which is an optional
|
|
328
|
+
// dependency. cdxgen falls back to its JavaScript implementations for every
|
|
329
|
+
// plugin-backed feature, so an absent plugins directory is a supported
|
|
330
|
+
// install and must not be reported as an error.
|
|
331
|
+
if (DEBUG_MODE) {
|
|
332
|
+
console.log(
|
|
333
|
+
target.pluginsBinSuffix
|
|
334
|
+
? `@cdxgen/cdxgen-plugins-bin${target.pluginsBinSuffix} was not found; using the JavaScript implementations instead.`
|
|
335
|
+
: `No cdxgen-plugins-bin package is published for ${target.platform}/${target.arch}; using the JavaScript implementations instead.`,
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
pluginsDir = "";
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const pluginManifestFile = safeExistsSync(
|
|
342
|
+
join(pluginsDir, "plugins-manifest.json"),
|
|
343
|
+
)
|
|
344
|
+
? join(pluginsDir, "plugins-manifest.json")
|
|
345
|
+
: undefined;
|
|
346
|
+
|
|
347
|
+
return {
|
|
348
|
+
...target,
|
|
349
|
+
extraNMBinPath,
|
|
350
|
+
pluginManifestFile,
|
|
351
|
+
pluginVersion,
|
|
352
|
+
pluginsDir,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
function getPluginRuntimeCacheKey() {
|
|
357
|
+
return [
|
|
358
|
+
readEnvironmentVariable("CDXGEN_PLUGINS_DIR") || "",
|
|
359
|
+
readEnvironmentVariable("GLOBAL_NODE_MODULES_PATH") || "",
|
|
360
|
+
].join("\u0000");
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
let cachedPluginRuntime;
|
|
364
|
+
let cachedPluginRuntimeKey;
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* Retrieve the default plugin runtime, recomputing it only when the
|
|
368
|
+
* environment that influences plugin discovery changes.
|
|
369
|
+
*
|
|
370
|
+
* @returns {ReturnType<typeof resolveCdxgenPlugins>} The resolved plugin runtime.
|
|
371
|
+
*/
|
|
372
|
+
export function getDefaultPluginRuntime() {
|
|
373
|
+
const cacheKey = getPluginRuntimeCacheKey();
|
|
374
|
+
if (!cachedPluginRuntime || cachedPluginRuntimeKey !== cacheKey) {
|
|
375
|
+
cachedPluginRuntime = resolveCdxgenPlugins();
|
|
376
|
+
cachedPluginRuntimeKey = cacheKey;
|
|
377
|
+
}
|
|
378
|
+
return cachedPluginRuntime;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Add the detected node_modules binary directory to PATH when present.
|
|
383
|
+
*
|
|
384
|
+
* @param {ReturnType<typeof resolveCdxgenPlugins>} [pluginRuntime] Detected plugin runtime.
|
|
385
|
+
* @returns {ReturnType<typeof resolveCdxgenPlugins>} The resolved plugin runtime.
|
|
386
|
+
*/
|
|
387
|
+
export function setPluginsPathEnv(pluginRuntime = undefined) {
|
|
388
|
+
pluginRuntime ??= getDefaultPluginRuntime();
|
|
389
|
+
if (
|
|
390
|
+
pluginRuntime.extraNMBinPath &&
|
|
391
|
+
!readEnvironmentVariable("PATH")?.includes(pluginRuntime.extraNMBinPath)
|
|
392
|
+
) {
|
|
393
|
+
process.env.PATH = `${pluginRuntime.extraNMBinPath}${delimiter}${process.env.PATH}`;
|
|
394
|
+
}
|
|
395
|
+
return pluginRuntime;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
function resolveBundledPluginBinary(toolName, pluginRuntime) {
|
|
399
|
+
if (!pluginRuntime.pluginsDir) {
|
|
400
|
+
return undefined;
|
|
401
|
+
}
|
|
402
|
+
if (!safeExistsSync(join(pluginRuntime.pluginsDir, toolName))) {
|
|
403
|
+
return undefined;
|
|
404
|
+
}
|
|
405
|
+
switch (toolName) {
|
|
406
|
+
case "trivy":
|
|
407
|
+
return join(
|
|
408
|
+
pluginRuntime.pluginsDir,
|
|
409
|
+
"trivy",
|
|
410
|
+
`trivy-cdxgen-${pluginRuntime.platform}-${pluginRuntime.arch}${pluginRuntime.extn}`,
|
|
411
|
+
);
|
|
412
|
+
case "cargo-auditable":
|
|
413
|
+
return join(
|
|
414
|
+
pluginRuntime.pluginsDir,
|
|
415
|
+
"cargo-auditable",
|
|
416
|
+
`cargo-auditable-cdxgen-${pluginRuntime.platform}-${pluginRuntime.arch}${pluginRuntime.extn}`,
|
|
417
|
+
);
|
|
418
|
+
case "osquery": {
|
|
419
|
+
let osqueryBin = join(
|
|
420
|
+
pluginRuntime.pluginsDir,
|
|
421
|
+
"osquery",
|
|
422
|
+
`osqueryi-${pluginRuntime.platform}-${pluginRuntime.arch}${pluginRuntime.extn}`,
|
|
423
|
+
);
|
|
424
|
+
if (pluginRuntime.platform === "darwin") {
|
|
425
|
+
osqueryBin = `${osqueryBin}.app/Contents/MacOS/osqueryd`;
|
|
426
|
+
}
|
|
427
|
+
return osqueryBin;
|
|
428
|
+
}
|
|
429
|
+
case "dosai":
|
|
430
|
+
case "golem":
|
|
431
|
+
case "rusi":
|
|
432
|
+
case "cdxrs":
|
|
433
|
+
case "cdxui":
|
|
434
|
+
return join(
|
|
435
|
+
pluginRuntime.pluginsDir,
|
|
436
|
+
toolName,
|
|
437
|
+
`${toolName}-${pluginRuntime.platform}-${pluginRuntime.arch}${pluginRuntime.extn}`,
|
|
438
|
+
);
|
|
439
|
+
case "trustinspector":
|
|
440
|
+
return join(
|
|
441
|
+
pluginRuntime.pluginsDir,
|
|
442
|
+
"trustinspector",
|
|
443
|
+
`trustinspector-cdxgen-${pluginRuntime.platform}-${pluginRuntime.arch}${pluginRuntime.extn}`,
|
|
444
|
+
);
|
|
445
|
+
case "sourcekitten":
|
|
446
|
+
return join(pluginRuntime.pluginsDir, "sourcekitten", "sourcekitten");
|
|
447
|
+
default:
|
|
448
|
+
return undefined;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* Resolve a known plugin binary path, honoring explicit environment overrides.
|
|
454
|
+
*
|
|
455
|
+
* @param {string} toolName Tool identifier.
|
|
456
|
+
* @param {ReturnType<typeof resolveCdxgenPlugins>} [pluginRuntime] Detected plugin runtime.
|
|
457
|
+
* @returns {string|undefined} Resolved binary path or configured override.
|
|
458
|
+
*/
|
|
459
|
+
export function resolvePluginBinary(toolName, pluginRuntime = undefined) {
|
|
460
|
+
pluginRuntime ??= getDefaultPluginRuntime();
|
|
461
|
+
const envCommandName = PLUGIN_ENV_COMMAND_NAMES[toolName];
|
|
462
|
+
if (envCommandName && readEnvironmentVariable(envCommandName)) {
|
|
463
|
+
return readEnvironmentVariable(envCommandName);
|
|
464
|
+
}
|
|
465
|
+
return resolveBundledPluginBinary(toolName, pluginRuntime);
|
|
466
|
+
}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
bomStats,
|
|
5
|
+
convertBom,
|
|
6
|
+
createBom,
|
|
7
|
+
decodeBomBinary,
|
|
8
|
+
decodeBomJson,
|
|
9
|
+
encodeBomBinary,
|
|
10
|
+
encodeBomJson,
|
|
11
|
+
parseBomBinary,
|
|
12
|
+
parseBomJson,
|
|
13
|
+
supportedSpecVersions,
|
|
14
|
+
} from "@cdxgen/cdx-proto";
|
|
15
|
+
|
|
16
|
+
import { safeExistsSync, safeWriteSync } from "../core/fs.js";
|
|
17
|
+
import { toCycloneDxSpecVersionString } from "./bomUtils.js";
|
|
18
|
+
|
|
19
|
+
const JSON_READ_OPTIONS = {
|
|
20
|
+
ignoreUnknownFields: true,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const BINARY_READ_OPTIONS = {
|
|
24
|
+
readUnknownFields: true,
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const BINARY_WRITE_OPTIONS = {
|
|
28
|
+
writeUnknownFields: true,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const PROTO_BOM_FILE_EXTENSIONS = [".cdx", ".cdx.bin", ".proto"];
|
|
32
|
+
|
|
33
|
+
const DEFAULT_SPEC_VERSION =
|
|
34
|
+
supportedSpecVersions[supportedSpecVersions.length - 1];
|
|
35
|
+
const PROTO_SUPPORTED_SPEC_VERSIONS = new Set(
|
|
36
|
+
supportedSpecVersions.map((specVersion) =>
|
|
37
|
+
toCycloneDxSpecVersionString(specVersion),
|
|
38
|
+
),
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
const isProtoMessageBom = (bom) =>
|
|
42
|
+
Boolean(
|
|
43
|
+
bom &&
|
|
44
|
+
typeof bom === "object" &&
|
|
45
|
+
!Array.isArray(bom) &&
|
|
46
|
+
typeof bom.$typeName === "string" &&
|
|
47
|
+
bom.specVersion,
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
const hasExplicitSpecVersion = (bomJson) =>
|
|
51
|
+
Boolean(
|
|
52
|
+
bomJson &&
|
|
53
|
+
typeof bomJson === "object" &&
|
|
54
|
+
!Array.isArray(bomJson) &&
|
|
55
|
+
(bomJson.specVersion !== undefined || bomJson.spec_version !== undefined),
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
const resolveExplicitSpecVersion = (bomJson) =>
|
|
59
|
+
bomJson?.specVersion ?? bomJson?.spec_version;
|
|
60
|
+
|
|
61
|
+
const hasProvidedSpecVersion = (specVersion) =>
|
|
62
|
+
specVersion !== undefined &&
|
|
63
|
+
specVersion !== null &&
|
|
64
|
+
`${specVersion}`.trim() !== "";
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Determine whether a spec version is supported for protobuf serialization.
|
|
68
|
+
*
|
|
69
|
+
* @param {string|undefined} specVersion CycloneDX spec version string
|
|
70
|
+
* @returns {boolean} `true` when supported by `@cdxgen/cdx-proto`, or when no spec version is provided
|
|
71
|
+
*/
|
|
72
|
+
export const isProtoSupportedSpecVersion = (specVersion) => {
|
|
73
|
+
if (!hasProvidedSpecVersion(specVersion)) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
const normalizedSpecVersion = toCycloneDxSpecVersionString(specVersion);
|
|
77
|
+
return (
|
|
78
|
+
normalizedSpecVersion !== undefined &&
|
|
79
|
+
PROTO_SUPPORTED_SPEC_VERSIONS.has(normalizedSpecVersion)
|
|
80
|
+
);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Assert that a spec version is supported by `@cdxgen/cdx-proto`.
|
|
85
|
+
*
|
|
86
|
+
* Throws an `Error` naming the unsupported version and the operation when the
|
|
87
|
+
* spec version cannot be serialized to protobuf; returns without effect
|
|
88
|
+
* otherwise.
|
|
89
|
+
*
|
|
90
|
+
* @param {string|undefined} specVersion CycloneDX spec version string
|
|
91
|
+
* @param {string} [operation="protobuf operations"] Operation label used in the error message
|
|
92
|
+
*/
|
|
93
|
+
export const assertProtoSupportedSpecVersion = (
|
|
94
|
+
specVersion,
|
|
95
|
+
operation = "protobuf operations",
|
|
96
|
+
) => {
|
|
97
|
+
if (!hasProvidedSpecVersion(specVersion)) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const normalizedSpecVersion = toCycloneDxSpecVersionString(specVersion);
|
|
101
|
+
if (isProtoSupportedSpecVersion(specVersion)) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const displaySpecVersion = normalizedSpecVersion || `${specVersion}`.trim();
|
|
105
|
+
throw new Error(
|
|
106
|
+
`CycloneDX ${displaySpecVersion} is not currently supported for ${operation}. @cdxgen/cdx-proto supports ${supportedSpecVersions.join(", ")} only.`,
|
|
107
|
+
);
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const resolveBomMessage = (bomJson, specVersion = DEFAULT_SPEC_VERSION) => {
|
|
111
|
+
if (isProtoMessageBom(bomJson)) {
|
|
112
|
+
return bomJson;
|
|
113
|
+
}
|
|
114
|
+
const parsedBomJson =
|
|
115
|
+
typeof bomJson === "string" || bomJson instanceof String
|
|
116
|
+
? JSON.parse(`${bomJson}`)
|
|
117
|
+
: bomJson;
|
|
118
|
+
if (
|
|
119
|
+
parsedBomJson &&
|
|
120
|
+
typeof parsedBomJson === "object" &&
|
|
121
|
+
!Array.isArray(parsedBomJson)
|
|
122
|
+
) {
|
|
123
|
+
if (hasExplicitSpecVersion(parsedBomJson)) {
|
|
124
|
+
assertProtoSupportedSpecVersion(
|
|
125
|
+
resolveExplicitSpecVersion(parsedBomJson),
|
|
126
|
+
"protobuf serialization",
|
|
127
|
+
);
|
|
128
|
+
return parseBomJson(parsedBomJson, JSON_READ_OPTIONS);
|
|
129
|
+
}
|
|
130
|
+
assertProtoSupportedSpecVersion(specVersion, "protobuf serialization");
|
|
131
|
+
return decodeBomJson(specVersion, parsedBomJson, JSON_READ_OPTIONS);
|
|
132
|
+
}
|
|
133
|
+
return createBom(specVersion);
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Determine whether a path looks like a CycloneDX protobuf file.
|
|
138
|
+
*
|
|
139
|
+
* @param {string} filePath File path
|
|
140
|
+
* @returns {boolean} true when the path looks like a protobuf BOM file
|
|
141
|
+
*/
|
|
142
|
+
export const isProtoBomFile = (filePath) => {
|
|
143
|
+
const normalizedPath = `${filePath || ""}`.toLowerCase();
|
|
144
|
+
return PROTO_BOM_FILE_EXTENSIONS.some((extension) =>
|
|
145
|
+
normalizedPath.endsWith(extension),
|
|
146
|
+
);
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Method to convert the given bom json to proto binary
|
|
151
|
+
*
|
|
152
|
+
* @param {string | Object} bomJson BOM Json
|
|
153
|
+
* @param {string} binFile Binary file name
|
|
154
|
+
* @param {string | number} [specVersion] CycloneDX spec version fallback for BOMs without specVersion
|
|
155
|
+
*/
|
|
156
|
+
export const writeBinary = (
|
|
157
|
+
bomJson,
|
|
158
|
+
binFile,
|
|
159
|
+
specVersion = DEFAULT_SPEC_VERSION,
|
|
160
|
+
) => {
|
|
161
|
+
if (bomJson && binFile) {
|
|
162
|
+
const bomMessage = resolveBomMessage(bomJson, specVersion);
|
|
163
|
+
safeWriteSync(binFile, encodeBomBinary(bomMessage, BINARY_WRITE_OPTIONS));
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Method to read a serialized binary
|
|
169
|
+
*
|
|
170
|
+
* @param {string} binFile Binary file name
|
|
171
|
+
* @param {boolean} asJson Convert to JSON
|
|
172
|
+
* @param {string | number} [specVersion] Optional specification version. When omitted, cdxgen auto-detects the matching schema.
|
|
173
|
+
*/
|
|
174
|
+
export const readBinary = (binFile, asJson, specVersion) => {
|
|
175
|
+
asJson = asJson ?? true;
|
|
176
|
+
assertProtoSupportedSpecVersion(specVersion, "protobuf decoding");
|
|
177
|
+
if (!safeExistsSync(binFile)) {
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
const binaryData = readFileSync(binFile);
|
|
181
|
+
const bomObject =
|
|
182
|
+
specVersion !== undefined && specVersion !== null && specVersion !== ""
|
|
183
|
+
? decodeBomBinary(specVersion, binaryData, BINARY_READ_OPTIONS)
|
|
184
|
+
: parseBomBinary(binaryData, BINARY_READ_OPTIONS);
|
|
185
|
+
if (asJson) {
|
|
186
|
+
return encodeBomJson(bomObject);
|
|
187
|
+
}
|
|
188
|
+
return bomObject;
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Method to compute size and count statistics for a BOM.
|
|
193
|
+
*
|
|
194
|
+
* @param {string | Object} bomJson BOM Json, BOM Json string, or proto message
|
|
195
|
+
* @param {string | number} [specVersion] CycloneDX spec version fallback for BOMs without specVersion
|
|
196
|
+
* @returns {Object} Component and dependency counts with JSON/binary byte sizes and compression ratio
|
|
197
|
+
*/
|
|
198
|
+
export const getBomStats = (bomJson, specVersion = DEFAULT_SPEC_VERSION) =>
|
|
199
|
+
bomStats(resolveBomMessage(bomJson, specVersion));
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Method to cross-convert a BOM between CycloneDX specification versions using
|
|
203
|
+
* the protobuf schemas.
|
|
204
|
+
*
|
|
205
|
+
* Downgrades are lossy: fields that the target version does not define are
|
|
206
|
+
* dropped and reported in `warnings` as field paths.
|
|
207
|
+
*
|
|
208
|
+
* This is the raw `@cdxgen/cdx-proto` conversion. It reshapes nothing that the
|
|
209
|
+
* two schemas model with different cardinality, so a BOM crossing the 1.5/1.6
|
|
210
|
+
* `evidence.identity` boundary must be normalized first. Prefer
|
|
211
|
+
* `applySpecVersionCompatibility` from the postgen stage for that.
|
|
212
|
+
*
|
|
213
|
+
* @param {string | Object} bomJson BOM Json, BOM Json string, or proto message
|
|
214
|
+
* @param {string | number} targetSpecVersion Target CycloneDX spec version
|
|
215
|
+
* @param {string | number} [specVersion] CycloneDX spec version fallback for BOMs without specVersion
|
|
216
|
+
* @returns {{bomJson: Object, warnings: string[]}} Converted BOM Json and the field paths dropped
|
|
217
|
+
*/
|
|
218
|
+
export const convertBomSpecVersion = (
|
|
219
|
+
bomJson,
|
|
220
|
+
targetSpecVersion,
|
|
221
|
+
specVersion = DEFAULT_SPEC_VERSION,
|
|
222
|
+
) => {
|
|
223
|
+
assertProtoSupportedSpecVersion(targetSpecVersion, "protobuf conversion");
|
|
224
|
+
const normalizedTargetSpecVersion =
|
|
225
|
+
toCycloneDxSpecVersionString(targetSpecVersion) || `${targetSpecVersion}`;
|
|
226
|
+
const { bom, warnings } = convertBom(
|
|
227
|
+
resolveBomMessage(bomJson, specVersion),
|
|
228
|
+
normalizedTargetSpecVersion,
|
|
229
|
+
);
|
|
230
|
+
return { bomJson: encodeBomJson(bom), warnings };
|
|
231
|
+
};
|