@cdxgen/cdxgen 13.2.0 → 13.4.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 +33 -14
- package/bin/cdxgen.js +310 -138
- package/bin/evinse.js +22 -0
- package/bin/repl.js +86 -0
- package/bin/sign.js +119 -15
- package/bin/tracebom.js +69 -5
- package/bin/validate.js +107 -19
- package/bin/verify.js +172 -63
- package/data/helpers/init.gradle +46 -21
- package/data/remediations.json +85 -0
- package/data/rules/dependency-sources.yaml +67 -0
- package/data/rules/scala-evidence.yaml +115 -0
- package/lib/audit/index.js +38 -6
- package/lib/cli/bomAssembly.js +105 -15
- package/lib/cli/cliOptions.js +93 -1
- package/lib/cli/index.js +156 -58
- package/lib/cli/jsBom.js +99 -53
- package/lib/cli/jvmBom.js +708 -147
- package/lib/cli/managedBom.js +415 -224
- package/lib/cli/nativeBom.js +264 -44
- package/lib/core/activity.js +12 -0
- package/lib/core/env.js +22 -15
- package/lib/core/fs.js +176 -7
- package/lib/core/httpClient.js +159 -24
- package/lib/core/metadataProperties.js +97 -0
- package/lib/core/pluginRun.js +184 -0
- package/lib/core/processTree.js +100 -0
- package/lib/core/projectConfig.js +31 -4
- package/lib/core/runState.js +39 -0
- package/lib/core/toml.js +72 -0
- package/lib/ecosystems/asarutils.js +4 -2
- package/lib/ecosystems/bunutils.js +274 -108
- package/lib/ecosystems/cargoCache.js +231 -8
- package/lib/ecosystems/caxa.js +434 -2
- package/lib/ecosystems/cmakeResolver.js +76 -21
- package/lib/ecosystems/cppBuildContext.js +631 -0
- package/lib/ecosystems/cppEvidence.js +399 -51
- package/lib/ecosystems/cppIncludeResolver.js +294 -0
- package/lib/ecosystems/denoutils.js +93 -66
- package/lib/ecosystems/ecosystems.js +1983 -793
- package/lib/ecosystems/golem.js +28 -12
- package/lib/ecosystems/gradleutils.js +356 -37
- package/lib/ecosystems/jsEvidence.js +104 -44
- package/lib/ecosystems/kosi.js +31 -7
- package/lib/ecosystems/npmutils.js +174 -9
- package/lib/ecosystems/parsers-dotnet.js +616 -159
- package/lib/ecosystems/parsers-elm.js +46 -28
- package/lib/ecosystems/parsers-gleam.js +3 -4
- package/lib/ecosystems/parsers-go.js +371 -70
- package/lib/ecosystems/parsers-js.js +263 -76
- package/lib/ecosystems/parsers-julia.js +2 -3
- package/lib/ecosystems/parsers-jvm.js +204 -12
- package/lib/ecosystems/parsers-misc.js +929 -216
- package/lib/ecosystems/parsers-python.js +167 -24
- package/lib/ecosystems/parsers-rust.js +28 -22
- package/lib/ecosystems/parsers-terraform.js +1573 -19
- package/lib/ecosystems/pythonutils.js +102 -6
- package/lib/ecosystems/remote/huggingface.js +3 -0
- package/lib/ecosystems/rubyutils.js +1492 -182
- package/lib/ecosystems/rusi.js +54 -10
- package/lib/ecosystems/sbtutils.js +243 -187
- package/lib/ecosystems/scalacliutils.js +342 -0
- package/lib/ecosystems/scalasem.js +2618 -0
- package/lib/ecosystems/terraformRegistry.js +288 -0
- package/lib/ecosystems/utils.js +2 -0
- package/lib/ecosystems/vendoredCode.js +156 -0
- package/lib/evinser/evinser.js +1008 -191
- package/lib/evinser/swiftsem.js +1914 -302
- package/lib/helpers/agenticToolutils.js +2 -2
- package/lib/helpers/bomSigner.js +1101 -222
- package/lib/inventory/aiCollector.js +4 -1
- package/lib/inventory/analyzer.js +110 -127
- package/lib/inventory/atomUtils.js +703 -43
- package/lib/inventory/auditCategories.js +7 -0
- package/lib/inventory/buildToolRateLimit.js +144 -0
- package/lib/inventory/cacheCommands.js +2 -1
- package/lib/inventory/cdxrs.js +103 -12
- package/lib/inventory/cmakeBuildDirs.js +254 -0
- package/lib/inventory/deps.js +501 -124
- package/lib/inventory/depsUtils.js +183 -11
- package/lib/inventory/display.js +4 -5
- package/lib/inventory/dosai.js +798 -57
- package/lib/inventory/dosaiParsers.js +310 -15
- package/lib/inventory/dynamic.js +90 -6
- package/lib/inventory/evidenceUtils.js +166 -113
- package/lib/inventory/fetchBatch.js +690 -55
- package/lib/inventory/fetchDiskCache.js +597 -0
- package/lib/inventory/forgeEnricher.js +14 -5
- package/lib/inventory/jvmLocalRepos.js +917 -0
- package/lib/inventory/mcpConfigParser.js +2 -3
- package/lib/inventory/parentSelection.js +146 -0
- package/lib/inventory/protobom.js +8 -1
- package/lib/inventory/purl.js +152 -3
- package/lib/inventory/rustFormulationParser.js +3 -4
- package/lib/inventory/sbomDocument.js +2 -70
- package/lib/inventory/scalaCoords.js +153 -0
- package/lib/inventory/source.js +45 -27
- package/lib/inventory/spdx.js +101 -0
- package/lib/inventory/traceRunner.js +295 -25
- package/lib/inventory/tracedCrypto.js +294 -0
- package/lib/managers/binary.js +115 -24
- package/lib/managers/docker.js +467 -46
- package/lib/managers/oci.js +63 -3
- package/lib/parsers/cmakeCache.js +69 -0
- package/lib/parsers/cmakeLists.js +466 -0
- package/lib/parsers/cmakePresets.js +400 -0
- package/lib/parsers/compileCommands.js +557 -0
- package/lib/parsers/largeJson.js +454 -0
- package/lib/parsers/npmrc.js +19 -1
- package/lib/parsers/strictJson.js +322 -0
- package/lib/parsers/terraformConfig.js +1073 -0
- package/lib/parsers/terraformSource.js +652 -0
- package/lib/server/server.js +23 -0
- package/lib/stages/postgen/introspection/markers.js +1 -1
- package/lib/stages/postgen/postgen.js +83 -16
- package/lib/stages/postgen/specVersionCompat.js +32 -0
- package/lib/validator/bomValidator.js +6 -16
- package/lib/validator/index.js +64 -11
- package/lib/validator/reporters/console.js +3 -0
- package/lib/validator/reporters/json.js +2 -0
- package/lib/validator/reporters/sarif.js +7 -0
- package/package.json +23 -23
- package/types/lib/audit/index.d.ts.map +1 -1
- package/types/lib/cli/bomAssembly.d.ts +2 -1
- package/types/lib/cli/bomAssembly.d.ts.map +1 -1
- package/types/lib/cli/cliOptions.d.ts +33 -1
- 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.map +1 -1
- package/types/lib/cli/jvmBom.d.ts +24 -1
- package/types/lib/cli/jvmBom.d.ts.map +1 -1
- package/types/lib/cli/managedBom.d.ts +7 -4
- package/types/lib/cli/managedBom.d.ts.map +1 -1
- package/types/lib/cli/nativeBom.d.ts +3 -1
- package/types/lib/cli/nativeBom.d.ts.map +1 -1
- package/types/lib/core/activity.d.ts.map +1 -1
- package/types/lib/core/env.d.ts +9 -0
- package/types/lib/core/env.d.ts.map +1 -1
- package/types/lib/core/fs.d.ts +55 -0
- package/types/lib/core/fs.d.ts.map +1 -1
- package/types/lib/core/httpClient.d.ts +13 -8
- package/types/lib/core/httpClient.d.ts.map +1 -1
- package/types/lib/core/metadataProperties.d.ts +39 -0
- package/types/lib/core/metadataProperties.d.ts.map +1 -0
- package/types/lib/core/pluginRun.d.ts +97 -0
- package/types/lib/core/pluginRun.d.ts.map +1 -0
- package/types/lib/core/processTree.d.ts +36 -0
- package/types/lib/core/processTree.d.ts.map +1 -0
- package/types/lib/core/projectConfig.d.ts +6 -2
- package/types/lib/core/projectConfig.d.ts.map +1 -1
- package/types/lib/core/runState.d.ts +29 -0
- package/types/lib/core/runState.d.ts.map +1 -0
- package/types/lib/core/toml.d.ts +20 -0
- package/types/lib/core/toml.d.ts.map +1 -0
- package/types/lib/ecosystems/asarutils.d.ts.map +1 -1
- package/types/lib/ecosystems/bunutils.d.ts +12 -5
- package/types/lib/ecosystems/bunutils.d.ts.map +1 -1
- package/types/lib/ecosystems/cargoCache.d.ts +12 -0
- package/types/lib/ecosystems/cargoCache.d.ts.map +1 -1
- package/types/lib/ecosystems/caxa.d.ts +14 -0
- package/types/lib/ecosystems/caxa.d.ts.map +1 -1
- package/types/lib/ecosystems/cmakeResolver.d.ts +28 -3
- package/types/lib/ecosystems/cmakeResolver.d.ts.map +1 -1
- package/types/lib/ecosystems/cppBuildContext.d.ts +55 -0
- package/types/lib/ecosystems/cppBuildContext.d.ts.map +1 -0
- package/types/lib/ecosystems/cppEvidence.d.ts +17 -1
- package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -1
- package/types/lib/ecosystems/cppIncludeResolver.d.ts +92 -0
- package/types/lib/ecosystems/cppIncludeResolver.d.ts.map +1 -0
- package/types/lib/ecosystems/denoutils.d.ts +9 -3
- package/types/lib/ecosystems/denoutils.d.ts.map +1 -1
- package/types/lib/ecosystems/ecosystems.d.ts +62 -13
- package/types/lib/ecosystems/ecosystems.d.ts.map +1 -1
- package/types/lib/ecosystems/golem.d.ts.map +1 -1
- package/types/lib/ecosystems/gradleutils.d.ts +70 -4
- package/types/lib/ecosystems/gradleutils.d.ts.map +1 -1
- package/types/lib/ecosystems/jsEvidence.d.ts +5 -2
- package/types/lib/ecosystems/jsEvidence.d.ts.map +1 -1
- package/types/lib/ecosystems/kosi.d.ts +13 -0
- package/types/lib/ecosystems/kosi.d.ts.map +1 -1
- package/types/lib/ecosystems/npmutils.d.ts +57 -0
- package/types/lib/ecosystems/npmutils.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-dotnet.d.ts +118 -4
- package/types/lib/ecosystems/parsers-dotnet.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-elm.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-gleam.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-go.d.ts +54 -2
- package/types/lib/ecosystems/parsers-go.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-js.d.ts +16 -5
- package/types/lib/ecosystems/parsers-js.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-julia.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-jvm.d.ts +46 -1
- package/types/lib/ecosystems/parsers-jvm.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-misc.d.ts +70 -4
- package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -1
- package/types/lib/ecosystems/parsers-python.d.ts +53 -3
- 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/parsers-terraform.d.ts +38 -21
- package/types/lib/ecosystems/parsers-terraform.d.ts.map +1 -1
- package/types/lib/ecosystems/pythonutils.d.ts +27 -2
- 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 +164 -3
- package/types/lib/ecosystems/rubyutils.d.ts.map +1 -1
- package/types/lib/ecosystems/rusi.d.ts +13 -0
- package/types/lib/ecosystems/rusi.d.ts.map +1 -1
- package/types/lib/ecosystems/sbtutils.d.ts +88 -2
- package/types/lib/ecosystems/sbtutils.d.ts.map +1 -1
- package/types/lib/ecosystems/scalacliutils.d.ts +56 -0
- package/types/lib/ecosystems/scalacliutils.d.ts.map +1 -0
- package/types/lib/ecosystems/scalasem.d.ts +311 -0
- package/types/lib/ecosystems/scalasem.d.ts.map +1 -0
- package/types/lib/ecosystems/terraformRegistry.d.ts +9 -0
- package/types/lib/ecosystems/terraformRegistry.d.ts.map +1 -0
- package/types/lib/ecosystems/utils.d.ts +2 -2
- package/types/lib/ecosystems/utils.d.ts.map +1 -1
- package/types/lib/ecosystems/vendoredCode.d.ts +32 -0
- package/types/lib/ecosystems/vendoredCode.d.ts.map +1 -0
- package/types/lib/evinser/evinser.d.ts +132 -15
- package/types/lib/evinser/evinser.d.ts.map +1 -1
- package/types/lib/evinser/swiftsem.d.ts +280 -15
- package/types/lib/evinser/swiftsem.d.ts.map +1 -1
- package/types/lib/helpers/bomSigner.d.ts +182 -13
- package/types/lib/helpers/bomSigner.d.ts.map +1 -1
- package/types/lib/inventory/aiCollector.d.ts.map +1 -1
- package/types/lib/inventory/analyzer.d.ts.map +1 -1
- package/types/lib/inventory/atomUtils.d.ts +219 -5
- package/types/lib/inventory/atomUtils.d.ts.map +1 -1
- package/types/lib/inventory/auditCategories.d.ts +3 -0
- package/types/lib/inventory/auditCategories.d.ts.map +1 -1
- package/types/lib/inventory/buildToolRateLimit.d.ts +38 -0
- package/types/lib/inventory/buildToolRateLimit.d.ts.map +1 -0
- package/types/lib/inventory/cacheCommands.d.ts +2 -1
- package/types/lib/inventory/cacheCommands.d.ts.map +1 -1
- package/types/lib/inventory/cdxrs.d.ts +8 -3
- package/types/lib/inventory/cdxrs.d.ts.map +1 -1
- package/types/lib/inventory/cmakeBuildDirs.d.ts +58 -0
- package/types/lib/inventory/cmakeBuildDirs.d.ts.map +1 -0
- package/types/lib/inventory/deps.d.ts +59 -1
- package/types/lib/inventory/deps.d.ts.map +1 -1
- package/types/lib/inventory/depsUtils.d.ts +15 -0
- package/types/lib/inventory/depsUtils.d.ts.map +1 -1
- package/types/lib/inventory/display.d.ts.map +1 -1
- package/types/lib/inventory/dosai.d.ts +121 -9
- package/types/lib/inventory/dosai.d.ts.map +1 -1
- package/types/lib/inventory/dosaiParsers.d.ts +53 -7
- package/types/lib/inventory/dosaiParsers.d.ts.map +1 -1
- package/types/lib/inventory/dynamic.d.ts +10 -0
- package/types/lib/inventory/dynamic.d.ts.map +1 -1
- package/types/lib/inventory/evidenceUtils.d.ts +19 -4
- package/types/lib/inventory/evidenceUtils.d.ts.map +1 -1
- package/types/lib/inventory/fetchBatch.d.ts +83 -14
- package/types/lib/inventory/fetchBatch.d.ts.map +1 -1
- package/types/lib/inventory/fetchDiskCache.d.ts +169 -0
- package/types/lib/inventory/fetchDiskCache.d.ts.map +1 -0
- package/types/lib/inventory/forgeEnricher.d.ts.map +1 -1
- package/types/lib/inventory/jvmLocalRepos.d.ts +178 -0
- package/types/lib/inventory/jvmLocalRepos.d.ts.map +1 -0
- package/types/lib/inventory/mcpConfigParser.d.ts.map +1 -1
- package/types/lib/inventory/parentSelection.d.ts +34 -0
- package/types/lib/inventory/parentSelection.d.ts.map +1 -0
- package/types/lib/inventory/plugins.d.ts.map +1 -1
- package/types/lib/inventory/protobom.d.ts.map +1 -1
- package/types/lib/inventory/purl.d.ts +71 -2
- package/types/lib/inventory/purl.d.ts.map +1 -1
- package/types/lib/inventory/rustFormulationParser.d.ts.map +1 -1
- package/types/lib/inventory/sbomDocument.d.ts.map +1 -1
- package/types/lib/inventory/scalaCoords.d.ts +80 -0
- package/types/lib/inventory/scalaCoords.d.ts.map +1 -0
- package/types/lib/inventory/source.d.ts.map +1 -1
- package/types/lib/inventory/spdx.d.ts +9 -0
- package/types/lib/inventory/spdx.d.ts.map +1 -1
- package/types/lib/inventory/traceRunner.d.ts +59 -1
- package/types/lib/inventory/traceRunner.d.ts.map +1 -1
- package/types/lib/inventory/tracedCrypto.d.ts +42 -0
- package/types/lib/inventory/tracedCrypto.d.ts.map +1 -0
- package/types/lib/managers/binary.d.ts +30 -1
- package/types/lib/managers/binary.d.ts.map +1 -1
- package/types/lib/managers/docker.d.ts +29 -0
- package/types/lib/managers/docker.d.ts.map +1 -1
- package/types/lib/managers/oci.d.ts +17 -1
- package/types/lib/managers/oci.d.ts.map +1 -1
- package/types/lib/parsers/cmakeCache.d.ts +16 -0
- package/types/lib/parsers/cmakeCache.d.ts.map +1 -1
- package/types/lib/parsers/cmakeLists.d.ts +77 -0
- package/types/lib/parsers/cmakeLists.d.ts.map +1 -0
- package/types/lib/parsers/cmakePresets.d.ts +78 -0
- package/types/lib/parsers/cmakePresets.d.ts.map +1 -0
- package/types/lib/parsers/compileCommands.d.ts +115 -0
- package/types/lib/parsers/compileCommands.d.ts.map +1 -0
- package/types/lib/parsers/largeJson.d.ts +52 -0
- package/types/lib/parsers/largeJson.d.ts.map +1 -0
- package/types/lib/parsers/npmrc.d.ts +5 -0
- package/types/lib/parsers/npmrc.d.ts.map +1 -1
- package/types/lib/parsers/strictJson.d.ts +46 -0
- package/types/lib/parsers/strictJson.d.ts.map +1 -0
- package/types/lib/parsers/terraformConfig.d.ts +70 -0
- package/types/lib/parsers/terraformConfig.d.ts.map +1 -0
- package/types/lib/parsers/terraformSource.d.ts +66 -0
- package/types/lib/parsers/terraformSource.d.ts.map +1 -0
- package/types/lib/server/server.d.ts.map +1 -1
- package/types/lib/stages/postgen/postgen.d.ts.map +1 -1
- package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -1
- package/types/lib/validator/bomValidator.d.ts.map +1 -1
- package/types/lib/validator/index.d.ts +18 -1
- package/types/lib/validator/index.d.ts.map +1 -1
- package/types/lib/validator/reporters/console.d.ts.map +1 -1
- package/types/lib/validator/reporters/json.d.ts.map +1 -1
- package/types/lib/validator/reporters/sarif.d.ts.map +1 -1
- package/lib/third-party/arborist/snapshots/calc-dep-flags.test.cjs +0 -462
package/lib/cli/jsBom.js
CHANGED
|
@@ -13,7 +13,11 @@ import {
|
|
|
13
13
|
} from "../core/activity.js";
|
|
14
14
|
import { recordDegradation } from "../core/buildLedger.js";
|
|
15
15
|
import { deferFailOnError } from "../core/deferredExit.js";
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
hasAnyProjectType,
|
|
18
|
+
isPackageManagerAllowed,
|
|
19
|
+
shouldFetchPackageMetadata,
|
|
20
|
+
} from "../core/env.js";
|
|
17
21
|
import { getAllFiles, safeExistsSync, safeSpawnSync } from "../core/fs.js";
|
|
18
22
|
import { thoughtLog } from "../core/logger.js";
|
|
19
23
|
import {
|
|
@@ -24,7 +28,10 @@ import {
|
|
|
24
28
|
rewriteExtractedArchivePaths,
|
|
25
29
|
} from "../ecosystems/asarutils.js";
|
|
26
30
|
import { parseBunLock } from "../ecosystems/bunutils.js";
|
|
27
|
-
import {
|
|
31
|
+
import {
|
|
32
|
+
enrichCaxaMetadataFromApp,
|
|
33
|
+
parseCaxaMetadata,
|
|
34
|
+
} from "../ecosystems/caxa.js";
|
|
28
35
|
import {
|
|
29
36
|
CHROME_EXTENSION_PURL_TYPE,
|
|
30
37
|
collectChromeExtensionsFromPath,
|
|
@@ -36,8 +43,12 @@ import {
|
|
|
36
43
|
parseDenoJsonFile,
|
|
37
44
|
parseDenoLock,
|
|
38
45
|
} from "../ecosystems/denoutils.js";
|
|
46
|
+
import { getNpmMetadata } from "../ecosystems/ecosystems.js";
|
|
39
47
|
import { addEvidenceForImports } from "../ecosystems/jsEvidence.js";
|
|
40
|
-
import {
|
|
48
|
+
import {
|
|
49
|
+
createNpmWorkspacePurl,
|
|
50
|
+
loadNpmrcConfig,
|
|
51
|
+
} from "../ecosystems/npmutils.js";
|
|
41
52
|
import {
|
|
42
53
|
parseBowerJson,
|
|
43
54
|
parseMinJs,
|
|
@@ -77,6 +88,7 @@ import {
|
|
|
77
88
|
} from "../inventory/analyzer.js";
|
|
78
89
|
import {
|
|
79
90
|
markNpmTypesPackagesAsExcluded,
|
|
91
|
+
markTypeOnlyDependenciesOptional,
|
|
80
92
|
mergeDependencies,
|
|
81
93
|
mergeServices,
|
|
82
94
|
propagateRequiredScopeFromDependencies,
|
|
@@ -216,12 +228,20 @@ export async function createNodejsBom(path, options) {
|
|
|
216
228
|
const pkgJsonFiles = getAllFiles(path, "**/package.json", options);
|
|
217
229
|
// Are there any package.json files in the container?
|
|
218
230
|
if (pkgJsonFiles.length) {
|
|
231
|
+
// Every manifest is read locally first, and the registry is asked about
|
|
232
|
+
// the ones still missing fields in one round, rather than once per file.
|
|
233
|
+
const npmrcConfig = loadNpmrcConfig(path);
|
|
219
234
|
for (const pj of pkgJsonFiles) {
|
|
220
|
-
const dlist = await parsePkgJson(pj
|
|
235
|
+
const dlist = await parsePkgJson(pj, false, false, {
|
|
236
|
+
fetchMetadata: false,
|
|
237
|
+
});
|
|
221
238
|
if (dlist?.length) {
|
|
222
239
|
pkgList = pkgList.concat(dlist);
|
|
223
240
|
}
|
|
224
241
|
}
|
|
242
|
+
if (shouldFetchPackageMetadata() && pkgList.length) {
|
|
243
|
+
pkgList = await getNpmMetadata(pkgList, undefined, { npmrcConfig });
|
|
244
|
+
}
|
|
225
245
|
if (includedAiInventoryTypes.length) {
|
|
226
246
|
aiInventory = collectAiInventory(
|
|
227
247
|
path,
|
|
@@ -567,7 +587,16 @@ export async function createNodejsBom(path, options) {
|
|
|
567
587
|
recordSensitiveFileRead(npmrcFile, {
|
|
568
588
|
label: "npm registry configuration",
|
|
569
589
|
});
|
|
570
|
-
|
|
590
|
+
let npmrcObj = {};
|
|
591
|
+
try {
|
|
592
|
+
npmrcObj = parseNpmrc(npmrcData);
|
|
593
|
+
} catch (e) {
|
|
594
|
+
// A malformed .npmrc must degrade to a warning, never abort the scan.
|
|
595
|
+
console.warn(
|
|
596
|
+
`Unable to parse ${npmrcFile}. Continuing without it. ${e?.message || ""}`,
|
|
597
|
+
);
|
|
598
|
+
npmrcObj = {};
|
|
599
|
+
}
|
|
571
600
|
for (const [key, value] of Object.entries(npmrcObj)) {
|
|
572
601
|
const baseKey = key.replace(/^(?:\/\/[^/]+\/|@[^:]+:)/, "");
|
|
573
602
|
if (
|
|
@@ -957,8 +986,12 @@ export async function createNodejsBom(path, options) {
|
|
|
957
986
|
) {
|
|
958
987
|
// Rush.js creates node_modules inside common/temp directory
|
|
959
988
|
const nmDir = join(path, "common", "temp", "node_modules");
|
|
960
|
-
// Do rush install if we don't have node_modules directory
|
|
961
|
-
|
|
989
|
+
// Do rush install if we don't have node_modules directory. `rush install`
|
|
990
|
+
// drives pnpm without cdxgen's --ignore-scripts hardening and
|
|
991
|
+
// --bypass-policy disables rush's own policy gate, so it must respect
|
|
992
|
+
// --no-install-deps and the pre-build lifecycle like every other
|
|
993
|
+
// installer.
|
|
994
|
+
if (!safeExistsSync(nmDir) && options.installDeps !== false) {
|
|
962
995
|
console.log("Executing 'rush install --no-link'", path);
|
|
963
996
|
const result = safeSpawnSync(
|
|
964
997
|
"rush",
|
|
@@ -990,14 +1023,12 @@ export async function createNodejsBom(path, options) {
|
|
|
990
1023
|
if (safeExistsSync(swFile)) {
|
|
991
1024
|
let pkgList = await parseNodeShrinkwrap(swFile);
|
|
992
1025
|
pkgList = addWasmComponentsFromImports(pkgList, allImports);
|
|
993
|
-
|
|
994
|
-
pkgList
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
);
|
|
1000
|
-
}
|
|
1026
|
+
pkgList = await addEvidenceForImports(
|
|
1027
|
+
pkgList,
|
|
1028
|
+
allImports,
|
|
1029
|
+
allExports,
|
|
1030
|
+
options.deep,
|
|
1031
|
+
);
|
|
1001
1032
|
return buildBomNSData(options, pkgList, "npm", {
|
|
1002
1033
|
allImports,
|
|
1003
1034
|
src: path,
|
|
@@ -1026,16 +1057,15 @@ export async function createNodejsBom(path, options) {
|
|
|
1026
1057
|
pnpmLockObj.dependenciesList,
|
|
1027
1058
|
);
|
|
1028
1059
|
}
|
|
1029
|
-
|
|
1030
|
-
pkgList
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
);
|
|
1036
|
-
}
|
|
1060
|
+
pkgList = await addEvidenceForImports(
|
|
1061
|
+
pkgList,
|
|
1062
|
+
allImports,
|
|
1063
|
+
allExports,
|
|
1064
|
+
options.deep,
|
|
1065
|
+
);
|
|
1037
1066
|
pkgList = propagateRequiredScopeFromDependencies(pkgList, dependencies);
|
|
1038
1067
|
pkgList = markNpmTypesPackagesAsExcluded(pkgList);
|
|
1068
|
+
pkgList = markTypeOnlyDependenciesOptional(pkgList, dependencies);
|
|
1039
1069
|
return buildBomNSData(options, pkgList, "npm", {
|
|
1040
1070
|
allImports,
|
|
1041
1071
|
allExports,
|
|
@@ -1120,25 +1150,25 @@ export async function createNodejsBom(path, options) {
|
|
|
1120
1150
|
);
|
|
1121
1151
|
workspacePackages.push(workspaceRef);
|
|
1122
1152
|
workspaceSrcFiles[workspaceRef] = relativePkgJsonFile;
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
})
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
depsWorkspaceRefs[dep].push(workspaceRef);
|
|
1153
|
+
// The declared name and range of each direct dependency, which
|
|
1154
|
+
// parseYarnLock resolves against the lock file to link the
|
|
1155
|
+
// member into the dependency tree.
|
|
1156
|
+
const declaredDeps = {
|
|
1157
|
+
...(pkgData.dependencies || {}),
|
|
1158
|
+
...(pkgData.optionalDependencies || {}),
|
|
1159
|
+
...(pkgData.devDependencies || {}),
|
|
1160
|
+
};
|
|
1161
|
+
if (Object.keys(declaredDeps).length) {
|
|
1162
|
+
workspaceDirectDeps[workspaceRef] = declaredDeps;
|
|
1163
|
+
}
|
|
1164
|
+
for (const [k, v] of Object.entries(declaredDeps)) {
|
|
1165
|
+
const dep = /^\d/.test(String(v))
|
|
1166
|
+
? `pkg:npm/${k}@${v}`
|
|
1167
|
+
: `pkg:npm/${k}`;
|
|
1168
|
+
if (!depsWorkspaceRefs[dep]) {
|
|
1169
|
+
depsWorkspaceRefs[dep] = [];
|
|
1141
1170
|
}
|
|
1171
|
+
depsWorkspaceRefs[dep].push(workspaceRef);
|
|
1142
1172
|
}
|
|
1143
1173
|
}
|
|
1144
1174
|
}
|
|
@@ -1410,12 +1440,21 @@ export async function createNodejsBom(path, options) {
|
|
|
1410
1440
|
options,
|
|
1411
1441
|
);
|
|
1412
1442
|
manifestFiles = manifestFiles.concat(pkgJsonFiles);
|
|
1443
|
+
// The installed manifests answer locally; one round asks the registry only
|
|
1444
|
+
// about the packages still missing fields, instead of one round per file.
|
|
1413
1445
|
for (const pkgjf of pkgJsonFiles) {
|
|
1414
|
-
const dlist = await parsePkgJson(pkgjf
|
|
1446
|
+
const dlist = await parsePkgJson(pkgjf, false, false, {
|
|
1447
|
+
fetchMetadata: false,
|
|
1448
|
+
});
|
|
1415
1449
|
if (dlist?.length) {
|
|
1416
1450
|
pkgList = pkgList.concat(dlist);
|
|
1417
1451
|
}
|
|
1418
1452
|
}
|
|
1453
|
+
if (shouldFetchPackageMetadata() && pkgList.length) {
|
|
1454
|
+
pkgList = await getNpmMetadata(pkgList, undefined, {
|
|
1455
|
+
npmrcConfig: loadNpmrcConfig(path),
|
|
1456
|
+
});
|
|
1457
|
+
}
|
|
1419
1458
|
if (!parentComponent || !Object.keys(parentComponent).length) {
|
|
1420
1459
|
if (safeExistsSync(join(path, "package.json"))) {
|
|
1421
1460
|
const pcs = await parsePkgJson(join(path, "package.json"), true, true);
|
|
@@ -1460,15 +1499,15 @@ export async function createNodejsBom(path, options) {
|
|
|
1460
1499
|
if ("project-name" in options && !options.parentComponent) {
|
|
1461
1500
|
options.parentComponent = parentComponent;
|
|
1462
1501
|
}
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1502
|
+
// The evidence pass runs without imports too: it also fills deep-mode
|
|
1503
|
+
// metadata and removes internal:LocalNodeModulesPath from every component.
|
|
1504
|
+
pkgList = addWasmComponentsFromImports(pkgList, allImports);
|
|
1505
|
+
pkgList = await addEvidenceForImports(
|
|
1506
|
+
pkgList,
|
|
1507
|
+
allImports,
|
|
1508
|
+
allExports,
|
|
1509
|
+
options.deep,
|
|
1510
|
+
);
|
|
1472
1511
|
if (mcpInventory.components?.length) {
|
|
1473
1512
|
pkgList = trimComponents(pkgList.concat(mcpInventory.components));
|
|
1474
1513
|
}
|
|
@@ -1495,6 +1534,7 @@ export async function createNodejsBom(path, options) {
|
|
|
1495
1534
|
);
|
|
1496
1535
|
pkgList = propagateRequiredScopeFromDependencies(pkgList, dependencies);
|
|
1497
1536
|
pkgList = markNpmTypesPackagesAsExcluded(pkgList);
|
|
1537
|
+
pkgList = markTypeOnlyDependenciesOptional(pkgList, dependencies);
|
|
1498
1538
|
if (exactAiInventoryType === "mcp") {
|
|
1499
1539
|
pkgList = trimComponents(filterInventorySubjectsByTypes(pkgList, ["mcp"]));
|
|
1500
1540
|
dependencies = filterInventoryDependencies(
|
|
@@ -1624,8 +1664,14 @@ export async function createCaxaBom(path, options) {
|
|
|
1624
1664
|
if (DEBUG_MODE) {
|
|
1625
1665
|
console.log(`Parsing ${mfile}`);
|
|
1626
1666
|
}
|
|
1627
|
-
|
|
1628
|
-
|
|
1667
|
+
let mdata = await parseCaxaMetadata(mfile);
|
|
1668
|
+
if (options.caxaAppDir) {
|
|
1669
|
+
mdata = await enrichCaxaMetadataFromApp(
|
|
1670
|
+
mdata,
|
|
1671
|
+
resolve(options.caxaAppDir),
|
|
1672
|
+
);
|
|
1673
|
+
}
|
|
1674
|
+
const { parentComponent, components, dependencies } = mdata;
|
|
1629
1675
|
if (parentComponent) {
|
|
1630
1676
|
if (!finalParentComponent) {
|
|
1631
1677
|
finalParentComponent = parentComponent;
|