@cdxgen/cdxgen 13.5.0 → 13.7.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 +17 -10
- package/bin/audit.js +7 -4
- package/bin/cdxgen.js +260 -37
- package/bin/convert.js +146 -22
- package/bin/evinse.js +28 -3
- package/bin/repl.js +47 -3
- package/bin/sign.js +211 -34
- package/bin/tracebom.js +18 -6
- package/bin/validate.js +24 -3
- package/bin/verify.js +113 -5
- package/data/behavior-taxonomy.schema.json +1491 -0
- package/data/cyclonedx-2.0-bundled.schema.json +18606 -5528
- package/data/cyclonedx-2.0-cryptography-defs.schema.json +857 -0
- package/data/license-aliases.json +24 -2
- package/data/pqc-migration.json +239 -0
- package/data/remediations.json +176 -0
- package/data/rules/ai-bom.yaml +1 -1
- package/data/rules/brotli-decoder.yaml +107 -0
- package/data/rules/cbom-security.yaml +4 -3
- package/data/rules/package-integrity.yaml +28 -0
- package/data/rules/vscode-extensions.yaml +75 -0
- package/data/spdx-license-list.json +121 -7
- package/data/spdx-licenses.json +69 -0
- package/data/spdx.schema.json +845 -2
- package/lib/audit/index.js +25 -3
- package/lib/cli/bomAssembly.js +172 -4
- package/lib/cli/cliOptions.js +121 -17
- package/lib/cli/index.js +720 -902
- package/lib/cli/jsBom.js +156 -64
- package/lib/cli/jvmBom.js +602 -86
- package/lib/cli/managedBom.js +161 -19
- package/lib/cli/nativeBom.js +52 -5
- package/lib/core/boundedFile.js +344 -0
- package/lib/core/brotliProbe.js +182 -0
- package/lib/core/env.js +34 -0
- package/lib/core/fs.js +138 -3
- package/lib/core/globPatterns.js +218 -0
- package/lib/core/httpClient.js +98 -1
- package/lib/core/lockPaths.js +38 -0
- package/lib/core/paths.js +24 -1
- package/lib/core/processTree.js +100 -8
- package/lib/core/projectConfig.js +332 -25
- package/lib/core/toolRegistry.js +184 -0
- package/lib/ecosystems/cppEvidence.js +263 -106
- package/lib/ecosystems/cppIncludeResolver.js +16 -5
- package/lib/ecosystems/denoutils.js +2 -2
- package/lib/ecosystems/ecosystems.js +25 -10
- package/lib/ecosystems/gemHostProbe.js +301 -0
- package/lib/ecosystems/golem.js +3 -8
- package/lib/ecosystems/gradleutils.js +1909 -229
- package/lib/ecosystems/jsEvidence.js +90 -38
- package/lib/ecosystems/kosi.js +3 -5
- package/lib/ecosystems/npmVersionResolution.js +376 -0
- package/lib/ecosystems/parsers-bazel.js +107 -6
- package/lib/ecosystems/parsers-js.js +505 -22
- package/lib/ecosystems/parsers-misc.js +209 -20
- package/lib/ecosystems/parsers-python.js +178 -30
- package/lib/ecosystems/parsers-rust.js +117 -15
- package/lib/ecosystems/pythonutils.js +128 -2
- package/lib/ecosystems/remote/huggingface.js +22 -0
- package/lib/ecosystems/rubyutils.js +538 -31
- package/lib/ecosystems/rusi.js +2 -4
- package/lib/ecosystems/scalacliutils.js +2 -0
- package/lib/ecosystems/scalasem.js +798 -152
- package/lib/ecosystems/vendoredCode.js +237 -3
- package/lib/ecosystems/venvProbe.js +360 -0
- package/lib/evinser/evinser.js +536 -71
- package/lib/evinser/scalasem.js +5 -1
- package/lib/helpers/agenticToolutils.js +525 -94
- package/lib/helpers/bomSigner.js +43 -9
- package/lib/helpers/jssSigner.js +1276 -0
- package/lib/helpers/vsixutils.js +1574 -315
- package/lib/inventory/agentBlueprint.js +193 -0
- package/lib/inventory/agentToolNames.js +145 -0
- package/lib/inventory/aiCollector.js +153 -7
- package/lib/inventory/aiInventory.js +44 -8
- package/lib/inventory/aiProviders.js +324 -0
- package/lib/inventory/atomUtils.js +77 -0
- package/lib/inventory/bomUtils.js +8 -1
- package/lib/inventory/brotliDecoder.js +142 -0
- package/lib/inventory/buildToolRateLimit.js +1 -1
- package/lib/inventory/cbomutils.js +56 -7
- package/lib/inventory/ciParsers/githubActionsLock.js +821 -0
- package/lib/inventory/citations.js +31 -2
- package/lib/inventory/communityAiConfigParser.js +978 -80
- package/lib/inventory/cyclonedx20.js +152 -0
- package/lib/inventory/cyclonedx20Common.js +286 -0
- package/lib/inventory/cyclonedx20Derived.js +159 -0
- package/lib/inventory/cyclonedx20Parties.js +552 -0
- package/lib/inventory/cyclonedx20Read.js +768 -0
- package/lib/inventory/cyclonedx20ReadCommon.js +374 -0
- package/lib/inventory/cyclonedx20ReadComponents.js +692 -0
- package/lib/inventory/cyclonedx20ReadContext.js +380 -0
- package/lib/inventory/cyclonedx20ReadEvidence.js +466 -0
- package/lib/inventory/cyclonedx20ReadSections.js +599 -0
- package/lib/inventory/cyclonedx20Render.js +766 -0
- package/lib/inventory/cyclonedx20RenderComponents.js +716 -0
- package/lib/inventory/cyclonedx20RenderDefinitions.js +405 -0
- package/lib/inventory/cyclonedx20RenderEvidence.js +726 -0
- package/lib/inventory/cyclonedx20RenderHardware.js +203 -0
- package/lib/inventory/cyclonedx20RenderPatents.js +174 -0
- package/lib/inventory/cyclonedx20RenderRefIds.js +314 -0
- package/lib/inventory/cyclonedx20RenderSections.js +499 -0
- package/lib/inventory/cyclonedx20Tables.js +594 -0
- package/lib/inventory/deps.js +141 -13
- package/lib/inventory/dosai.js +375 -6
- package/lib/inventory/dosaiParsers.js +3 -6
- package/lib/inventory/dotnetRuntime.js +367 -0
- package/lib/inventory/ecosystemFormulationParsers.js +979 -0
- package/lib/inventory/envcontext.js +436 -48
- package/lib/inventory/evidenceUtils.js +13 -1
- package/lib/inventory/fetchBatch.js +1 -1
- package/lib/inventory/formulationParsers.js +124 -14
- package/lib/inventory/gtfobins.js +13 -0
- package/lib/inventory/hbom.js +45 -6
- package/lib/inventory/hbomLoader.js +166 -0
- package/lib/inventory/hostRuntimeProbe.js +686 -0
- package/lib/inventory/jvmLocalRepos.js +9 -2
- package/lib/inventory/jvmToolEnv.js +29 -0
- package/lib/inventory/licenseEnhancer.js +12 -0
- package/lib/inventory/mavenCentralMirror.js +534 -0
- package/lib/inventory/mcpConfigParser.js +5 -0
- package/lib/inventory/nodeBuildInfo.js +218 -0
- package/lib/inventory/nodeHostProbe.js +202 -0
- package/lib/inventory/occurrenceKey.js +90 -0
- package/lib/inventory/osPackageResolver.js +182 -0
- package/lib/inventory/phpBuildInfo.js +10 -59
- package/lib/inventory/phpHostProbe.js +32 -488
- package/lib/inventory/pqcMigration.js +426 -0
- package/lib/inventory/rubyBuildInfo.js +972 -0
- package/lib/inventory/rubyHostProbe.js +218 -0
- package/lib/inventory/rustFormulationParser.js +21 -10
- package/lib/inventory/scalaCoords.js +4 -3
- package/lib/inventory/scalaDedupe.js +440 -0
- package/lib/inventory/source.js +114 -8
- package/lib/managers/binary.js +337 -3
- package/lib/managers/docker.js +79 -0
- package/lib/parsers/huggingfaceManifest.js +9 -1
- package/lib/parsers/huggingfaceUtils.js +18 -0
- package/lib/parsers/kiroPermissions.js +166 -0
- package/lib/parsers/largeJson.js +28 -11
- package/lib/parsers/vscodeExtensionId.js +183 -0
- package/lib/server/server.js +48 -35
- package/lib/stages/postgen/postgen.js +41 -1
- package/lib/stages/postgen/ruleEngine.js +13 -5
- package/lib/stages/postgen/specVersionCompat.js +76 -0
- package/lib/stages/pregen/envAudit.js +1 -0
- package/lib/stages/pregen/pregen.js +114 -57
- package/lib/validator/bomValidator.js +14 -2
- package/lib/validator/complianceEngine.js +30 -3
- package/lib/validator/complianceRules.js +1416 -4
- package/lib/validator/generated/validate-1.6.mjs +1 -1
- package/lib/validator/generated/validate-1.7.mjs +1 -1
- package/lib/validator/generated/validate-2.0.mjs +57554 -13851
- package/lib/validator/index.js +49 -8
- package/lib/validator/reporters/json.js +6 -0
- package/package.json +11 -10
- package/types/bin/repl.d.ts.map +1 -1
- package/types/lib/audit/index.d.ts +6 -2
- package/types/lib/audit/index.d.ts.map +1 -1
- package/types/lib/cli/bomAssembly.d.ts +29 -1
- package/types/lib/cli/bomAssembly.d.ts.map +1 -1
- package/types/lib/cli/cliOptions.d.ts +6 -0
- package/types/lib/cli/cliOptions.d.ts.map +1 -1
- package/types/lib/cli/index.d.ts.map +1 -1
- package/types/lib/cli/jsBom.d.ts +3 -18
- package/types/lib/cli/jsBom.d.ts.map +1 -1
- package/types/lib/cli/jvmBom.d.ts +15 -0
- package/types/lib/cli/jvmBom.d.ts.map +1 -1
- package/types/lib/cli/managedBom.d.ts.map +1 -1
- package/types/lib/cli/nativeBom.d.ts.map +1 -1
- package/types/lib/core/boundedFile.d.ts +100 -0
- package/types/lib/core/boundedFile.d.ts.map +1 -0
- package/types/lib/core/brotliProbe.d.ts +37 -0
- package/types/lib/core/brotliProbe.d.ts.map +1 -0
- package/types/lib/core/env.d.ts +14 -0
- package/types/lib/core/env.d.ts.map +1 -1
- package/types/lib/core/fs.d.ts +4 -0
- package/types/lib/core/fs.d.ts.map +1 -1
- package/types/lib/core/globPatterns.d.ts +70 -0
- package/types/lib/core/globPatterns.d.ts.map +1 -0
- package/types/lib/core/httpClient.d.ts +24 -0
- package/types/lib/core/httpClient.d.ts.map +1 -1
- package/types/lib/core/lockPaths.d.ts +19 -0
- package/types/lib/core/lockPaths.d.ts.map +1 -0
- package/types/lib/core/paths.d.ts +9 -0
- package/types/lib/core/paths.d.ts.map +1 -1
- package/types/lib/core/processTree.d.ts +17 -4
- package/types/lib/core/processTree.d.ts.map +1 -1
- package/types/lib/core/projectConfig.d.ts +47 -8
- package/types/lib/core/projectConfig.d.ts.map +1 -1
- package/types/lib/core/toolRegistry.d.ts +36 -0
- package/types/lib/core/toolRegistry.d.ts.map +1 -0
- package/types/lib/ecosystems/cppEvidence.d.ts +40 -13
- package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -1
- package/types/lib/ecosystems/cppIncludeResolver.d.ts +2 -1
- package/types/lib/ecosystems/cppIncludeResolver.d.ts.map +1 -1
- package/types/lib/ecosystems/ecosystems.d.ts.map +1 -1
- package/types/lib/ecosystems/gemHostProbe.d.ts +28 -0
- package/types/lib/ecosystems/gemHostProbe.d.ts.map +1 -0
- package/types/lib/ecosystems/golem.d.ts.map +1 -1
- package/types/lib/ecosystems/gradleutils.d.ts +294 -20
- package/types/lib/ecosystems/gradleutils.d.ts.map +1 -1
- package/types/lib/ecosystems/jsEvidence.d.ts +14 -1
- package/types/lib/ecosystems/jsEvidence.d.ts.map +1 -1
- package/types/lib/ecosystems/kosi.d.ts.map +1 -1
- package/types/lib/ecosystems/npmVersionResolution.d.ts +119 -0
- package/types/lib/ecosystems/npmVersionResolution.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-bazel.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-js.d.ts +17 -20
- package/types/lib/ecosystems/parsers-js.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-misc.d.ts +19 -0
- package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-python.d.ts +10 -0
- package/types/lib/ecosystems/parsers-python.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-rust.d.ts.map +1 -1
- package/types/lib/ecosystems/pythonutils.d.ts +19 -1
- package/types/lib/ecosystems/pythonutils.d.ts.map +1 -1
- package/types/lib/ecosystems/remote/huggingface.d.ts.map +1 -1
- package/types/lib/ecosystems/rubyutils.d.ts +144 -12
- package/types/lib/ecosystems/rubyutils.d.ts.map +1 -1
- package/types/lib/ecosystems/rusi.d.ts.map +1 -1
- package/types/lib/ecosystems/scalacliutils.d.ts.map +1 -1
- package/types/lib/ecosystems/scalasem.d.ts +58 -16
- package/types/lib/ecosystems/scalasem.d.ts.map +1 -1
- package/types/lib/ecosystems/vendoredCode.d.ts +26 -0
- package/types/lib/ecosystems/vendoredCode.d.ts.map +1 -1
- package/types/lib/ecosystems/venvProbe.d.ts +40 -0
- package/types/lib/ecosystems/venvProbe.d.ts.map +1 -0
- package/types/lib/evinser/evinser.d.ts +120 -13
- package/types/lib/evinser/evinser.d.ts.map +1 -1
- package/types/lib/evinser/scalasem.d.ts.map +1 -1
- package/types/lib/helpers/agenticToolutils.d.ts +53 -19
- package/types/lib/helpers/agenticToolutils.d.ts.map +1 -1
- package/types/lib/helpers/bomSigner.d.ts +20 -3
- package/types/lib/helpers/bomSigner.d.ts.map +1 -1
- package/types/lib/helpers/jssSigner.d.ts +288 -0
- package/types/lib/helpers/jssSigner.d.ts.map +1 -0
- package/types/lib/helpers/vsixutils.d.ts +303 -19
- package/types/lib/helpers/vsixutils.d.ts.map +1 -1
- package/types/lib/inventory/agentBlueprint.d.ts +70 -0
- package/types/lib/inventory/agentBlueprint.d.ts.map +1 -0
- package/types/lib/inventory/agentToolNames.d.ts +51 -0
- package/types/lib/inventory/agentToolNames.d.ts.map +1 -0
- package/types/lib/inventory/aiCollector.d.ts.map +1 -1
- package/types/lib/inventory/aiInventory.d.ts.map +1 -1
- package/types/lib/inventory/aiProviders.d.ts +85 -0
- package/types/lib/inventory/aiProviders.d.ts.map +1 -0
- package/types/lib/inventory/atomUtils.d.ts +19 -0
- package/types/lib/inventory/atomUtils.d.ts.map +1 -1
- package/types/lib/inventory/bomUtils.d.ts.map +1 -1
- package/types/lib/inventory/brotliDecoder.d.ts +58 -0
- package/types/lib/inventory/brotliDecoder.d.ts.map +1 -0
- package/types/lib/inventory/cbomutils.d.ts +17 -0
- package/types/lib/inventory/cbomutils.d.ts.map +1 -1
- package/types/lib/inventory/ciParsers/githubActionsLock.d.ts +101 -0
- package/types/lib/inventory/ciParsers/githubActionsLock.d.ts.map +1 -0
- package/types/lib/inventory/citations.d.ts +5 -0
- package/types/lib/inventory/citations.d.ts.map +1 -1
- package/types/lib/inventory/communityAiConfigParser.d.ts.map +1 -1
- package/types/lib/inventory/cyclonedx20.d.ts +99 -0
- package/types/lib/inventory/cyclonedx20.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20Common.d.ts +102 -0
- package/types/lib/inventory/cyclonedx20Common.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20Derived.d.ts +74 -0
- package/types/lib/inventory/cyclonedx20Derived.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20Parties.d.ts +91 -0
- package/types/lib/inventory/cyclonedx20Parties.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20Read.d.ts +51 -0
- package/types/lib/inventory/cyclonedx20Read.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20ReadCommon.d.ts +69 -0
- package/types/lib/inventory/cyclonedx20ReadCommon.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20ReadComponents.d.ts +77 -0
- package/types/lib/inventory/cyclonedx20ReadComponents.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20ReadContext.d.ts +118 -0
- package/types/lib/inventory/cyclonedx20ReadContext.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20ReadEvidence.d.ts +40 -0
- package/types/lib/inventory/cyclonedx20ReadEvidence.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20ReadSections.d.ts +45 -0
- package/types/lib/inventory/cyclonedx20ReadSections.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20Render.d.ts +53 -0
- package/types/lib/inventory/cyclonedx20Render.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20RenderComponents.d.ts +73 -0
- package/types/lib/inventory/cyclonedx20RenderComponents.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20RenderDefinitions.d.ts +29 -0
- package/types/lib/inventory/cyclonedx20RenderDefinitions.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20RenderEvidence.d.ts +110 -0
- package/types/lib/inventory/cyclonedx20RenderEvidence.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20RenderHardware.d.ts +42 -0
- package/types/lib/inventory/cyclonedx20RenderHardware.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20RenderPatents.d.ts +26 -0
- package/types/lib/inventory/cyclonedx20RenderPatents.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20RenderRefIds.d.ts +55 -0
- package/types/lib/inventory/cyclonedx20RenderRefIds.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20RenderSections.d.ts +45 -0
- package/types/lib/inventory/cyclonedx20RenderSections.d.ts.map +1 -0
- package/types/lib/inventory/cyclonedx20Tables.d.ts +134 -0
- package/types/lib/inventory/cyclonedx20Tables.d.ts.map +1 -0
- package/types/lib/inventory/deps.d.ts +35 -2
- package/types/lib/inventory/deps.d.ts.map +1 -1
- package/types/lib/inventory/dosai.d.ts +36 -1
- package/types/lib/inventory/dosai.d.ts.map +1 -1
- package/types/lib/inventory/dosaiParsers.d.ts.map +1 -1
- package/types/lib/inventory/dotnetRuntime.d.ts +91 -0
- package/types/lib/inventory/dotnetRuntime.d.ts.map +1 -0
- package/types/lib/inventory/ecosystemFormulationParsers.d.ts +73 -0
- package/types/lib/inventory/ecosystemFormulationParsers.d.ts.map +1 -0
- package/types/lib/inventory/envcontext.d.ts +74 -12
- package/types/lib/inventory/envcontext.d.ts.map +1 -1
- package/types/lib/inventory/evidenceUtils.d.ts.map +1 -1
- package/types/lib/inventory/formulationParsers.d.ts.map +1 -1
- package/types/lib/inventory/gtfobins.d.ts.map +1 -1
- package/types/lib/inventory/hbom.d.ts +11 -0
- package/types/lib/inventory/hbom.d.ts.map +1 -1
- package/types/lib/inventory/hbomLoader.d.ts +54 -0
- package/types/lib/inventory/hbomLoader.d.ts.map +1 -1
- package/types/lib/inventory/hostRuntimeProbe.d.ts +44 -0
- package/types/lib/inventory/hostRuntimeProbe.d.ts.map +1 -0
- package/types/lib/inventory/jvmLocalRepos.d.ts +5 -1
- package/types/lib/inventory/jvmLocalRepos.d.ts.map +1 -1
- package/types/lib/inventory/jvmToolEnv.d.ts +12 -0
- package/types/lib/inventory/jvmToolEnv.d.ts.map +1 -1
- package/types/lib/inventory/licenseEnhancer.d.ts.map +1 -1
- package/types/lib/inventory/mavenCentralMirror.d.ts +170 -0
- package/types/lib/inventory/mavenCentralMirror.d.ts.map +1 -0
- package/types/lib/inventory/mcpConfigParser.d.ts.map +1 -1
- package/types/lib/inventory/nodeBuildInfo.d.ts +95 -0
- package/types/lib/inventory/nodeBuildInfo.d.ts.map +1 -0
- package/types/lib/inventory/nodeHostProbe.d.ts +15 -0
- package/types/lib/inventory/nodeHostProbe.d.ts.map +1 -0
- package/types/lib/inventory/occurrenceKey.d.ts +52 -0
- package/types/lib/inventory/occurrenceKey.d.ts.map +1 -0
- package/types/lib/inventory/osPackageResolver.d.ts +38 -0
- package/types/lib/inventory/osPackageResolver.d.ts.map +1 -1
- package/types/lib/inventory/phpBuildInfo.d.ts.map +1 -1
- package/types/lib/inventory/phpHostProbe.d.ts.map +1 -1
- package/types/lib/inventory/pqcMigration.d.ts +84 -0
- package/types/lib/inventory/pqcMigration.d.ts.map +1 -0
- package/types/lib/inventory/rubyBuildInfo.d.ts +271 -0
- package/types/lib/inventory/rubyBuildInfo.d.ts.map +1 -0
- package/types/lib/inventory/rubyHostProbe.d.ts +47 -0
- package/types/lib/inventory/rubyHostProbe.d.ts.map +1 -0
- package/types/lib/inventory/rustFormulationParser.d.ts +7 -2
- package/types/lib/inventory/rustFormulationParser.d.ts.map +1 -1
- package/types/lib/inventory/scalaCoords.d.ts.map +1 -1
- package/types/lib/inventory/scalaDedupe.d.ts +43 -0
- package/types/lib/inventory/scalaDedupe.d.ts.map +1 -0
- package/types/lib/inventory/source.d.ts +25 -0
- package/types/lib/inventory/source.d.ts.map +1 -1
- package/types/lib/managers/binary.d.ts.map +1 -1
- package/types/lib/managers/docker.d.ts +12 -0
- package/types/lib/managers/docker.d.ts.map +1 -1
- package/types/lib/parsers/huggingfaceManifest.d.ts +10 -1
- package/types/lib/parsers/huggingfaceManifest.d.ts.map +1 -1
- package/types/lib/parsers/huggingfaceUtils.d.ts +12 -0
- package/types/lib/parsers/huggingfaceUtils.d.ts.map +1 -1
- package/types/lib/parsers/kiroPermissions.d.ts +62 -0
- package/types/lib/parsers/kiroPermissions.d.ts.map +1 -0
- package/types/lib/parsers/largeJson.d.ts +4 -3
- package/types/lib/parsers/largeJson.d.ts.map +1 -1
- package/types/lib/parsers/vscodeExtensionId.d.ts +48 -0
- package/types/lib/parsers/vscodeExtensionId.d.ts.map +1 -0
- package/types/lib/server/server.d.ts.map +1 -1
- package/types/lib/stages/postgen/postgen.d.ts +7 -0
- package/types/lib/stages/postgen/postgen.d.ts.map +1 -1
- package/types/lib/stages/postgen/ruleEngine.d.ts.map +1 -1
- package/types/lib/stages/postgen/specVersionCompat.d.ts +25 -0
- package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -1
- package/types/lib/stages/pregen/envAudit.d.ts.map +1 -1
- package/types/lib/stages/pregen/pregen.d.ts +12 -8
- package/types/lib/stages/pregen/pregen.d.ts.map +1 -1
- package/types/lib/validator/bomValidator.d.ts +5 -1
- package/types/lib/validator/bomValidator.d.ts.map +1 -1
- package/types/lib/validator/complianceEngine.d.ts +4 -4
- package/types/lib/validator/complianceEngine.d.ts.map +1 -1
- package/types/lib/validator/complianceRules.d.ts +14 -2
- package/types/lib/validator/complianceRules.d.ts.map +1 -1
- package/types/lib/validator/index.d.ts +10 -0
- package/types/lib/validator/index.d.ts.map +1 -1
- package/types/lib/validator/reporters/json.d.ts.map +1 -1
|
@@ -506,27 +506,55 @@ function resolveCargoWorkspaceDependencyTarget(
|
|
|
506
506
|
) {
|
|
507
507
|
return workspaceMemberMap.get(resolvedDependencyName);
|
|
508
508
|
}
|
|
509
|
-
|
|
510
|
-
dependencyNode
|
|
511
|
-
typeof dependencyNode
|
|
512
|
-
typeof dependencyNode.path
|
|
513
|
-
dependencyNode.path
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
509
|
+
if (
|
|
510
|
+
!dependencyNode ||
|
|
511
|
+
typeof dependencyNode !== "object" ||
|
|
512
|
+
typeof dependencyNode.path !== "string" ||
|
|
513
|
+
!dependencyNode.path
|
|
514
|
+
) {
|
|
515
|
+
return undefined;
|
|
516
|
+
}
|
|
517
|
+
// A member cannot combine `workspace = true` with its own `path`, so a path
|
|
518
|
+
// on such an entry came from [workspace.dependencies], and Cargo reads it
|
|
519
|
+
// relative to the workspace root rather than to the member.
|
|
520
|
+
const pathBaseFile =
|
|
521
|
+
dependencyNode.workspace === true && workspaceContext?.workspaceRootFile
|
|
522
|
+
? workspaceContext.workspaceRootFile
|
|
523
|
+
: cargoTomlFile;
|
|
524
|
+
const dependencyPath = resolve(
|
|
525
|
+
dirname(pathBaseFile),
|
|
526
|
+
dependencyNode.path,
|
|
527
|
+
"Cargo.toml",
|
|
528
|
+
);
|
|
529
|
+
if (!safeExistsSync(dependencyPath)) {
|
|
517
530
|
return undefined;
|
|
518
531
|
}
|
|
519
532
|
const dependencyCargoData = readCargoTomlData(dependencyPath);
|
|
520
|
-
|
|
533
|
+
// A path dependency names a package; a virtual workspace root has none.
|
|
534
|
+
if (!dependencyCargoData?.package) {
|
|
521
535
|
return undefined;
|
|
522
536
|
}
|
|
537
|
+
// A path crate outside the current workspace inherits `*.workspace = true`
|
|
538
|
+
// fields from its own workspace, which resolveCargoWorkspaceContext finds by
|
|
539
|
+
// walking up from the crate. Handing it the current workspace would give
|
|
540
|
+
// the crate this workspace's version.
|
|
541
|
+
const workspaceRootDir = workspaceContext?.workspaceRootFile
|
|
542
|
+
? resolve(dirname(workspaceContext.workspaceRootFile))
|
|
543
|
+
: undefined;
|
|
544
|
+
const dependencyDir = dirname(dependencyPath);
|
|
545
|
+
const isInsideWorkspace =
|
|
546
|
+
workspaceRootDir &&
|
|
547
|
+
(dependencyDir === workspaceRootDir ||
|
|
548
|
+
dependencyDir.startsWith(`${workspaceRootDir}${_sep}`));
|
|
523
549
|
const dependencyIdentity = resolveCargoManifestPackageIdentity(
|
|
524
550
|
dependencyPath,
|
|
525
551
|
dependencyCargoData,
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
552
|
+
isInsideWorkspace
|
|
553
|
+
? {
|
|
554
|
+
workspaceRootData: workspaceContext.workspaceRootData,
|
|
555
|
+
workspaceRootFile: workspaceContext.workspaceRootFile,
|
|
556
|
+
}
|
|
557
|
+
: {},
|
|
530
558
|
);
|
|
531
559
|
if (!dependencyIdentity?.name || !dependencyIdentity?.version) {
|
|
532
560
|
return undefined;
|
|
@@ -656,6 +684,68 @@ function applyCargoDependencySpecMetadata(
|
|
|
656
684
|
);
|
|
657
685
|
}
|
|
658
686
|
|
|
687
|
+
/**
|
|
688
|
+
* Version to record for a Cargo.toml dependency whose requirement is the only
|
|
689
|
+
* thing known about it.
|
|
690
|
+
*
|
|
691
|
+
* A Cargo requirement is not a version: `serde = "1.0"` means `^1.0`, and even
|
|
692
|
+
* `"1.0.94"` means `^1.0.94`. The component version is therefore left out
|
|
693
|
+
* unless the whole requirement is an exact `=X.Y.Z` pin (with an optional
|
|
694
|
+
* prerelease and build label), which is the one requirement Cargo resolves to
|
|
695
|
+
* a single version. `=1.0` is not exact, because Cargo reads it as
|
|
696
|
+
* `>=1.0.0,<1.1.0`.
|
|
697
|
+
*
|
|
698
|
+
* When the requirement is not the node's `version` key, it is a `git+`, `path+`
|
|
699
|
+
* or `workspace` fallback from normalizeCargoDependencyVersion, and it is kept
|
|
700
|
+
* as it stands so the dependency stays traceable to its source.
|
|
701
|
+
*
|
|
702
|
+
* @param {Object|String} dependencyNode Dependency entry from the manifest
|
|
703
|
+
* @param {String} requirement Requirement string from normalizeCargoDependencyVersion
|
|
704
|
+
* @returns {String|undefined} The pinned version, or undefined
|
|
705
|
+
*/
|
|
706
|
+
function cargoManifestComponentVersion(dependencyNode, requirement) {
|
|
707
|
+
if (
|
|
708
|
+
typeof dependencyNode === "object" &&
|
|
709
|
+
dependencyNode?.version !== requirement
|
|
710
|
+
) {
|
|
711
|
+
return requirement;
|
|
712
|
+
}
|
|
713
|
+
const pin = requirement
|
|
714
|
+
.trim()
|
|
715
|
+
.match(/^=\s*(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)$/);
|
|
716
|
+
return pin ? pin[1] : undefined;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
/**
|
|
720
|
+
* Version to record for a Cargo.toml dependency component once the dependency
|
|
721
|
+
* has been resolved to a crate on disk.
|
|
722
|
+
*
|
|
723
|
+
* A path dependency or a workspace dependency always builds against the
|
|
724
|
+
* version in the target crate's own `[package]` section; the requirement next
|
|
725
|
+
* to it (`local = { path = "local", version = "0.2" }`) matters only when the
|
|
726
|
+
* crate is published to a registry. Recording the resolved version keeps one
|
|
727
|
+
* component per crate: the manifest entry and the target's own manifest, which
|
|
728
|
+
* a recursive scan parses as well, then describe the same cargo purl and
|
|
729
|
+
* merge, instead of listing the crate once version-less and once resolved
|
|
730
|
+
* (issue #4719). The `cdx:cargo:path` property keeps the dependency
|
|
731
|
+
* traceable to its source.
|
|
732
|
+
*
|
|
733
|
+
* @param {Object|String} dependencyNode Dependency entry from the manifest
|
|
734
|
+
* @param {String} requirement Requirement string from normalizeCargoDependencyVersion
|
|
735
|
+
* @param {Object|undefined} resolvedTarget Identity of the resolved local crate
|
|
736
|
+
* @returns {String|undefined} The resolved version, or cargoManifestComponentVersion's answer
|
|
737
|
+
*/
|
|
738
|
+
function cargoManifestDependencyComponentVersion(
|
|
739
|
+
dependencyNode,
|
|
740
|
+
requirement,
|
|
741
|
+
resolvedTarget,
|
|
742
|
+
) {
|
|
743
|
+
if (resolvedTarget?.version) {
|
|
744
|
+
return resolvedTarget.version;
|
|
745
|
+
}
|
|
746
|
+
return cargoManifestComponentVersion(dependencyNode, requirement);
|
|
747
|
+
}
|
|
748
|
+
|
|
659
749
|
function collectCargoManifestDependencyComponents(
|
|
660
750
|
dependencyEntries,
|
|
661
751
|
addPackageToList,
|
|
@@ -689,9 +779,21 @@ function collectCargoManifestDependencyComponents(
|
|
|
689
779
|
continue;
|
|
690
780
|
}
|
|
691
781
|
const pkg = {
|
|
692
|
-
|
|
693
|
-
|
|
782
|
+
// A renamed local dependency (`alias = { path = "…", package = "real" }`)
|
|
783
|
+
// is the crate `real`; the alias only names it inside this manifest and
|
|
784
|
+
// stays on cdx:cargo:package. Keeping the alias with the resolved version
|
|
785
|
+
// would describe a crate that does not exist, or a different one on
|
|
786
|
+
// crates.io.
|
|
787
|
+
name: resolvedWorkspaceTarget?.name || dependencyName,
|
|
788
|
+
version: cargoManifestDependencyComponentVersion(
|
|
789
|
+
dependencyNode,
|
|
790
|
+
version,
|
|
791
|
+
resolvedWorkspaceTarget,
|
|
792
|
+
),
|
|
694
793
|
};
|
|
794
|
+
if (resolvedWorkspaceTarget?.group) {
|
|
795
|
+
pkg.group = resolvedWorkspaceTarget.group;
|
|
796
|
+
}
|
|
695
797
|
applyCargoDependencySpecMetadata(
|
|
696
798
|
pkg,
|
|
697
799
|
dependencyNode,
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
import process from "node:process";
|
|
12
12
|
|
|
13
13
|
import { build } from "@cdxgen/cdx-purl";
|
|
14
|
+
import { coerce, gte } from "semver";
|
|
14
15
|
|
|
15
16
|
import {
|
|
16
17
|
DEBUG_MODE,
|
|
@@ -25,6 +26,7 @@ import {
|
|
|
25
26
|
PYPI_MODULE_PACKAGE_MAPPING,
|
|
26
27
|
PYTHON_STD_MODULES,
|
|
27
28
|
} from "../core/state.js";
|
|
29
|
+
import { parseToml } from "../core/toml.js";
|
|
28
30
|
import { findAppModules } from "../inventory/atomUtils.js";
|
|
29
31
|
import { flattenDeps } from "../inventory/deps.js";
|
|
30
32
|
import { pypiBomRef } from "../inventory/purl.js";
|
|
@@ -612,6 +614,128 @@ export function createUVLock(basePath, options) {
|
|
|
612
614
|
}
|
|
613
615
|
}
|
|
614
616
|
|
|
617
|
+
const CONSTRAINT_OPERATORS = [">=", "<=", "==", "!=", "~=", ">", "<", "^", "="];
|
|
618
|
+
const LOWER_BOUND_OPERATORS = new Set([">=", ">", "==", "~=", "^", "="]);
|
|
619
|
+
|
|
620
|
+
/**
|
|
621
|
+
* Check whether a single version constraint puts the lower bound at version 2
|
|
622
|
+
* or higher.
|
|
623
|
+
*
|
|
624
|
+
* @param {string} constraint Constraint such as ">=2.0.0" or "<3.0.0"
|
|
625
|
+
* @returns {boolean} true when the constraint requires version 2 or newer
|
|
626
|
+
*/
|
|
627
|
+
function requiresVersion2(constraint) {
|
|
628
|
+
let operator = "";
|
|
629
|
+
let version = constraint.trim();
|
|
630
|
+
for (const candidate of CONSTRAINT_OPERATORS) {
|
|
631
|
+
if (version.startsWith(candidate)) {
|
|
632
|
+
operator = candidate;
|
|
633
|
+
version = version.slice(candidate.length).trim();
|
|
634
|
+
break;
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
if (!operator || !LOWER_BOUND_OPERATORS.has(operator)) {
|
|
638
|
+
return false;
|
|
639
|
+
}
|
|
640
|
+
const coerced = coerce(version);
|
|
641
|
+
return coerced !== null && gte(coerced, "2.0.0");
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
/**
|
|
645
|
+
* Check whether a build requirement names poetry-core with a lower bound of
|
|
646
|
+
* version 2 or higher.
|
|
647
|
+
*
|
|
648
|
+
* @param {string} requirement Build requirement such as "poetry-core>=2.0.0"
|
|
649
|
+
* @returns {boolean} true when poetry-core 2 or newer is required
|
|
650
|
+
*/
|
|
651
|
+
function requiresPoetryCore2(requirement) {
|
|
652
|
+
if (typeof requirement !== "string") {
|
|
653
|
+
return false;
|
|
654
|
+
}
|
|
655
|
+
const entry = requirement.trim().toLowerCase();
|
|
656
|
+
if (!entry.startsWith("poetry-core")) {
|
|
657
|
+
return false;
|
|
658
|
+
}
|
|
659
|
+
let spec = entry.slice("poetry-core".length);
|
|
660
|
+
if (spec.startsWith("[")) {
|
|
661
|
+
const extrasEnd = spec.indexOf("]");
|
|
662
|
+
if (extrasEnd === -1) {
|
|
663
|
+
return false;
|
|
664
|
+
}
|
|
665
|
+
spec = spec.slice(extrasEnd + 1);
|
|
666
|
+
}
|
|
667
|
+
const next = spec.charAt(0);
|
|
668
|
+
if (next && next !== " " && next !== "\t" && !"><=!~^".includes(next)) {
|
|
669
|
+
return false;
|
|
670
|
+
}
|
|
671
|
+
return spec
|
|
672
|
+
.trim()
|
|
673
|
+
.split(",")
|
|
674
|
+
.some((constraint) => requiresVersion2(constraint));
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
/**
|
|
678
|
+
* Check whether a pyproject.toml requires poetry-core 2 or newer to build.
|
|
679
|
+
*
|
|
680
|
+
* @param {string} pyprojectFile Path to pyproject.toml
|
|
681
|
+
* @returns {boolean} true when the project needs Poetry 2 or newer
|
|
682
|
+
*/
|
|
683
|
+
export function isPoetry2Project(pyprojectFile) {
|
|
684
|
+
if (!pyprojectFile || !safeExistsSync(pyprojectFile)) {
|
|
685
|
+
return false;
|
|
686
|
+
}
|
|
687
|
+
let config;
|
|
688
|
+
try {
|
|
689
|
+
config = parseToml(readFileSync(pyprojectFile, "utf-8"));
|
|
690
|
+
} catch (_err) {
|
|
691
|
+
return false;
|
|
692
|
+
}
|
|
693
|
+
const requires = config?.["build-system"]?.requires;
|
|
694
|
+
if (!Array.isArray(requires)) {
|
|
695
|
+
return false;
|
|
696
|
+
}
|
|
697
|
+
return requires.some((requirement) => requiresPoetryCore2(requirement));
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
/**
|
|
701
|
+
* Find the pyproject.toml belonging to a poetry trigger file.
|
|
702
|
+
*
|
|
703
|
+
* @param {string} triggerFile pyproject.toml or poetry.lock path
|
|
704
|
+
* @returns {string|null} Path to pyproject.toml, or null when there is none
|
|
705
|
+
*/
|
|
706
|
+
function findPoetryPyprojectFile(triggerFile) {
|
|
707
|
+
if (!triggerFile) {
|
|
708
|
+
return null;
|
|
709
|
+
}
|
|
710
|
+
if (triggerFile.endsWith("pyproject.toml")) {
|
|
711
|
+
return triggerFile;
|
|
712
|
+
}
|
|
713
|
+
if (triggerFile.endsWith("poetry.lock")) {
|
|
714
|
+
const sibling = join(dirname(triggerFile), "pyproject.toml");
|
|
715
|
+
return safeExistsSync(sibling) ? sibling : null;
|
|
716
|
+
}
|
|
717
|
+
return null;
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
/**
|
|
721
|
+
* Build the poetry install arguments for a poetry project.
|
|
722
|
+
*
|
|
723
|
+
* Poetry 2 installs only the main dependency group and no extras by default,
|
|
724
|
+
* so projects requiring poetry-core 2 or newer also get --all-groups and
|
|
725
|
+
* --all-extras. Callers prepend the python invocation such as -m poetry.
|
|
726
|
+
*
|
|
727
|
+
* @param {string} pyprojectFile pyproject.toml or poetry.lock path of the project
|
|
728
|
+
* @returns {string[]} poetry install arguments
|
|
729
|
+
*/
|
|
730
|
+
export function getPoetryInstallArgs(pyprojectFile) {
|
|
731
|
+
const args = ["install", "-n", "--no-root"];
|
|
732
|
+
const resolvedFile = findPoetryPyprojectFile(pyprojectFile);
|
|
733
|
+
if (resolvedFile && isPoetry2Project(resolvedFile)) {
|
|
734
|
+
args.push("--all-groups", "--all-extras");
|
|
735
|
+
}
|
|
736
|
+
return args;
|
|
737
|
+
}
|
|
738
|
+
|
|
615
739
|
/**
|
|
616
740
|
* Execute pip freeze by creating a virtual env in a temp directory and construct the dependency tree
|
|
617
741
|
*
|
|
@@ -742,7 +866,9 @@ export async function getPipFrozenTree(
|
|
|
742
866
|
shell: isWin,
|
|
743
867
|
});
|
|
744
868
|
thoughtLog("Performing poetry install");
|
|
745
|
-
let poetryInstallArgs = ["-m", "poetry"
|
|
869
|
+
let poetryInstallArgs = ["-m", "poetry"].concat(
|
|
870
|
+
getPoetryInstallArgs(reqOrSetupFile),
|
|
871
|
+
);
|
|
746
872
|
if (isSecureMode) {
|
|
747
873
|
poetryInstallArgs.unshift("-S");
|
|
748
874
|
}
|
|
@@ -756,7 +882,7 @@ export async function getPipFrozenTree(
|
|
|
756
882
|
thoughtLog(
|
|
757
883
|
"Hmm, poetry doesn't seem to be available as a module. Perhaps it was installed directly 🤔?",
|
|
758
884
|
);
|
|
759
|
-
poetryInstallArgs =
|
|
885
|
+
poetryInstallArgs = getPoetryInstallArgs(reqOrSetupFile);
|
|
760
886
|
// Attempt to perform poetry install
|
|
761
887
|
result = safeSpawnSync("poetry", poetryInstallArgs, {
|
|
762
888
|
cwd: basePath,
|
|
@@ -10,6 +10,10 @@ import {
|
|
|
10
10
|
detectAiModelVariants,
|
|
11
11
|
normalizeDetectedVariants,
|
|
12
12
|
} from "../../inventory/aiModelVariants.js";
|
|
13
|
+
import {
|
|
14
|
+
modelCreatorEntity,
|
|
15
|
+
modelCreatorFromOrganization,
|
|
16
|
+
} from "../../inventory/aiProviders.js";
|
|
13
17
|
import { getLicenses } from "../../inventory/spdx.js";
|
|
14
18
|
import {
|
|
15
19
|
createHuggingFaceComponentReference,
|
|
@@ -26,6 +30,7 @@ import {
|
|
|
26
30
|
toHuggingFaceAssetPath,
|
|
27
31
|
toHuggingFaceAssetUrl,
|
|
28
32
|
toHuggingFacePurl,
|
|
33
|
+
toHuggingFaceSupplier,
|
|
29
34
|
} from "../../parsers/huggingfaceUtils.js";
|
|
30
35
|
|
|
31
36
|
const CACHE_MISS = Symbol("huggingface-cache-miss");
|
|
@@ -1191,6 +1196,23 @@ export async function fetchHuggingFaceAssetInventory(
|
|
|
1191
1196
|
payload?.sha ||
|
|
1192
1197
|
(revision !== "HEAD" ? revision : payload?.lastModified),
|
|
1193
1198
|
purl,
|
|
1199
|
+
// The repository namespace published the asset, so it is the
|
|
1200
|
+
// supplier. Its url is the organisation or user page, not the
|
|
1201
|
+
// repository. A model is credited to a creator as manufacturer only
|
|
1202
|
+
// when the namespace is that creator's own organisation, since
|
|
1203
|
+
// re-packagers publish models other organisations made.
|
|
1204
|
+
supplier:
|
|
1205
|
+
slashIndex > 0
|
|
1206
|
+
? toHuggingFaceSupplier(normalizedRepoId.slice(0, slashIndex))
|
|
1207
|
+
: undefined,
|
|
1208
|
+
manufacturer:
|
|
1209
|
+
normalizedAssetType === "model" && slashIndex > 0
|
|
1210
|
+
? modelCreatorEntity(
|
|
1211
|
+
modelCreatorFromOrganization(
|
|
1212
|
+
normalizedRepoId.slice(0, slashIndex),
|
|
1213
|
+
),
|
|
1214
|
+
)
|
|
1215
|
+
: undefined,
|
|
1194
1216
|
description:
|
|
1195
1217
|
normalizedAssetType === "dataset"
|
|
1196
1218
|
? datasetDescriptionFromStats(payload)
|