@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.
- package/README.md +921 -87
- package/bin/audit.js +239 -0
- package/bin/cdxgen.js +2335 -0
- package/bin/convert.js +220 -0
- package/bin/evinse.js +353 -0
- package/bin/hbom.js +504 -0
- package/bin/repl.js +2224 -0
- package/bin/sign.js +195 -0
- package/bin/tracebom.js +303 -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 +1882 -0
- package/lib/cli/cliOptions.js +543 -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 +280 -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 +920 -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 +583 -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 +1793 -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 +383 -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 +267 -0
- package/lib/inventory/traceRunner.js +439 -0
- package/lib/inventory/unicodeScan.js +147 -0
- package/lib/managers/binary.js +3459 -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 +329 -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 +50 -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 +201 -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 +22 -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 +147 -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,122 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
|
|
3
|
+
import { toCamel } from "./paths.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Config file names cdxgen reads from the directory it is invoked in.
|
|
7
|
+
*/
|
|
8
|
+
export const PROJECT_CONFIG_FILENAMES = [
|
|
9
|
+
".cdxgenrc",
|
|
10
|
+
".cdxgen.json",
|
|
11
|
+
".cdxgen.yml",
|
|
12
|
+
".cdxgen.yaml",
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Options whose values name a file or directory cdxgen writes to or reads
|
|
17
|
+
* from. A config file may set these, but only to a location inside its own
|
|
18
|
+
* directory.
|
|
19
|
+
*/
|
|
20
|
+
const PATH_OPTIONS = new Set([
|
|
21
|
+
"output",
|
|
22
|
+
"evinse-output",
|
|
23
|
+
"proto-bin-file",
|
|
24
|
+
"deps-slices-file",
|
|
25
|
+
"usages-slices-file",
|
|
26
|
+
"data-flow-slices-file",
|
|
27
|
+
"reachables-slices-file",
|
|
28
|
+
"semantics-slices-file",
|
|
29
|
+
"openapi-spec-file",
|
|
30
|
+
"license-policy",
|
|
31
|
+
"bom-audit-rules-dir",
|
|
32
|
+
]);
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Options that change where cdxgen sends data or how much of the host it
|
|
36
|
+
* touches. These stay usable, but never silently.
|
|
37
|
+
*/
|
|
38
|
+
const ANNOUNCED_OPTIONS = new Set([
|
|
39
|
+
"server-url",
|
|
40
|
+
"api-key",
|
|
41
|
+
"include-formulation",
|
|
42
|
+
"install-deps",
|
|
43
|
+
"deep",
|
|
44
|
+
"tea-publish",
|
|
45
|
+
"tea-fetch",
|
|
46
|
+
"tea-artifact-url",
|
|
47
|
+
"tea-token",
|
|
48
|
+
]);
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Both spellings a config file may use for an option.
|
|
52
|
+
*
|
|
53
|
+
* @param {string} option kebab-case option name
|
|
54
|
+
* @returns {string[]} kebab-case and camelCase spellings
|
|
55
|
+
*/
|
|
56
|
+
function optionSpellings(option) {
|
|
57
|
+
const camel = toCamel(option);
|
|
58
|
+
return camel === option ? [option] : [option, camel];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Determine whether a config-supplied path stays inside the config's own
|
|
63
|
+
* directory.
|
|
64
|
+
*
|
|
65
|
+
* @param {string} configDir directory the config file was read from
|
|
66
|
+
* @param {unknown} value config-supplied path value
|
|
67
|
+
* @returns {boolean} true when the path resolves inside configDir
|
|
68
|
+
*/
|
|
69
|
+
function isContainedPath(configDir, value) {
|
|
70
|
+
if (typeof value !== "string" || !value.length) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
const relativePath = path.relative(
|
|
74
|
+
path.resolve(configDir),
|
|
75
|
+
path.resolve(configDir, value),
|
|
76
|
+
);
|
|
77
|
+
return (
|
|
78
|
+
relativePath === "" ||
|
|
79
|
+
(!relativePath.startsWith("..") && !path.isAbsolute(relativePath))
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Apply the trust boundary between cdxgen and the directory it is scanning.
|
|
85
|
+
*
|
|
86
|
+
* A config file lives in the tree under analysis, so it is attacker-controlled
|
|
87
|
+
* whenever that tree is. Path options are therefore confined to the config's
|
|
88
|
+
* own directory - a scanned project may choose where in itself the BOM lands,
|
|
89
|
+
* but not write outside it - and options that redirect data off the host or
|
|
90
|
+
* widen what cdxgen executes are announced on the console.
|
|
91
|
+
*
|
|
92
|
+
* @param {Object} config parsed config file contents
|
|
93
|
+
* @param {string} configDir directory the config file was read from
|
|
94
|
+
* @returns {{config: Object, rejected: string[], announced: string[]}} sanitized config and what it did
|
|
95
|
+
*/
|
|
96
|
+
export function sanitizeProjectConfig(config, configDir) {
|
|
97
|
+
if (!config || typeof config !== "object") {
|
|
98
|
+
return { announced: [], config: {}, rejected: [] };
|
|
99
|
+
}
|
|
100
|
+
const sanitized = { ...config };
|
|
101
|
+
const rejected = [];
|
|
102
|
+
const announced = [];
|
|
103
|
+
for (const option of PATH_OPTIONS) {
|
|
104
|
+
for (const key of optionSpellings(option)) {
|
|
105
|
+
if (sanitized[key] === undefined) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (!isContainedPath(configDir, sanitized[key])) {
|
|
109
|
+
rejected.push(`${key}=${sanitized[key]}`);
|
|
110
|
+
delete sanitized[key];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
for (const option of ANNOUNCED_OPTIONS) {
|
|
115
|
+
for (const key of optionSpellings(option)) {
|
|
116
|
+
if (sanitized[key] !== undefined) {
|
|
117
|
+
announced.push(key);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return { announced, config: sanitized, rejected };
|
|
122
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
|
|
3
|
+
const DANGEROUS_OBJECT_KEYS = new Set([
|
|
4
|
+
"__proto__",
|
|
5
|
+
"constructor",
|
|
6
|
+
"prototype",
|
|
7
|
+
]);
|
|
8
|
+
const INLINE_CREDENTIAL_PATTERNS = [
|
|
9
|
+
/\bAKIA[0-9A-Z]{16}\b/gu,
|
|
10
|
+
/\bASIA[0-9A-Z]{16}\b/gu,
|
|
11
|
+
/\bbearer\s+[a-z0-9._-]{16,}\b/giu,
|
|
12
|
+
/\b(?:sk|rk|pk)(?:-[a-z0-9]+)?_[a-z0-9_-]{8,}\b/giu,
|
|
13
|
+
/\bgh[pousr]_[a-z0-9]{20,}\b/giu,
|
|
14
|
+
/\bAIza[0-9A-Za-z_-]{20,}\b/gu,
|
|
15
|
+
/\bxox[baprs]-[a-z0-9-]{10,}\b/giu,
|
|
16
|
+
/\bnpm_[a-z0-9]{20,}\b/giu,
|
|
17
|
+
/\b(?:eyJ[a-z0-9_-]+\.[a-z0-9._-]+\.[a-z0-9._-]+)\b/giu,
|
|
18
|
+
];
|
|
19
|
+
const SENSITIVE_KEY_PATTERN =
|
|
20
|
+
/(?:api[-_]?key|auth(?:orization)?|bearer|credential|passwd|password|secret|session|token)/iu;
|
|
21
|
+
const JSON_PROPERTY_NAMES = new Set([
|
|
22
|
+
"cdx:agent:permission",
|
|
23
|
+
"cdx:mcp:toolAnnotations",
|
|
24
|
+
"cdx:skill:metadata",
|
|
25
|
+
"cdx:ai:codegen:evidence:json",
|
|
26
|
+
]);
|
|
27
|
+
const URL_PATTERN = /https?:\/\/[^\s<>"'),\]}]+/giu;
|
|
28
|
+
const MAX_STRUCTURE_DEPTH = 6;
|
|
29
|
+
|
|
30
|
+
function sanitizeUrlForBom(value) {
|
|
31
|
+
const input = String(value || "").trim();
|
|
32
|
+
if (!input) {
|
|
33
|
+
return input;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const parsed = new URL(input);
|
|
37
|
+
parsed.username = "";
|
|
38
|
+
parsed.password = "";
|
|
39
|
+
parsed.search = "";
|
|
40
|
+
parsed.hash = "";
|
|
41
|
+
return parsed.toString();
|
|
42
|
+
} catch {
|
|
43
|
+
return input;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function sanitizeTextForBom(value) {
|
|
48
|
+
let sanitized = String(value ?? "");
|
|
49
|
+
sanitized = sanitized.replace(URL_PATTERN, (match) =>
|
|
50
|
+
sanitizeUrlForBom(match),
|
|
51
|
+
);
|
|
52
|
+
for (const pattern of INLINE_CREDENTIAL_PATTERNS) {
|
|
53
|
+
sanitized = sanitized.replace(pattern, "[redacted]");
|
|
54
|
+
}
|
|
55
|
+
return sanitized;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Recursively sanitize structured values before embedding them in a BOM.
|
|
60
|
+
*
|
|
61
|
+
* @param {unknown} value structured value
|
|
62
|
+
* @returns {unknown} sanitized value
|
|
63
|
+
*/
|
|
64
|
+
export function sanitizeStructuredValueForBom(value) {
|
|
65
|
+
return sanitizeStructuredValueEntryForBom(value, 0, new WeakSet());
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function sanitizeStructuredValueEntryForBom(value, depth, seen) {
|
|
69
|
+
if (typeof value === "string") {
|
|
70
|
+
return sanitizeTextForBom(value);
|
|
71
|
+
}
|
|
72
|
+
if (depth >= MAX_STRUCTURE_DEPTH) {
|
|
73
|
+
return "[truncated]";
|
|
74
|
+
}
|
|
75
|
+
if (Array.isArray(value)) {
|
|
76
|
+
return value.map((entry) =>
|
|
77
|
+
sanitizeStructuredValueEntryForBom(entry, depth + 1, seen),
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
if (value && typeof value === "object") {
|
|
81
|
+
if (seen.has(value)) {
|
|
82
|
+
return "[circular]";
|
|
83
|
+
}
|
|
84
|
+
seen.add(value);
|
|
85
|
+
const sanitized = {};
|
|
86
|
+
for (const [key, entryValue] of Object.entries(value)) {
|
|
87
|
+
if (DANGEROUS_OBJECT_KEYS.has(key)) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
sanitized[key] = SENSITIVE_KEY_PATTERN.test(key)
|
|
91
|
+
? "[redacted]"
|
|
92
|
+
: sanitizeStructuredValueEntryForBom(entryValue, depth + 1, seen);
|
|
93
|
+
}
|
|
94
|
+
seen.delete(value);
|
|
95
|
+
return sanitized;
|
|
96
|
+
}
|
|
97
|
+
return value;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function extractCommandExecutable(command) {
|
|
101
|
+
let trimmedCommand = String(command || "").trim();
|
|
102
|
+
if (!trimmedCommand) {
|
|
103
|
+
return "";
|
|
104
|
+
}
|
|
105
|
+
trimmedCommand = trimmedCommand.replace(
|
|
106
|
+
/^(?:[A-Za-z_][A-Za-z0-9_]*=(?:"[^"]*"|'[^']*'|[^\s]+)\s+)+/u,
|
|
107
|
+
"",
|
|
108
|
+
);
|
|
109
|
+
const quotedMatch = trimmedCommand.match(/^(['"])(.*?)\1/u);
|
|
110
|
+
if (quotedMatch?.[2]) {
|
|
111
|
+
return quotedMatch[2];
|
|
112
|
+
}
|
|
113
|
+
const envExecutableMatch = trimmedCommand.match(
|
|
114
|
+
/^(?:\/usr\/bin\/env\s+)?([A-Za-z0-9_./\\-]+)(?=\s|$)/u,
|
|
115
|
+
);
|
|
116
|
+
if (envExecutableMatch?.[1]) {
|
|
117
|
+
return envExecutableMatch[1];
|
|
118
|
+
}
|
|
119
|
+
const absolutePathMatch = trimmedCommand.match(
|
|
120
|
+
/^((?:[A-Za-z]:\\|\/).*?\.(?:bat|bin|cjs|cmd|com|exe|jar|js|mjs|ps1|py|rb|sh|ts|tsx))(?=\s|$)/iu,
|
|
121
|
+
);
|
|
122
|
+
if (absolutePathMatch?.[1]) {
|
|
123
|
+
return absolutePathMatch[1];
|
|
124
|
+
}
|
|
125
|
+
return trimmedCommand.split(/\s+/u)[0];
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function summarizeExecutable(command) {
|
|
129
|
+
const executable = extractCommandExecutable(command);
|
|
130
|
+
if (!executable) {
|
|
131
|
+
return "configured";
|
|
132
|
+
}
|
|
133
|
+
if (executable.includes("\\")) {
|
|
134
|
+
return path.win32.basename(executable) || "configured";
|
|
135
|
+
}
|
|
136
|
+
return path.posix.basename(executable) || "configured";
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Sanitize a URL value for safe BOM emission.
|
|
141
|
+
*
|
|
142
|
+
* @param {string} value URL value
|
|
143
|
+
* @returns {string} sanitized URL
|
|
144
|
+
*/
|
|
145
|
+
export function sanitizeBomUrl(value) {
|
|
146
|
+
return sanitizeUrlForBom(value);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Sanitize a property value before serializing it into BOM properties.
|
|
151
|
+
*
|
|
152
|
+
* @param {string} name property name
|
|
153
|
+
* @param {unknown} value property value
|
|
154
|
+
* @returns {string|unknown} sanitized property value
|
|
155
|
+
*/
|
|
156
|
+
export function sanitizeBomPropertyValue(name, value) {
|
|
157
|
+
if (value === undefined || value === null || value === "") {
|
|
158
|
+
return value;
|
|
159
|
+
}
|
|
160
|
+
if (name === "cdx:mcp:command") {
|
|
161
|
+
const sanitizedCommand = sanitizeTextForBom(value).trim();
|
|
162
|
+
if (!sanitizedCommand) {
|
|
163
|
+
return sanitizedCommand;
|
|
164
|
+
}
|
|
165
|
+
return summarizeExecutable(sanitizedCommand);
|
|
166
|
+
}
|
|
167
|
+
if (JSON_PROPERTY_NAMES.has(name) || typeof value === "object") {
|
|
168
|
+
return JSON.stringify(sanitizeStructuredValueForBom(value));
|
|
169
|
+
}
|
|
170
|
+
if (typeof value === "string") {
|
|
171
|
+
return sanitizeTextForBom(value);
|
|
172
|
+
}
|
|
173
|
+
return value;
|
|
174
|
+
}
|
package/lib/core/spdx.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** SPDX 3.0.1 JSON-LD context URL used when exporting CycloneDX documents to SPDX. */
|
|
2
|
+
export const SPDX_JSONLD_CONTEXT =
|
|
3
|
+
"https://spdx.org/rdf/3.0.1/spdx-context.jsonld";
|
|
4
|
+
/** SPDX specification version string targeted by the SPDX export converter. */
|
|
5
|
+
export const SPDX_SPEC_VERSION = "3.0.1";
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
|
|
4
|
+
import { dirNameStr } from "./paths.js";
|
|
5
|
+
|
|
6
|
+
/** Loaded vendor alias mapping from data/vendor-alias.json. */
|
|
7
|
+
const vendorAliases = JSON.parse(
|
|
8
|
+
readFileSync(join(dirNameStr, "data", "vendor-alias.json"), "utf-8"),
|
|
9
|
+
);
|
|
10
|
+
/** Loaded Meson WrapDB releases from data/wrapdb-releases.json. */
|
|
11
|
+
const mesonWrapDB = JSON.parse(
|
|
12
|
+
readFileSync(join(dirNameStr, "data", "wrapdb-releases.json"), "utf-8"),
|
|
13
|
+
);
|
|
14
|
+
/** Loaded list of known frameworks from data/frameworks-list.json. */
|
|
15
|
+
export const frameworksList = JSON.parse(
|
|
16
|
+
readFileSync(join(dirNameStr, "data", "frameworks-list.json"), "utf-8"),
|
|
17
|
+
);
|
|
18
|
+
const selfPJson = JSON.parse(
|
|
19
|
+
readFileSync(join(dirNameStr, "package.json"), "utf-8"),
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
/** Loaded set of C/C++ standard library modules from data/glibc-stdlib.json. */
|
|
23
|
+
const CPP_STD_MODULES = JSON.parse(
|
|
24
|
+
readFileSync(join(dirNameStr, "data", "glibc-stdlib.json"), "utf-8"),
|
|
25
|
+
);
|
|
26
|
+
/** Installed cdxgen version, read from package.json. */
|
|
27
|
+
export const CDXGEN_VERSION = selfPJson.version;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* cdxgen's own scope and name, read from its package.json rather than hardcoded.
|
|
31
|
+
*
|
|
32
|
+
* Both the tool component in `metadata.tools` and the code that later finds that
|
|
33
|
+
* component again (to attach release notes) need this identity. When the strings
|
|
34
|
+
* were duplicated, the v13 rename to `@cdxgen/cdxgen` updated the producer but
|
|
35
|
+
* not the consumer, and `--release-notes` silently became a no-op.
|
|
36
|
+
*/
|
|
37
|
+
const selfNameParts = selfPJson.name.split("/");
|
|
38
|
+
/** cdxgen npm scope group (e.g. "@cdxgen"), or empty string when unscoped. */
|
|
39
|
+
export const CDXGEN_TOOL_GROUP =
|
|
40
|
+
selfNameParts.length > 1 ? selfNameParts[0] : "";
|
|
41
|
+
/** cdxgen bare tool name (the final path segment of the package name). */
|
|
42
|
+
export const CDXGEN_TOOL_NAME = selfNameParts[selfNameParts.length - 1];
|
|
43
|
+
|
|
44
|
+
/** Loaded set of Python standard library modules from data/python-stdlib.json. */
|
|
45
|
+
const PYTHON_STD_MODULES = JSON.parse(
|
|
46
|
+
readFileSync(join(dirNameStr, "data", "python-stdlib.json"), "utf-8"),
|
|
47
|
+
);
|
|
48
|
+
/** Loaded mapping between Python module names and PyPI package names from data/pypi-pkg-aliases.json. */
|
|
49
|
+
const PYPI_MODULE_PACKAGE_MAPPING = JSON.parse(
|
|
50
|
+
readFileSync(join(dirNameStr, "data", "pypi-pkg-aliases.json"), "utf-8"),
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
export {
|
|
54
|
+
CPP_STD_MODULES,
|
|
55
|
+
mesonWrapDB,
|
|
56
|
+
PYPI_MODULE_PACKAGE_MAPPING,
|
|
57
|
+
PYTHON_STD_MODULES,
|
|
58
|
+
vendorAliases,
|
|
59
|
+
};
|
package/lib/core/text.js
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ANSI-aware text measurement, stripping, and wrapping helpers.
|
|
3
|
+
*
|
|
4
|
+
* Layer 0: this module imports nothing outside `lib/core`. It is the shared
|
|
5
|
+
* home for the width/wrap primitives that `lib/inventory/table.js` (layer 2)
|
|
6
|
+
* and `lib/core/ui.js` (layer 0) both need, so neither has to reach across a
|
|
7
|
+
* layer boundary for them.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/** String source of a regex matching ANSI escape sequences (CSI forms). */
|
|
11
|
+
const ANSI_PATTERN = "\\u001B\\[[0-?]*[ -/]*[@-~]";
|
|
12
|
+
/** Global regex constructed from {@link ANSI_PATTERN}, used to strip ANSI escapes. */
|
|
13
|
+
const ANSI_REGEX = new RegExp(ANSI_PATTERN, "g");
|
|
14
|
+
/** Regex matching Unicode combining mark characters (the `\p{Mark}` category). */
|
|
15
|
+
const COMBINING_MARK_REGEX = /\p{Mark}/u;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Strip ANSI escape sequences from a string.
|
|
19
|
+
*
|
|
20
|
+
* @param {string} input Input possibly containing ANSI escapes
|
|
21
|
+
* @returns {string} Visible text only
|
|
22
|
+
*/
|
|
23
|
+
export const stripAnsi = (input) => `${input ?? ""}`.replace(ANSI_REGEX, "");
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Detect full-width East-Asian-Wide and emoji code points so they occupy two
|
|
27
|
+
* cells instead of one. The ranges mirror the EastAsianWidth+F/EV definitions
|
|
28
|
+
* used by mainstream terminal width libraries.
|
|
29
|
+
*
|
|
30
|
+
* @param {number} codePoint Code point to test
|
|
31
|
+
* @returns {boolean} True when the code point is double-width
|
|
32
|
+
*/
|
|
33
|
+
export const isFullWidthCodePoint = (codePoint) => {
|
|
34
|
+
return (
|
|
35
|
+
codePoint >= 0x1100 &&
|
|
36
|
+
(codePoint <= 0x115f ||
|
|
37
|
+
codePoint === 0x2329 ||
|
|
38
|
+
codePoint === 0x232a ||
|
|
39
|
+
(codePoint >= 0x2e80 && codePoint <= 0xa4cf && codePoint !== 0x303f) ||
|
|
40
|
+
(codePoint >= 0xac00 && codePoint <= 0xd7a3) ||
|
|
41
|
+
(codePoint >= 0xf900 && codePoint <= 0xfaff) ||
|
|
42
|
+
(codePoint >= 0xfe10 && codePoint <= 0xfe19) ||
|
|
43
|
+
(codePoint >= 0xfe30 && codePoint <= 0xfe6f) ||
|
|
44
|
+
(codePoint >= 0xff00 && codePoint <= 0xff60) ||
|
|
45
|
+
(codePoint >= 0xffe0 && codePoint <= 0xffe6) ||
|
|
46
|
+
(codePoint >= 0x1f300 && codePoint <= 0x1f64f) ||
|
|
47
|
+
(codePoint >= 0x1f900 && codePoint <= 0x1f9ff))
|
|
48
|
+
);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Measure the visible cell width of a string, accounting for ANSI escapes,
|
|
53
|
+
* combining marks, and full-width code points.
|
|
54
|
+
*
|
|
55
|
+
* @param {string} input Input to measure
|
|
56
|
+
* @returns {number} Visible width in terminal cells
|
|
57
|
+
*/
|
|
58
|
+
export const stringWidth = (input) => {
|
|
59
|
+
const clean = stripAnsi(input);
|
|
60
|
+
let width = 0;
|
|
61
|
+
for (const char of clean) {
|
|
62
|
+
if (char === "\n" || char === "\r") {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (COMBINING_MARK_REGEX.test(char)) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const codePoint = char.codePointAt(0);
|
|
69
|
+
width += isFullWidthCodePoint(codePoint) ? 2 : 1;
|
|
70
|
+
}
|
|
71
|
+
return width;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Pad/align text to a target visible width.
|
|
76
|
+
*
|
|
77
|
+
* @param {string} text Text to align
|
|
78
|
+
* @param {number} width Target cell width
|
|
79
|
+
* @param {"left"|"right"|"center"} [alignment="left"] Alignment
|
|
80
|
+
* @returns {string} Padded text
|
|
81
|
+
*/
|
|
82
|
+
export const alignText = (text, width, alignment = "left") => {
|
|
83
|
+
const visibleWidth = stringWidth(text);
|
|
84
|
+
if (visibleWidth >= width) {
|
|
85
|
+
return text;
|
|
86
|
+
}
|
|
87
|
+
const totalPad = width - visibleWidth;
|
|
88
|
+
if (alignment === "right") {
|
|
89
|
+
return `${" ".repeat(totalPad)}${text}`;
|
|
90
|
+
}
|
|
91
|
+
if (alignment === "center") {
|
|
92
|
+
const left = Math.floor(totalPad / 2);
|
|
93
|
+
const right = totalPad - left;
|
|
94
|
+
return `${" ".repeat(left)}${text}${" ".repeat(right)}`;
|
|
95
|
+
}
|
|
96
|
+
return `${text}${" ".repeat(totalPad)}`;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Split a single line into ANSI and non-ANSI tokens, preserving the escape
|
|
101
|
+
* sequences so wrappers can re-emit them attached to the right chunk.
|
|
102
|
+
*
|
|
103
|
+
* @param {string} line Input line
|
|
104
|
+
* @returns {{isAnsi: boolean, value: string}[]} Tokens in order
|
|
105
|
+
*/
|
|
106
|
+
export const splitAnsiTokens = (line) => {
|
|
107
|
+
const tokens = [];
|
|
108
|
+
const ansiRegex = new RegExp(ANSI_PATTERN, "g");
|
|
109
|
+
let cursor = 0;
|
|
110
|
+
for (const match of line.matchAll(ansiRegex)) {
|
|
111
|
+
const index = match.index ?? 0;
|
|
112
|
+
if (index > cursor) {
|
|
113
|
+
tokens.push({ isAnsi: false, value: line.slice(cursor, index) });
|
|
114
|
+
}
|
|
115
|
+
tokens.push({ isAnsi: true, value: match[0] });
|
|
116
|
+
cursor = index + match[0].length;
|
|
117
|
+
}
|
|
118
|
+
if (cursor < line.length) {
|
|
119
|
+
tokens.push({ isAnsi: false, value: line.slice(cursor) });
|
|
120
|
+
}
|
|
121
|
+
return tokens;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Wrap a single line by character count, keeping ANSI sequences attached to
|
|
126
|
+
* the current chunk.
|
|
127
|
+
*
|
|
128
|
+
* @param {string} line Input line (no embedded newlines)
|
|
129
|
+
* @param {number} width Target cell width
|
|
130
|
+
* @returns {string[]} Wrapped lines
|
|
131
|
+
*/
|
|
132
|
+
export const wrapLineByChars = (line, width) => {
|
|
133
|
+
if (line === "") {
|
|
134
|
+
return [""];
|
|
135
|
+
}
|
|
136
|
+
if (width <= 0 || stringWidth(line) <= width) {
|
|
137
|
+
return [line];
|
|
138
|
+
}
|
|
139
|
+
const wrapped = [];
|
|
140
|
+
let chunk = "";
|
|
141
|
+
let chunkWidth = 0;
|
|
142
|
+
for (const token of splitAnsiTokens(line)) {
|
|
143
|
+
if (token.isAnsi) {
|
|
144
|
+
chunk += token.value;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
for (const char of token.value) {
|
|
148
|
+
const charWidth = stringWidth(char);
|
|
149
|
+
if (chunkWidth + charWidth > width && chunk) {
|
|
150
|
+
wrapped.push(chunk);
|
|
151
|
+
chunk = "";
|
|
152
|
+
chunkWidth = 0;
|
|
153
|
+
}
|
|
154
|
+
chunk += char;
|
|
155
|
+
chunkWidth += charWidth;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (chunk) {
|
|
159
|
+
wrapped.push(chunk);
|
|
160
|
+
}
|
|
161
|
+
return wrapped.length ? wrapped : [""];
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Wrap a single line by word boundaries, falling back to character wrapping
|
|
166
|
+
* for words longer than the width.
|
|
167
|
+
*
|
|
168
|
+
* @param {string} line Input line
|
|
169
|
+
* @param {number} width Target cell width
|
|
170
|
+
* @returns {string[]} Wrapped lines
|
|
171
|
+
*/
|
|
172
|
+
export const wrapLineByWords = (line, width) => {
|
|
173
|
+
if (!line) {
|
|
174
|
+
return [""];
|
|
175
|
+
}
|
|
176
|
+
if (width <= 0 || stringWidth(line) <= width) {
|
|
177
|
+
return [line];
|
|
178
|
+
}
|
|
179
|
+
const words = line.split(/\s+/).filter(Boolean);
|
|
180
|
+
if (!words.length) {
|
|
181
|
+
return wrapLineByChars(line, width);
|
|
182
|
+
}
|
|
183
|
+
const wrapped = [];
|
|
184
|
+
let current = "";
|
|
185
|
+
for (const word of words) {
|
|
186
|
+
const candidate = current ? `${current} ${word}` : word;
|
|
187
|
+
if (stringWidth(candidate) <= width) {
|
|
188
|
+
current = candidate;
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
if (current) {
|
|
192
|
+
wrapped.push(current);
|
|
193
|
+
}
|
|
194
|
+
if (stringWidth(word) > width) {
|
|
195
|
+
wrapped.push(...wrapLineByChars(word, width));
|
|
196
|
+
current = "";
|
|
197
|
+
} else {
|
|
198
|
+
current = word;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (current) {
|
|
202
|
+
wrapped.push(current);
|
|
203
|
+
}
|
|
204
|
+
return wrapped.length ? wrapped : [""];
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
export { ANSI_PATTERN, ANSI_REGEX, COMBINING_MARK_REGEX };
|