@cyclonedx/cdxgen 11.11.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -0
- package/bin/dependencies.js +122 -0
- package/data/pypi-pkg-aliases.json +3 -0
- package/lib/cli/index.js +12 -11
- package/lib/helpers/dependencies.poku.js +11 -0
- package/lib/helpers/envcontext.js +1 -1
- package/lib/helpers/utils.js +27 -8
- package/lib/helpers/utils.poku.js +46 -10
- package/lib/third-party/arborist/lib/node.js +0 -3
- package/lib/third-party/arborist/lib/override-set.js +0 -4
- package/lib/third-party/arborist/lib/place-dep.js +0 -10
- package/lib/third-party/arborist/lib/query-selector-all.js +0 -2
- package/package.json +287 -79
package/README.md
CHANGED
|
@@ -50,6 +50,12 @@ Sections include:
|
|
|
50
50
|
|
|
51
51
|
## Usage
|
|
52
52
|
|
|
53
|
+
## For Contributors / Developers
|
|
54
|
+
```shell
|
|
55
|
+
pnpm install
|
|
56
|
+
pnpm dlx cdxgen
|
|
57
|
+
```
|
|
58
|
+
|
|
53
59
|
## Installing
|
|
54
60
|
|
|
55
61
|
```shell
|
|
@@ -339,6 +345,8 @@ cdxgen can retain the dependency tree under the `dependencies` attribute for a s
|
|
|
339
345
|
- Ruby (Gemfile.lock)
|
|
340
346
|
- Rust (Cargo.lock)
|
|
341
347
|
|
|
348
|
+
|
|
349
|
+
|
|
342
350
|
## Plugins
|
|
343
351
|
|
|
344
352
|
cdxgen could be extended with external binary plugins to support more SBOM use cases. These are now installed as an optional dependency.
|
|
@@ -347,6 +355,17 @@ cdxgen could be extended with external binary plugins to support more SBOM use c
|
|
|
347
355
|
sudo npm install -g @cyclonedx/cdxgen-plugins-bin
|
|
348
356
|
```
|
|
349
357
|
|
|
358
|
+
|
|
359
|
+
## Plugins (pnpm)
|
|
360
|
+
|
|
361
|
+
`cdxgen` can be extended with external binary plugins to support more SBOM use cases.
|
|
362
|
+
These are now installed as optional dependencies and can be used without a global install.
|
|
363
|
+
|
|
364
|
+
```shell
|
|
365
|
+
pnpm dlx @cyclonedx/cdxgen-plugins-bin
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
|
|
350
369
|
## Docker / OCI container support
|
|
351
370
|
|
|
352
371
|
`docker` type is automatically detected based on the presence of values such as `sha256` or `docker.io` prefix etc in the path.
|
|
@@ -428,6 +447,18 @@ npm install -g @cyclonedx/cdxgen
|
|
|
428
447
|
cdx-verify -i bom.json --public-key public.key
|
|
429
448
|
```
|
|
430
449
|
|
|
450
|
+
|
|
451
|
+
### Verifying the signature (pnpm)
|
|
452
|
+
|
|
453
|
+
Use the bundled `cdx-verify` command, which supports verifying a single signature added at the BOM level.
|
|
454
|
+
|
|
455
|
+
You can run it directly using pnpm (no global install needed):
|
|
456
|
+
|
|
457
|
+
```shell
|
|
458
|
+
pnpm dlx @cyclonedx/cdxgen cdx-verify -i bom.json --public-key public.key
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
|
|
431
462
|
### Custom verification tool (Node.js example)
|
|
432
463
|
|
|
433
464
|
There are many [libraries][jwt-libraries] available to validate JSON Web Tokens. Below is a javascript example.
|
|
@@ -539,6 +570,18 @@ corepack pnpm add -g --allow-build @appthreat/sqlite3 https://github.com/Cyclone
|
|
|
539
570
|
cdxgen --help
|
|
540
571
|
```
|
|
541
572
|
|
|
573
|
+
|
|
574
|
+
### Testing main branch (No Global Install)
|
|
575
|
+
|
|
576
|
+
To quickly test the latest main branch without installing globally, you can use `pnpm` in a local or temporary environment.
|
|
577
|
+
|
|
578
|
+
```shell
|
|
579
|
+
corepack enable
|
|
580
|
+
pnpm install --prefer-offline
|
|
581
|
+
pnpm dlx cdxgen --help
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
|
|
542
585
|
## Sponsors
|
|
543
586
|
|
|
544
587
|
<div style="display: flex; align-items: center; gap: 20px;">
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
4
|
+
|
|
5
|
+
import { parse as yaml } from "yaml";
|
|
6
|
+
|
|
7
|
+
const pkgJson = JSON.parse(readFileSync("./package.json", "utf8"));
|
|
8
|
+
const pnpmLockYaml = yaml(readFileSync("./pnpm-lock.yaml", "utf8"));
|
|
9
|
+
|
|
10
|
+
const installedPackages = [];
|
|
11
|
+
|
|
12
|
+
const incorrectNpmOverridesVersions = [];
|
|
13
|
+
const incorrectPnpmOverridesVersions = [];
|
|
14
|
+
const missingNpmOverrides = [];
|
|
15
|
+
const missingPnpmOverrides = [];
|
|
16
|
+
|
|
17
|
+
const obsoleteNpmOverrides = [];
|
|
18
|
+
const obsoletePnpmOverrides = [];
|
|
19
|
+
|
|
20
|
+
for (const _package in pnpmLockYaml.snapshots) {
|
|
21
|
+
const indexOfSeparator = _package.split("(")[0].lastIndexOf("@");
|
|
22
|
+
const packageName = _package.substring(0, indexOfSeparator);
|
|
23
|
+
const packageVersion = _package.substring(indexOfSeparator + 1);
|
|
24
|
+
if (!installedPackages.includes(packageName)) {
|
|
25
|
+
installedPackages.push(packageName);
|
|
26
|
+
checkOverride(packageName, packageVersion);
|
|
27
|
+
}
|
|
28
|
+
for (const dependency in pnpmLockYaml.snapshots[_package].dependencies) {
|
|
29
|
+
if (!installedPackages.includes(dependency)) {
|
|
30
|
+
installedPackages.push(dependency);
|
|
31
|
+
checkOverride(
|
|
32
|
+
dependency,
|
|
33
|
+
pnpmLockYaml.snapshots[_package].dependencies[dependency],
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
for (const dependency in pnpmLockYaml.snapshots[_package]
|
|
38
|
+
.optionalDependencies) {
|
|
39
|
+
if (!installedPackages.includes(dependency)) {
|
|
40
|
+
installedPackages.push(dependency);
|
|
41
|
+
checkOverride(
|
|
42
|
+
dependency,
|
|
43
|
+
pnpmLockYaml.snapshots[_package].optionalDependencies[dependency],
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
for (const override in pkgJson.overrides) {
|
|
49
|
+
checkObsolescence(override, obsoleteNpmOverrides);
|
|
50
|
+
}
|
|
51
|
+
for (const override in pkgJson.pnpm.overrides) {
|
|
52
|
+
checkObsolescence(override, obsoletePnpmOverrides);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function checkDependencies() {
|
|
56
|
+
return (
|
|
57
|
+
incorrectNpmOverridesVersions.length +
|
|
58
|
+
incorrectPnpmOverridesVersions.length +
|
|
59
|
+
missingNpmOverrides.length +
|
|
60
|
+
missingPnpmOverrides.length +
|
|
61
|
+
obsoleteNpmOverrides.length +
|
|
62
|
+
obsoletePnpmOverrides.length
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function checkOverride(packageName, packageVersion) {
|
|
67
|
+
packageVersion = packageVersion.split("(")[0];
|
|
68
|
+
if (packageVersion.includes("@")) {
|
|
69
|
+
packageVersion = `npm:${packageVersion}`;
|
|
70
|
+
}
|
|
71
|
+
if (!Object.hasOwn(pkgJson.overrides, packageName)) {
|
|
72
|
+
missingNpmOverrides.push(` "${packageName}": "${packageVersion}"`);
|
|
73
|
+
} else if (pkgJson.overrides[packageName] !== packageVersion) {
|
|
74
|
+
incorrectNpmOverridesVersions.push(
|
|
75
|
+
` - ${packageName} (${pkgJson.overrides[packageName]} instead of ${packageVersion})`,
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
if (!Object.hasOwn(pkgJson.pnpm.overrides, packageName)) {
|
|
79
|
+
missingPnpmOverrides.push(` "${packageName}": "${packageVersion}"`);
|
|
80
|
+
} else if (pkgJson.pnpm.overrides[packageName] !== packageVersion) {
|
|
81
|
+
incorrectPnpmOverridesVersions.push(
|
|
82
|
+
` - ${packageName} (${pkgJson.pnpm.overrides[packageName]} instead of ${packageVersion})`,
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function checkObsolescence(override, obsoletionArray) {
|
|
88
|
+
if (!installedPackages.includes(override)) {
|
|
89
|
+
obsoletionArray.push(override);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (missingNpmOverrides.length) {
|
|
94
|
+
console.log("The following dependencies are not in the 'overrides'-block:");
|
|
95
|
+
console.log(missingNpmOverrides.join(",\n"));
|
|
96
|
+
}
|
|
97
|
+
if (incorrectNpmOverridesVersions.length) {
|
|
98
|
+
console.log(
|
|
99
|
+
"The following dependencies have a different version in the 'overrides'-block:",
|
|
100
|
+
);
|
|
101
|
+
console.log(incorrectNpmOverridesVersions.join("\n"));
|
|
102
|
+
}
|
|
103
|
+
if (missingPnpmOverrides.length) {
|
|
104
|
+
console.log(
|
|
105
|
+
"The following dependencies are not in the 'pnpm.overrides'-block:",
|
|
106
|
+
);
|
|
107
|
+
console.log(missingPnpmOverrides.join(",\n"));
|
|
108
|
+
}
|
|
109
|
+
if (incorrectPnpmOverridesVersions.length) {
|
|
110
|
+
console.log(
|
|
111
|
+
"The following dependencies have a different version in the 'pnpm.overrides'-block:",
|
|
112
|
+
);
|
|
113
|
+
console.log(incorrectPnpmOverridesVersions.join("\n"));
|
|
114
|
+
}
|
|
115
|
+
if (obsoleteNpmOverrides.length) {
|
|
116
|
+
console.log("The following entries in 'overrides' are not used:");
|
|
117
|
+
console.log(obsoleteNpmOverrides.join("\n"));
|
|
118
|
+
}
|
|
119
|
+
if (obsoletePnpmOverrides.length) {
|
|
120
|
+
console.log("The following entries in 'pnpm.overrides' are not used:");
|
|
121
|
+
console.log(obsoletePnpmOverrides.join("\n"));
|
|
122
|
+
}
|
|
@@ -563,6 +563,7 @@
|
|
|
563
563
|
"curator": "elasticsearch-curator",
|
|
564
564
|
"curl": "pycurl",
|
|
565
565
|
"cv2": "opencv-python",
|
|
566
|
+
"cyclonedx": "cyclonedx-python-lib",
|
|
566
567
|
"daemon": "python-daemon",
|
|
567
568
|
"dare": "dare",
|
|
568
569
|
"database-locks": "django-database-locks",
|
|
@@ -1064,6 +1065,8 @@
|
|
|
1064
1065
|
"slugify": "unicode-slugify",
|
|
1065
1066
|
"smarkets": "smk-python-sdk",
|
|
1066
1067
|
"snappy": "ctypes-snappy",
|
|
1068
|
+
"snsql": "smartnoise-sql",
|
|
1069
|
+
"snsynth": "smartnoise-synth",
|
|
1067
1070
|
"social-core": "social-auth-core",
|
|
1068
1071
|
"social-django": "social-auth-app-django",
|
|
1069
1072
|
"socketio": "python-socketio",
|
package/lib/cli/index.js
CHANGED
|
@@ -1721,9 +1721,8 @@ export async function createJavaBom(path, options) {
|
|
|
1721
1721
|
result?.status !== 0 ||
|
|
1722
1722
|
result?.error
|
|
1723
1723
|
) {
|
|
1724
|
-
const
|
|
1725
|
-
const
|
|
1726
|
-
const tempMvnParentTree = join(tempDir, "mvn-parent-tree.txt");
|
|
1724
|
+
const tempMvnTree = join("target", "cdxgen-mvn-tree.txt");
|
|
1725
|
+
const tempMvnParentTree = join("target", "cdxgen-mvn-parent-tree.txt");
|
|
1727
1726
|
let mvnTreeArgs = ["dependency:tree", `-DoutputFile=${tempMvnTree}`];
|
|
1728
1727
|
let addArgs = "";
|
|
1729
1728
|
if (process.env.MVN_ARGS) {
|
|
@@ -1828,7 +1827,7 @@ export async function createJavaBom(path, options) {
|
|
|
1828
1827
|
);
|
|
1829
1828
|
} else {
|
|
1830
1829
|
console.log(
|
|
1831
|
-
"1. Java version requirement: cdxgen container image bundles Java 24 with maven 3.9 which might be incompatible. Try running cdxgen with the custom JDK11-based image `ghcr.io/cyclonedx/cdxgen-java11:
|
|
1830
|
+
"1. Java version requirement: cdxgen container image bundles Java 24 with maven 3.9 which might be incompatible. Try running cdxgen with the custom JDK11-based image `ghcr.io/cyclonedx/cdxgen-java11:v12`.",
|
|
1832
1831
|
);
|
|
1833
1832
|
}
|
|
1834
1833
|
console.log(
|
|
@@ -1889,7 +1888,9 @@ export async function createJavaBom(path, options) {
|
|
|
1889
1888
|
);
|
|
1890
1889
|
}
|
|
1891
1890
|
}
|
|
1892
|
-
|
|
1891
|
+
if (!DEBUG_MODE) {
|
|
1892
|
+
unlinkSync(tempMvnTree);
|
|
1893
|
+
}
|
|
1893
1894
|
}
|
|
1894
1895
|
}
|
|
1895
1896
|
}
|
|
@@ -2972,7 +2973,7 @@ export async function createNodejsBom(path, options) {
|
|
|
2972
2973
|
if (DEBUG_MODE && result.stdout) {
|
|
2973
2974
|
if (result.stdout.includes("EBADENGINE Unsupported engine")) {
|
|
2974
2975
|
console.log(
|
|
2975
|
-
"TIP: Try using the custom `ghcr.io/cyclonedx/cdxgen-node20:
|
|
2976
|
+
"TIP: Try using the custom `ghcr.io/cyclonedx/cdxgen-node20:v12` container image, which bundles node.js 20. The current version of node.js is incompatible for this project.",
|
|
2976
2977
|
);
|
|
2977
2978
|
console.log(
|
|
2978
2979
|
"Alternatively, run cdxgen with the custom node with version types. Eg: `-t node20`",
|
|
@@ -3002,12 +3003,12 @@ export async function createNodejsBom(path, options) {
|
|
|
3002
3003
|
);
|
|
3003
3004
|
} else {
|
|
3004
3005
|
console.log(
|
|
3005
|
-
"TIP: Try using the custom `ghcr.io/cyclonedx/cdxgen-node20:
|
|
3006
|
+
"TIP: Try using the custom `ghcr.io/cyclonedx/cdxgen-node20:v12` container image, which bundles node.js 20. The default image bundles node >= 23, which might be incompatible.",
|
|
3006
3007
|
);
|
|
3007
3008
|
}
|
|
3008
3009
|
} else {
|
|
3009
3010
|
console.log(
|
|
3010
|
-
"TIP: Try using the custom `ghcr.io/cyclonedx/cdxgen-node20:
|
|
3011
|
+
"TIP: Try using the custom `ghcr.io/cyclonedx/cdxgen-node20:v12` container image with --platform=linux/amd64, which bundles node.js 20.",
|
|
3011
3012
|
);
|
|
3012
3013
|
}
|
|
3013
3014
|
}
|
|
@@ -6670,7 +6671,7 @@ export async function createCsharpBom(path, options) {
|
|
|
6670
6671
|
"This project requires a specific version of dotnet sdk to be installed. The cdxgen container image bundles dotnet SDK 8.0, which might be incompatible.",
|
|
6671
6672
|
);
|
|
6672
6673
|
console.log(
|
|
6673
|
-
"TIP: Try using the custom `ghcr.io/cyclonedx/cdxgen-debian-dotnet6:
|
|
6674
|
+
"TIP: Try using the custom `ghcr.io/cyclonedx/cdxgen-debian-dotnet6:v12` or `ghcr.io/cyclonedx/cdxgen-debian-dotnet8:v12` container images.",
|
|
6674
6675
|
);
|
|
6675
6676
|
} else if (
|
|
6676
6677
|
result?.stderr?.includes("is not found on source") ||
|
|
@@ -6701,7 +6702,7 @@ export async function createCsharpBom(path, options) {
|
|
|
6701
6702
|
);
|
|
6702
6703
|
if (process.env?.CDXGEN_IN_CONTAINER !== "true") {
|
|
6703
6704
|
console.log(
|
|
6704
|
-
"Alternatively, try using the custom `ghcr.io/cyclonedx/cdxgen-debian-dotnet6:
|
|
6705
|
+
"Alternatively, try using the custom `ghcr.io/cyclonedx/cdxgen-debian-dotnet6:v12` container image, which bundles nuget (mono) and a range of dotnet SDKs.",
|
|
6705
6706
|
);
|
|
6706
6707
|
}
|
|
6707
6708
|
}
|
|
@@ -6797,7 +6798,7 @@ export async function createCsharpBom(path, options) {
|
|
|
6797
6798
|
"3. If the project uses the legacy .Net Framework 4.6/4.7/4.8, it might require execution on Windows.",
|
|
6798
6799
|
);
|
|
6799
6800
|
console.log(
|
|
6800
|
-
"Alternatively, try using the custom `ghcr.io/cyclonedx/cdxgen-dotnet:
|
|
6801
|
+
"Alternatively, try using the custom `ghcr.io/cyclonedx/cdxgen-dotnet:v12` container image, which bundles a range of dotnet SDKs.",
|
|
6801
6802
|
);
|
|
6802
6803
|
options.failOnError && process.exit(1);
|
|
6803
6804
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { assert, it } from "poku";
|
|
2
|
+
|
|
3
|
+
import { checkDependencies } from "../../bin/dependencies.js";
|
|
4
|
+
|
|
5
|
+
it("checks dependency overrides in package.json vs installed in pnpm-lock.yaml", async () => {
|
|
6
|
+
assert.equal(
|
|
7
|
+
checkDependencies(),
|
|
8
|
+
0,
|
|
9
|
+
"There shouldn't have been dependency discrepancies",
|
|
10
|
+
);
|
|
11
|
+
});
|
|
@@ -782,7 +782,7 @@ export function installRubyVersion(rubyVersion, filePath) {
|
|
|
782
782
|
process.env?.CDXGEN_IN_CONTAINER !== "true"
|
|
783
783
|
) {
|
|
784
784
|
console.log(
|
|
785
|
-
`Installing Ruby version ${rubyVersion} requires specific development libraries. Consider using the custom container image "ghcr.io/cyclonedx/cdxgen-debian-ruby26:
|
|
785
|
+
`Installing Ruby version ${rubyVersion} requires specific development libraries. Consider using the custom container image "ghcr.io/cyclonedx/cdxgen-debian-ruby26:v12" instead.`,
|
|
786
786
|
);
|
|
787
787
|
console.log("The below install step is likely to fail.");
|
|
788
788
|
}
|
package/lib/helpers/utils.js
CHANGED
|
@@ -35,6 +35,7 @@ import { parseEDNString } from "edn-data";
|
|
|
35
35
|
import { globSync } from "glob";
|
|
36
36
|
import got from "got";
|
|
37
37
|
import iconv from "iconv-lite";
|
|
38
|
+
import Keyv from "keyv";
|
|
38
39
|
import StreamZip from "node-stream-zip";
|
|
39
40
|
import { PackageURL } from "packageurl-js";
|
|
40
41
|
import propertiesReader from "properties-reader";
|
|
@@ -672,7 +673,9 @@ export function isPackageManagerAllowed(name, conflictingManagers, options) {
|
|
|
672
673
|
}
|
|
673
674
|
|
|
674
675
|
// HTTP cache
|
|
675
|
-
const gotHttpCache = new
|
|
676
|
+
const gotHttpCache = new Keyv();
|
|
677
|
+
// Don't complain when there's lots of parallel requests
|
|
678
|
+
gotHttpCache.setMaxListeners(10000);
|
|
676
679
|
|
|
677
680
|
function isCacheDisabled() {
|
|
678
681
|
return (
|
|
@@ -3805,8 +3808,21 @@ export async function parseMinJs(minJsFile) {
|
|
|
3805
3808
|
if (tmpB && tmpB.length > 1) {
|
|
3806
3809
|
// Fix #223 - lowercase parsed package name
|
|
3807
3810
|
const name = tmpB[0].replace(/ /g, "-").trim().toLowerCase();
|
|
3811
|
+
if (name === "@license" || name === "license") {
|
|
3812
|
+
return;
|
|
3813
|
+
}
|
|
3814
|
+
if (name.startsWith("@") && !name.includes("/")) {
|
|
3815
|
+
return;
|
|
3816
|
+
}
|
|
3808
3817
|
if (
|
|
3809
|
-
[
|
|
3818
|
+
[
|
|
3819
|
+
"copyright",
|
|
3820
|
+
"author",
|
|
3821
|
+
"licensed",
|
|
3822
|
+
"minified",
|
|
3823
|
+
"vendor",
|
|
3824
|
+
"build",
|
|
3825
|
+
].includes(name.toLowerCase())
|
|
3810
3826
|
) {
|
|
3811
3827
|
return;
|
|
3812
3828
|
}
|
|
@@ -4792,7 +4808,7 @@ export function executeParallelGradleProperties(
|
|
|
4792
4808
|
"1. Check if the correct version of java and gradle are installed and available in PATH. For example, some project might require Java 11 with gradle 7.\n cdxgen container image bundles Java 23 with gradle 8 which might be incompatible.",
|
|
4793
4809
|
);
|
|
4794
4810
|
console.log(
|
|
4795
|
-
"2. Try running cdxgen with the custom JDK11-based image `ghcr.io/cyclonedx/cdxgen-java11:
|
|
4811
|
+
"2. Try running cdxgen with the custom JDK11-based image `ghcr.io/cyclonedx/cdxgen-java11:v12`.",
|
|
4796
4812
|
);
|
|
4797
4813
|
if (result.stderr?.includes("not get unknown property")) {
|
|
4798
4814
|
console.log(
|
|
@@ -12107,7 +12123,7 @@ export function convertOSQueryResults(
|
|
|
12107
12123
|
return pkgList;
|
|
12108
12124
|
}
|
|
12109
12125
|
|
|
12110
|
-
function purlFromUrlString(type, repoUrl, version) {
|
|
12126
|
+
export function purlFromUrlString(type, repoUrl, version) {
|
|
12111
12127
|
let namespace = "";
|
|
12112
12128
|
let name;
|
|
12113
12129
|
if (repoUrl?.startsWith("http")) {
|
|
@@ -12136,7 +12152,10 @@ function purlFromUrlString(type, repoUrl, version) {
|
|
|
12136
12152
|
namespace = `${hostname}/${urlpath}`;
|
|
12137
12153
|
} else if (repoUrl?.startsWith("/")) {
|
|
12138
12154
|
const parts = repoUrl.split("/");
|
|
12139
|
-
name = parts[parts.length - 1];
|
|
12155
|
+
name = parts[parts.length - 1] || "unknown";
|
|
12156
|
+
if (type === "swift") {
|
|
12157
|
+
namespace = "local";
|
|
12158
|
+
}
|
|
12140
12159
|
} else {
|
|
12141
12160
|
if (DEBUG_MODE) {
|
|
12142
12161
|
console.warn("unsupported repo url for swift type");
|
|
@@ -14929,7 +14948,7 @@ export async function getPipFrozenTree(
|
|
|
14929
14948
|
}
|
|
14930
14949
|
}
|
|
14931
14950
|
console.warn(
|
|
14932
|
-
"This project does not support python with version types. Use an appropriate container image such as `ghcr.io/appthreat/cdxgen-python39:
|
|
14951
|
+
"This project does not support python with version types. Use an appropriate container image such as `ghcr.io/appthreat/cdxgen-python39:v12` or `ghcr.io/appthreat/cdxgen-python311:v12` and invoke cdxgen with `-t python` instead.\n",
|
|
14933
14952
|
);
|
|
14934
14953
|
} else if (
|
|
14935
14954
|
result?.stderr?.includes(
|
|
@@ -14937,7 +14956,7 @@ export async function getPipFrozenTree(
|
|
|
14937
14956
|
)
|
|
14938
14957
|
) {
|
|
14939
14958
|
console.log(
|
|
14940
|
-
"Installing build dependencies has failed. Use an appropriate container image such as `ghcr.io/appthreat/cdxgen-python39:
|
|
14959
|
+
"Installing build dependencies has failed. Use an appropriate container image such as `ghcr.io/appthreat/cdxgen-python39:v12` or `ghcr.io/appthreat/cdxgen-python311:v12` and invoke cdxgen with `-t python` instead.",
|
|
14941
14960
|
);
|
|
14942
14961
|
if (
|
|
14943
14962
|
result?.stderr?.includes(
|
|
@@ -14995,7 +15014,7 @@ export async function getPipFrozenTree(
|
|
|
14995
15014
|
"1. Try invoking cdxgen with a specific python version type. Example: `-t python36` or `-t python39`",
|
|
14996
15015
|
);
|
|
14997
15016
|
console.log(
|
|
14998
|
-
"2. Alternatively, try using the custom container images `ghcr.io/cyclonedx/cdxgen-python39:
|
|
15017
|
+
"2. Alternatively, try using the custom container images `ghcr.io/cyclonedx/cdxgen-python39:v12` or `ghcr.io/cyclonedx/cdxgen-python311:v12`, which bundles a range of build tools and development libraries.",
|
|
14999
15018
|
);
|
|
15000
15019
|
} else if (
|
|
15001
15020
|
process.env?.PIP_INSTALL_ARGS?.includes("--python-version")
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Buffer } from "node:buffer";
|
|
2
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { existsSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
|
|
5
5
|
import { PackageURL } from "packageurl-js";
|
|
@@ -75,6 +75,7 @@ import {
|
|
|
75
75
|
parseMakeDFile,
|
|
76
76
|
parseMavenTree,
|
|
77
77
|
parseMillDependency,
|
|
78
|
+
parseMinJs,
|
|
78
79
|
parseMixLockData,
|
|
79
80
|
parseNodeShrinkwrap,
|
|
80
81
|
parseNupkg,
|
|
@@ -105,6 +106,7 @@ import {
|
|
|
105
106
|
parseSwiftResolved,
|
|
106
107
|
parseYarnLock,
|
|
107
108
|
pnpmMetadata,
|
|
109
|
+
purlFromUrlString,
|
|
108
110
|
readZipEntry,
|
|
109
111
|
splitOutputByGradleProjects,
|
|
110
112
|
toGemModuleNames,
|
|
@@ -2095,7 +2097,7 @@ it("get crates metadata", async () => {
|
|
|
2095
2097
|
homepage: { url: "https://github.com/iqlusioninc/abscissa/" },
|
|
2096
2098
|
properties: [
|
|
2097
2099
|
{ name: "cdx:cargo:crate_id", value: "207912" },
|
|
2098
|
-
{ name: "cdx:cargo:latest_version", value: "0.
|
|
2100
|
+
{ name: "cdx:cargo:latest_version", value: "0.9.0" },
|
|
2099
2101
|
{
|
|
2100
2102
|
name: "cdx:cargo:features",
|
|
2101
2103
|
value:
|
|
@@ -2471,12 +2473,12 @@ it("parse mix lock data", () => {
|
|
|
2471
2473
|
it("parse github actions workflow data", () => {
|
|
2472
2474
|
assert.deepStrictEqual(parseGitHubWorkflowData(null), []);
|
|
2473
2475
|
let dep_list = parseGitHubWorkflowData("./.github/workflows/nodejs.yml");
|
|
2474
|
-
assert.deepStrictEqual(dep_list.length,
|
|
2476
|
+
assert.deepStrictEqual(dep_list.length, 7);
|
|
2475
2477
|
assert.deepStrictEqual(dep_list[0], {
|
|
2476
2478
|
group: "actions",
|
|
2477
2479
|
name: "checkout",
|
|
2478
|
-
version: "
|
|
2479
|
-
purl: "pkg:github/actions/checkout@
|
|
2480
|
+
version: "6.0.0",
|
|
2481
|
+
purl: "pkg:github/actions/checkout@6.0.0?commit=1af3b93b6815bc44a9784bd300feb67ff0d1eeb3",
|
|
2480
2482
|
properties: [
|
|
2481
2483
|
{
|
|
2482
2484
|
name: "SrcFile",
|
|
@@ -3941,11 +3943,6 @@ it("parsePnpmLock", async () => {
|
|
|
3941
3943
|
parsedList.pkgList.filter((pkg) => !pkg.scope).length,
|
|
3942
3944
|
3,
|
|
3943
3945
|
);
|
|
3944
|
-
parsedList = await parsePnpmLock("./pnpm-lock.yaml");
|
|
3945
|
-
assert.deepStrictEqual(parsedList.pkgList.length, 355);
|
|
3946
|
-
assert.deepStrictEqual(parsedList.dependenciesList.length, 355);
|
|
3947
|
-
assert.ok(parsedList.pkgList[0]);
|
|
3948
|
-
assert.ok(parsedList.dependenciesList[0]);
|
|
3949
3946
|
parsedList = await parsePnpmLock(
|
|
3950
3947
|
"./test/data/pnpm_locks/bytemd-pnpm-lock.yaml",
|
|
3951
3948
|
);
|
|
@@ -6956,6 +6953,13 @@ it("parse swift deps files", () => {
|
|
|
6956
6953
|
});
|
|
6957
6954
|
});
|
|
6958
6955
|
|
|
6956
|
+
it("assigns default namespace for local swift paths (#2781)", () => {
|
|
6957
|
+
const purl = purlFromUrlString("swift", "/Users/arsh/project", "1.0.0");
|
|
6958
|
+
assert.equal(purl.namespace, "local");
|
|
6959
|
+
assert.equal(purl.name, "project");
|
|
6960
|
+
assert.equal(purl.version, "1.0.0");
|
|
6961
|
+
});
|
|
6962
|
+
|
|
6959
6963
|
it("pypi version solver tests", () => {
|
|
6960
6964
|
const versionsList = [
|
|
6961
6965
|
"1.0.0",
|
|
@@ -7916,3 +7920,35 @@ testCases.forEach(([url, expected], index) => {
|
|
|
7916
7920
|
});
|
|
7917
7921
|
// biome-ignore-end lint/suspicious/noTemplateCurlyInString: This is a unit test
|
|
7918
7922
|
// biome-ignore-end lint/style/useTemplate: This is a unit test
|
|
7923
|
+
it("ignores license banners in minified js (#2717)", async () => {
|
|
7924
|
+
const file = "temp.min.js";
|
|
7925
|
+
|
|
7926
|
+
const content = `/*! @license DOMPurify 3.2.7 */
|
|
7927
|
+
(function(){console.log("test")})();
|
|
7928
|
+
`;
|
|
7929
|
+
|
|
7930
|
+
writeFileSync(file, content);
|
|
7931
|
+
|
|
7932
|
+
const result = await parseMinJs(file);
|
|
7933
|
+
|
|
7934
|
+
assert.ok(Array.isArray(result));
|
|
7935
|
+
assert.equal(result.length, 0);
|
|
7936
|
+
|
|
7937
|
+
if (existsSync(file)) unlinkSync(file);
|
|
7938
|
+
});
|
|
7939
|
+
|
|
7940
|
+
it("parses valid minified js with real package name (#2717)", async () => {
|
|
7941
|
+
const file = "temp.min.js";
|
|
7942
|
+
const content = `/*! jquery 3.6.0 */
|
|
7943
|
+
(function(){console.log("test")})();`;
|
|
7944
|
+
|
|
7945
|
+
writeFileSync(file, content);
|
|
7946
|
+
|
|
7947
|
+
const result = await parseMinJs(file);
|
|
7948
|
+
|
|
7949
|
+
assert.equal(result.length, 1);
|
|
7950
|
+
assert.equal(result[0].name, "jquery");
|
|
7951
|
+
assert.equal(result[0].version, "3.6.0");
|
|
7952
|
+
|
|
7953
|
+
if (existsSync(file)) unlinkSync(file);
|
|
7954
|
+
});
|
|
@@ -34,7 +34,6 @@ import util from "node:util";
|
|
|
34
34
|
import nameFromFolder from "@npmcli/name-from-folder";
|
|
35
35
|
import getPaths from "bin-links";
|
|
36
36
|
import npa from "npm-package-arg";
|
|
37
|
-
import log from "proc-log";
|
|
38
37
|
import rpj from "read-package-json-fast";
|
|
39
38
|
import semver from "semver";
|
|
40
39
|
import { walkUp } from "walk-up-path";
|
|
@@ -1444,8 +1443,6 @@ class Node {
|
|
|
1444
1443
|
}
|
|
1445
1444
|
return false;
|
|
1446
1445
|
}
|
|
1447
|
-
// This is an error condition. We can only get here if the new override set is in conflict with the existing.
|
|
1448
|
-
log.silly("Conflicting override sets", this.name);
|
|
1449
1446
|
}
|
|
1450
1447
|
|
|
1451
1448
|
deleteEdgeIn(edge) {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import npa from "npm-package-arg";
|
|
2
|
-
import log from "proc-log";
|
|
3
2
|
import semver from "semver";
|
|
4
3
|
|
|
5
4
|
class OverrideSet {
|
|
@@ -206,9 +205,6 @@ class OverrideSet {
|
|
|
206
205
|
return first;
|
|
207
206
|
}
|
|
208
207
|
}
|
|
209
|
-
|
|
210
|
-
// The override sets are incomparable. Neither one contains the other.
|
|
211
|
-
log.silly("Conflicting override sets", first, second);
|
|
212
208
|
}
|
|
213
209
|
|
|
214
210
|
static doOverrideSetsConflict(first, second) {
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
// a result.
|
|
9
9
|
|
|
10
10
|
import localeCompare from "@isaacs/string-locale-compare";
|
|
11
|
-
import { redact } from "@npmcli/redact";
|
|
12
11
|
import log from "proc-log";
|
|
13
12
|
|
|
14
13
|
import CanPlaceDep, { CONFLICT, KEEP } from "./can-place-dep.js";
|
|
@@ -183,15 +182,6 @@ class PlaceDep {
|
|
|
183
182
|
|
|
184
183
|
const { target } = this.canPlace;
|
|
185
184
|
|
|
186
|
-
log.silly(
|
|
187
|
-
"placeDep",
|
|
188
|
-
target.location || "ROOT",
|
|
189
|
-
`${this.dep.name}@${this.dep.version}`,
|
|
190
|
-
this.canPlace.description,
|
|
191
|
-
`for: ${this.edge.from.package._id || this.edge.from.location}`,
|
|
192
|
-
`want: ${redact(this.edge.spec || "*")}`,
|
|
193
|
-
);
|
|
194
|
-
|
|
195
185
|
const placementType =
|
|
196
186
|
this.canPlace.canPlace === CONFLICT
|
|
197
187
|
? this.canPlace.canPlaceSelf
|
|
@@ -12,13 +12,11 @@ class Results {
|
|
|
12
12
|
#initialItems;
|
|
13
13
|
#inventory;
|
|
14
14
|
#results = new Map();
|
|
15
|
-
#targetNode;
|
|
16
15
|
|
|
17
16
|
constructor(opts) {
|
|
18
17
|
this.#currentAstSelector = opts.rootAstNode.nodes[0];
|
|
19
18
|
this.#inventory = opts.inventory;
|
|
20
19
|
this.#initialItems = opts.initialItems;
|
|
21
|
-
this.#targetNode = opts.targetNode;
|
|
22
20
|
|
|
23
21
|
this.currentResults = this.#initialItems;
|
|
24
22
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyclonedx/cdxgen",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "12.0.0",
|
|
4
4
|
"description": "Creates CycloneDX Software Bill of Materials (SBOM) from source or container image",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sbom",
|
|
@@ -98,12 +98,12 @@
|
|
|
98
98
|
"types/",
|
|
99
99
|
"index.cjs"
|
|
100
100
|
],
|
|
101
|
-
"lint-staged": {
|
|
102
|
-
"*": "biome check --fix --no-errors-on-unmatched"
|
|
103
|
-
},
|
|
104
101
|
"overrides": {
|
|
105
|
-
"@appthreat/atom": "2.
|
|
102
|
+
"@appthreat/atom": "2.3.0",
|
|
103
|
+
"@appthreat/atom-common": "1.0.11",
|
|
104
|
+
"@appthreat/atom-parsetools": "1.0.11",
|
|
106
105
|
"@appthreat/cdx-proto": "1.1.4",
|
|
106
|
+
"@appthreat/sqlite3": "6.0.9",
|
|
107
107
|
"@babel/code-frame": "7.27.1",
|
|
108
108
|
"@babel/generator": "7.28.5",
|
|
109
109
|
"@babel/helper-globals": "7.28.0",
|
|
@@ -113,107 +113,324 @@
|
|
|
113
113
|
"@babel/template": "7.27.2",
|
|
114
114
|
"@babel/traverse": "7.28.5",
|
|
115
115
|
"@babel/types": "7.28.5",
|
|
116
|
-
"@biomejs/biome": "2.3.
|
|
117
|
-
"@
|
|
118
|
-
"@
|
|
119
|
-
"@
|
|
120
|
-
"@
|
|
121
|
-
"@
|
|
122
|
-
"@
|
|
123
|
-
"@
|
|
124
|
-
"@
|
|
125
|
-
"@
|
|
126
|
-
"@cyclonedx/cdxgen-plugins-bin
|
|
127
|
-
"@cyclonedx/cdxgen-plugins-bin-
|
|
128
|
-
"@cyclonedx/cdxgen-plugins-bin-
|
|
116
|
+
"@biomejs/biome": "2.3.7",
|
|
117
|
+
"@biomejs/cli-darwin-arm64": "2.3.7",
|
|
118
|
+
"@biomejs/cli-darwin-x64": "2.3.7",
|
|
119
|
+
"@biomejs/cli-linux-arm64": "2.3.7",
|
|
120
|
+
"@biomejs/cli-linux-arm64-musl": "2.3.7",
|
|
121
|
+
"@biomejs/cli-linux-x64": "2.3.7",
|
|
122
|
+
"@biomejs/cli-linux-x64-musl": "2.3.7",
|
|
123
|
+
"@biomejs/cli-win32-arm64": "2.3.7",
|
|
124
|
+
"@biomejs/cli-win32-x64": "2.3.7",
|
|
125
|
+
"@bufbuild/protobuf": "2.10.1",
|
|
126
|
+
"@cyclonedx/cdxgen-plugins-bin": "1.8.0",
|
|
127
|
+
"@cyclonedx/cdxgen-plugins-bin-darwin-amd64": "1.8.0",
|
|
128
|
+
"@cyclonedx/cdxgen-plugins-bin-darwin-arm64": "1.8.0",
|
|
129
|
+
"@cyclonedx/cdxgen-plugins-bin-linux-amd64": "1.8.0",
|
|
130
|
+
"@cyclonedx/cdxgen-plugins-bin-linux-arm": "1.8.0",
|
|
131
|
+
"@cyclonedx/cdxgen-plugins-bin-linux-arm64": "1.8.0",
|
|
132
|
+
"@cyclonedx/cdxgen-plugins-bin-linux-ppc64": "1.8.0",
|
|
133
|
+
"@cyclonedx/cdxgen-plugins-bin-linuxmusl-amd64": "1.8.0",
|
|
134
|
+
"@cyclonedx/cdxgen-plugins-bin-linuxmusl-arm64": "1.8.0",
|
|
135
|
+
"@cyclonedx/cdxgen-plugins-bin-windows-amd64": "1.8.0",
|
|
136
|
+
"@cyclonedx/cdxgen-plugins-bin-windows-arm64": "1.8.0",
|
|
129
137
|
"@iarna/toml": "2.2.5",
|
|
138
|
+
"@isaacs/balanced-match": "4.0.1",
|
|
139
|
+
"@isaacs/brace-expansion": "5.0.0",
|
|
140
|
+
"@isaacs/fs-minipass": "4.0.1",
|
|
130
141
|
"@isaacs/string-locale-compare": "1.1.0",
|
|
142
|
+
"@jridgewell/gen-mapping": "0.3.13",
|
|
143
|
+
"@jridgewell/resolve-uri": "3.1.2",
|
|
144
|
+
"@jridgewell/sourcemap-codec": "1.5.5",
|
|
145
|
+
"@jridgewell/trace-mapping": "0.3.31",
|
|
146
|
+
"@keyv/serialize": "1.1.1",
|
|
131
147
|
"@npmcli/agent": "4.0.0",
|
|
132
148
|
"@npmcli/fs": "5.0.0",
|
|
133
|
-
"@npmcli/
|
|
134
|
-
"@npmcli/map-workspaces": "5.0.
|
|
149
|
+
"@npmcli/git": "7.0.1",
|
|
150
|
+
"@npmcli/map-workspaces": "5.0.3",
|
|
135
151
|
"@npmcli/name-from-folder": "4.0.0",
|
|
136
|
-
"@npmcli/package-json": "7.0.
|
|
152
|
+
"@npmcli/package-json": "7.0.4",
|
|
153
|
+
"@npmcli/promise-spawn": "9.0.1",
|
|
137
154
|
"@npmcli/query": "5.0.0",
|
|
138
|
-
"@
|
|
155
|
+
"@sec-ant/readable-stream": "0.6.0",
|
|
156
|
+
"@sindresorhus/is": "7.1.1",
|
|
157
|
+
"@types/debug": "4.1.12",
|
|
158
|
+
"@types/http-cache-semantics": "4.0.4",
|
|
159
|
+
"@types/ms": "2.1.0",
|
|
160
|
+
"@types/node": "24.10.1",
|
|
161
|
+
"@types/validator": "13.15.10",
|
|
139
162
|
"abbrev": "4.0.0",
|
|
163
|
+
"agent-base": "7.1.4",
|
|
140
164
|
"ajv": "8.17.1",
|
|
141
165
|
"ajv-formats": "3.0.1",
|
|
166
|
+
"ansi-regex": "6.2.2",
|
|
167
|
+
"ansi-styles": "6.2.3",
|
|
168
|
+
"b4a": "1.7.3",
|
|
169
|
+
"bare-events": "2.8.2",
|
|
170
|
+
"bare-fs": "4.5.1",
|
|
171
|
+
"bare-os": "3.6.2",
|
|
172
|
+
"bare-path": "3.0.0",
|
|
173
|
+
"bare-stream": "2.7.0",
|
|
174
|
+
"bare-url": "2.3.2",
|
|
142
175
|
"bin-links": "6.0.0",
|
|
176
|
+
"bindings": "1.5.0",
|
|
143
177
|
"body-parser": "2.2.0",
|
|
144
|
-
"
|
|
178
|
+
"boolbase": "1.0.0",
|
|
179
|
+
"boolean": "3.2.0",
|
|
180
|
+
"buffer-equal-constant-time": "1.0.1",
|
|
181
|
+
"byte-counter": "0.1.0",
|
|
182
|
+
"bytes": "3.1.2",
|
|
183
|
+
"cacache": "20.0.3",
|
|
184
|
+
"cacheable-lookup": "7.0.0",
|
|
185
|
+
"cacheable-request": "13.0.15",
|
|
186
|
+
"call-bind-apply-helpers": "1.0.2",
|
|
187
|
+
"call-bound": "1.0.4",
|
|
145
188
|
"cheerio": "1.1.2",
|
|
189
|
+
"cheerio-select": "2.1.0",
|
|
146
190
|
"chownr": "3.0.0",
|
|
191
|
+
"cliui": "9.0.1",
|
|
192
|
+
"cmd-shim": "8.0.0",
|
|
147
193
|
"common-ancestor-path": "1.0.1",
|
|
194
|
+
"compressible": "2.0.18",
|
|
148
195
|
"compression": "1.8.1",
|
|
149
196
|
"connect": "3.7.0",
|
|
150
|
-
"
|
|
151
|
-
"
|
|
197
|
+
"content-type": "1.0.5",
|
|
198
|
+
"css-select": "6.0.0",
|
|
199
|
+
"css-what": "7.0.0",
|
|
200
|
+
"cssesc": "3.0.0",
|
|
201
|
+
"debug": "4.4.3",
|
|
202
|
+
"decompress-response": "10.0.0",
|
|
203
|
+
"deep-extend": "0.6.0",
|
|
204
|
+
"define-data-property": "1.1.4",
|
|
205
|
+
"define-properties": "1.2.1",
|
|
206
|
+
"depd": "2.0.0",
|
|
207
|
+
"detect-libc": "2.1.2",
|
|
208
|
+
"detect-node": "2.1.0",
|
|
209
|
+
"dom-serializer": "2.0.0",
|
|
210
|
+
"domelementtype": "2.3.0",
|
|
211
|
+
"domhandler": "5.0.3",
|
|
212
|
+
"domutils": "3.2.2",
|
|
213
|
+
"dottie": "2.0.6",
|
|
214
|
+
"dunder-proto": "1.0.1",
|
|
215
|
+
"ecdsa-sig-formatter": "1.0.11",
|
|
152
216
|
"edn-data": "1.1.2",
|
|
217
|
+
"ee-first": "1.1.1",
|
|
218
|
+
"encodeurl": "2.0.0",
|
|
153
219
|
"encoding": "0.1.13",
|
|
154
|
-
"
|
|
155
|
-
"
|
|
220
|
+
"encoding-sniffer": "0.2.1",
|
|
221
|
+
"end-of-stream": "1.4.5",
|
|
222
|
+
"entities": "7.0.0",
|
|
223
|
+
"env-paths": "3.0.0",
|
|
224
|
+
"err-code": "3.0.1",
|
|
225
|
+
"es-define-property": "1.0.1",
|
|
226
|
+
"es-errors": "1.3.0",
|
|
227
|
+
"es-object-atoms": "1.1.1",
|
|
228
|
+
"es6-error": "4.1.1",
|
|
229
|
+
"escalade": "3.2.0",
|
|
230
|
+
"escape-html": "1.0.3",
|
|
231
|
+
"escape-string-regexp": "5.0.0",
|
|
232
|
+
"events-universal": "1.0.1",
|
|
233
|
+
"expand-template": "2.0.3",
|
|
234
|
+
"exponential-backoff": "3.1.3",
|
|
235
|
+
"fast-deep-equal": "3.1.3",
|
|
236
|
+
"fast-fifo": "1.3.2",
|
|
237
|
+
"fast-uri": "3.1.0",
|
|
238
|
+
"fdir": "6.5.0",
|
|
239
|
+
"file-uri-to-path": "2.0.0",
|
|
240
|
+
"finalhandler": "2.1.0",
|
|
241
|
+
"form-data-encoder": "4.1.0",
|
|
242
|
+
"fs-minipass": "3.0.3",
|
|
243
|
+
"function-bind": "1.1.2",
|
|
244
|
+
"get-caller-file": "2.0.5",
|
|
245
|
+
"get-east-asian-width": "1.4.0",
|
|
246
|
+
"get-intrinsic": "1.3.0",
|
|
247
|
+
"get-proto": "1.0.1",
|
|
248
|
+
"get-stream": "9.0.1",
|
|
249
|
+
"github-from-package": "0.0.0",
|
|
250
|
+
"glob": "13.0.0",
|
|
156
251
|
"global-agent": "3.0.0",
|
|
157
|
-
"
|
|
252
|
+
"globalthis": "1.0.4",
|
|
253
|
+
"gopd": "1.2.0",
|
|
254
|
+
"got": "14.6.5",
|
|
255
|
+
"graceful-fs": "4.2.11",
|
|
256
|
+
"has-property-descriptors": "1.0.2",
|
|
257
|
+
"has-symbols": "1.1.0",
|
|
258
|
+
"hasown": "2.0.2",
|
|
158
259
|
"hosted-git-info": "9.0.2",
|
|
260
|
+
"htmlparser2": "10.0.0",
|
|
261
|
+
"http-cache-semantics": "4.2.0",
|
|
262
|
+
"http-errors": "2.0.1",
|
|
263
|
+
"http-proxy-agent": "7.0.2",
|
|
264
|
+
"http2-wrapper": "2.2.1",
|
|
265
|
+
"https-proxy-agent": "7.0.6",
|
|
159
266
|
"iconv-lite": "0.7.0",
|
|
267
|
+
"imurmurhash": "0.1.4",
|
|
268
|
+
"inflection": "3.0.2",
|
|
269
|
+
"inherits": "2.0.4",
|
|
160
270
|
"ini": "6.0.0",
|
|
271
|
+
"ip-address": "10.1.0",
|
|
272
|
+
"is-fullwidth-code-point": "5.1.0",
|
|
161
273
|
"is-stream": "4.0.1",
|
|
162
274
|
"isexe": "3.1.1",
|
|
275
|
+
"js-tokens": "9.0.1",
|
|
276
|
+
"jsesc": "3.1.0",
|
|
163
277
|
"json-parse-even-better-errors": "5.0.0",
|
|
278
|
+
"json-schema-traverse": "1.0.0",
|
|
164
279
|
"json-stringify-nice": "1.1.4",
|
|
280
|
+
"json-stringify-safe": "5.0.1",
|
|
165
281
|
"jsonata": "2.1.0",
|
|
282
|
+
"just-diff": "6.0.2",
|
|
283
|
+
"just-diff-apply": "5.5.0",
|
|
166
284
|
"jwa": "2.0.1",
|
|
167
285
|
"jws": "4.0.0",
|
|
286
|
+
"keyv": "5.5.4",
|
|
287
|
+
"lodash": "4.17.21",
|
|
288
|
+
"lodash.truncate": "4.4.2",
|
|
289
|
+
"lowercase-keys": "3.0.0",
|
|
168
290
|
"lru-cache": "11.2.2",
|
|
169
|
-
"make-fetch-happen": "15.0.
|
|
170
|
-
"
|
|
291
|
+
"make-fetch-happen": "15.0.3",
|
|
292
|
+
"matcher": "6.0.0",
|
|
293
|
+
"math-intrinsics": "1.1.0",
|
|
294
|
+
"media-typer": "1.1.0",
|
|
295
|
+
"mime-db": "1.54.0",
|
|
296
|
+
"mime-types": "3.0.2",
|
|
297
|
+
"mimic-response": "4.0.0",
|
|
298
|
+
"minimatch": "10.1.1",
|
|
299
|
+
"minimist": "1.2.8",
|
|
300
|
+
"minipass": "7.1.2",
|
|
301
|
+
"minipass-collect": "2.0.1",
|
|
302
|
+
"minipass-fetch": "5.0.0",
|
|
303
|
+
"minipass-flush": "1.0.5",
|
|
304
|
+
"minipass-pipeline": "1.2.4",
|
|
305
|
+
"minipass-sized": "1.0.3",
|
|
171
306
|
"minizlib": "3.1.0",
|
|
172
307
|
"mkdirp": "3.0.1",
|
|
308
|
+
"mkdirp-classic": "0.5.3",
|
|
309
|
+
"moment": "2.30.1",
|
|
310
|
+
"moment-timezone": "0.6.0",
|
|
173
311
|
"ms": "2.1.3",
|
|
174
|
-
"
|
|
175
|
-
"
|
|
312
|
+
"napi-build-utils": "2.0.0",
|
|
313
|
+
"negotiator": "1.0.0",
|
|
314
|
+
"node-abi": "3.85.0",
|
|
315
|
+
"node-addon-api": "8.5.0",
|
|
316
|
+
"node-gyp": "12.1.0",
|
|
176
317
|
"node-stream-zip": "1.15.0",
|
|
177
318
|
"nopt": "9.0.0",
|
|
319
|
+
"normalize-url": "8.1.0",
|
|
178
320
|
"npm-install-checks": "8.0.0",
|
|
179
321
|
"npm-normalize-package-bin": "5.0.0",
|
|
180
|
-
"npm-package-arg": "13.0.
|
|
322
|
+
"npm-package-arg": "13.0.2",
|
|
181
323
|
"npm-pick-manifest": "11.0.3",
|
|
324
|
+
"nth-check": "2.1.1",
|
|
325
|
+
"object-inspect": "1.13.4",
|
|
326
|
+
"object-keys": "1.1.1",
|
|
182
327
|
"on-finished": "2.4.1",
|
|
328
|
+
"on-headers": "1.1.0",
|
|
329
|
+
"once": "1.4.0",
|
|
330
|
+
"p-cancelable": "4.0.1",
|
|
331
|
+
"p-map": "7.0.4",
|
|
183
332
|
"packageurl-js": "1.0.2",
|
|
184
333
|
"parse-conflict-json": "5.0.1",
|
|
334
|
+
"parse5": "8.0.0",
|
|
335
|
+
"parse5-htmlparser2-tree-adapter": "8.0.0",
|
|
336
|
+
"parse5-parser-stream": "8.0.0",
|
|
337
|
+
"parseurl": "1.3.3",
|
|
338
|
+
"path-scurry": "2.0.1",
|
|
339
|
+
"pg-connection-string": "2.9.1",
|
|
340
|
+
"picocolors": "1.1.1",
|
|
341
|
+
"picomatch": "4.0.3",
|
|
185
342
|
"poku": "3.0.2",
|
|
186
|
-
"
|
|
343
|
+
"postcss-selector-parser": "7.1.0",
|
|
344
|
+
"prebuild-install": "7.1.3",
|
|
187
345
|
"proc-log": "6.0.0",
|
|
188
346
|
"proggy": "4.0.0",
|
|
189
|
-
"promise-
|
|
190
|
-
"promise-call-limit": "3.0.2",
|
|
347
|
+
"promise-retry": "2.0.1",
|
|
191
348
|
"properties-reader": "2.3.0",
|
|
349
|
+
"pump": "3.0.3",
|
|
350
|
+
"qs": "6.14.0",
|
|
351
|
+
"quick-lru": "5.1.1",
|
|
352
|
+
"raw-body": "3.0.2",
|
|
353
|
+
"rc": "1.2.8",
|
|
354
|
+
"read-cmd-shim": "6.0.0",
|
|
192
355
|
"read-package-json-fast": "5.0.0",
|
|
356
|
+
"require-from-string": "2.0.2",
|
|
357
|
+
"resolve-alpn": "1.2.1",
|
|
193
358
|
"responselike": "4.0.2",
|
|
359
|
+
"retry": "0.13.1",
|
|
360
|
+
"retry-as-promised": "7.1.1",
|
|
361
|
+
"roarr": "2.15.4",
|
|
362
|
+
"safe-buffer": "5.2.1",
|
|
363
|
+
"safer-buffer": "2.1.2",
|
|
364
|
+
"sax": "1.4.3",
|
|
194
365
|
"semver": "7.7.3",
|
|
366
|
+
"semver-compare": "1.0.0",
|
|
195
367
|
"sequelize": "6.37.7",
|
|
368
|
+
"sequelize-pool": "8.0.1",
|
|
369
|
+
"serialize-error": "12.0.0",
|
|
370
|
+
"setprototypeof": "1.2.0",
|
|
371
|
+
"side-channel": "1.1.0",
|
|
372
|
+
"side-channel-list": "1.0.0",
|
|
373
|
+
"side-channel-map": "1.0.1",
|
|
374
|
+
"side-channel-weakmap": "1.0.2",
|
|
196
375
|
"signal-exit": "4.1.0",
|
|
376
|
+
"simple-concat": "1.0.1",
|
|
377
|
+
"simple-get": "4.0.1",
|
|
378
|
+
"slice-ansi": "7.1.2",
|
|
379
|
+
"smart-buffer": "4.2.0",
|
|
380
|
+
"socks": "2.8.7",
|
|
381
|
+
"socks-proxy-agent": "8.0.5",
|
|
382
|
+
"spdx-correct": "3.2.0",
|
|
383
|
+
"spdx-exceptions": "2.5.0",
|
|
384
|
+
"spdx-expression-parse": "4.0.0",
|
|
385
|
+
"spdx-license-ids": "3.0.22",
|
|
197
386
|
"sprintf-js": "1.1.3",
|
|
198
387
|
"sqlite3": "npm:@appthreat/sqlite3@6.0.9",
|
|
199
388
|
"ssri": "13.0.0",
|
|
200
389
|
"statuses": "2.0.2",
|
|
201
|
-
"
|
|
390
|
+
"streamx": "2.23.0",
|
|
391
|
+
"string-width": "8.1.0",
|
|
392
|
+
"strip-ansi": "7.1.2",
|
|
393
|
+
"strip-json-comments": "5.0.3",
|
|
202
394
|
"table": "6.9.0",
|
|
203
|
-
"
|
|
395
|
+
"tagged-tag": "1.0.0",
|
|
396
|
+
"tar": "7.5.2",
|
|
397
|
+
"tar-fs": "3.1.1",
|
|
398
|
+
"tar-stream": "3.1.7",
|
|
399
|
+
"text-decoder": "1.2.3",
|
|
400
|
+
"tinyglobby": "0.2.15",
|
|
401
|
+
"toidentifier": "1.0.1",
|
|
402
|
+
"toposort-class": "1.0.1",
|
|
204
403
|
"treeverse": "3.0.0",
|
|
205
|
-
"
|
|
404
|
+
"tunnel-agent": "0.6.0",
|
|
405
|
+
"type-fest": "5.2.0",
|
|
406
|
+
"type-is": "2.0.1",
|
|
206
407
|
"typescript": "5.9.3",
|
|
408
|
+
"undici": "7.16.0",
|
|
409
|
+
"undici-types": "7.16.0",
|
|
207
410
|
"unique-filename": "5.0.0",
|
|
208
411
|
"unique-slug": "6.0.0",
|
|
209
|
-
"
|
|
412
|
+
"unpipe": "1.0.0",
|
|
413
|
+
"util-deprecate": "1.0.2",
|
|
414
|
+
"utils-merge": "1.0.1",
|
|
415
|
+
"uuid": "13.0.0",
|
|
416
|
+
"validate-npm-package-license": "3.0.4",
|
|
417
|
+
"validate-npm-package-name": "7.0.0",
|
|
418
|
+
"validator": "13.15.23",
|
|
419
|
+
"vary": "1.1.2",
|
|
210
420
|
"walk-up-path": "4.0.0",
|
|
211
|
-
"
|
|
421
|
+
"whatwg-encoding": "3.1.1",
|
|
422
|
+
"whatwg-mimetype": "4.0.0",
|
|
423
|
+
"which": "6.0.0",
|
|
424
|
+
"wkx": "0.5.0",
|
|
425
|
+
"wrap-ansi": "9.0.2",
|
|
426
|
+
"wrappy": "1.0.2",
|
|
212
427
|
"write-file-atomic": "7.0.0",
|
|
213
428
|
"xml-js": "1.6.11",
|
|
429
|
+
"y18n": "5.0.8",
|
|
214
430
|
"yallist": "5.0.0",
|
|
215
431
|
"yaml": "2.8.1",
|
|
216
|
-
"yargs": "
|
|
432
|
+
"yargs": "18.0.0",
|
|
433
|
+
"yargs-parser": "22.0.0",
|
|
217
434
|
"yoctocolors": "2.1.2"
|
|
218
435
|
},
|
|
219
436
|
"dependencies": {
|
|
@@ -222,73 +439,63 @@
|
|
|
222
439
|
"@iarna/toml": "2.2.5",
|
|
223
440
|
"@isaacs/string-locale-compare": "1.1.0",
|
|
224
441
|
"@npmcli/fs": "5.0.0",
|
|
225
|
-
"@npmcli/
|
|
226
|
-
"@npmcli/map-workspaces": "5.0.1",
|
|
442
|
+
"@npmcli/map-workspaces": "5.0.3",
|
|
227
443
|
"@npmcli/name-from-folder": "4.0.0",
|
|
228
|
-
"@npmcli/package-json": "7.0.
|
|
444
|
+
"@npmcli/package-json": "7.0.4",
|
|
229
445
|
"@npmcli/query": "5.0.0",
|
|
230
|
-
"@npmcli/redact": "4.0.0",
|
|
231
446
|
"ajv": "8.17.1",
|
|
232
447
|
"ajv-formats": "3.0.1",
|
|
233
448
|
"bin-links": "6.0.0",
|
|
234
449
|
"cheerio": "1.1.2",
|
|
235
450
|
"common-ancestor-path": "1.0.1",
|
|
236
451
|
"edn-data": "1.1.2",
|
|
237
|
-
"
|
|
238
|
-
"glob": "11.0.3",
|
|
452
|
+
"glob": "13.0.0",
|
|
239
453
|
"global-agent": "3.0.0",
|
|
240
|
-
"got": "14.6.
|
|
241
|
-
"hosted-git-info": "9.0.2",
|
|
454
|
+
"got": "14.6.5",
|
|
242
455
|
"iconv-lite": "0.7.0",
|
|
243
456
|
"json-stringify-nice": "1.1.4",
|
|
244
457
|
"jws": "4.0.0",
|
|
245
|
-
"
|
|
458
|
+
"keyv": "5.5.4",
|
|
246
459
|
"node-stream-zip": "1.15.0",
|
|
247
|
-
"npm-
|
|
248
|
-
"npm-normalize-package-bin": "5.0.0",
|
|
249
|
-
"npm-package-arg": "13.0.1",
|
|
250
|
-
"npm-pick-manifest": "11.0.3",
|
|
460
|
+
"npm-package-arg": "13.0.2",
|
|
251
461
|
"packageurl-js": "1.0.2",
|
|
252
462
|
"parse-conflict-json": "5.0.1",
|
|
253
|
-
"prettify-xml": "1.2.0",
|
|
254
463
|
"proc-log": "6.0.0",
|
|
255
464
|
"proggy": "4.0.0",
|
|
256
|
-
"promise-all-reject-late": "1.0.1",
|
|
257
|
-
"promise-call-limit": "3.0.2",
|
|
258
465
|
"properties-reader": "2.3.0",
|
|
259
466
|
"read-package-json-fast": "5.0.0",
|
|
260
467
|
"semver": "7.7.3",
|
|
261
468
|
"ssri": "13.0.0",
|
|
262
469
|
"table": "6.9.0",
|
|
263
|
-
"tar": "7.5.
|
|
470
|
+
"tar": "7.5.2",
|
|
264
471
|
"treeverse": "3.0.0",
|
|
265
|
-
"uuid": "
|
|
472
|
+
"uuid": "13.0.0",
|
|
266
473
|
"walk-up-path": "4.0.0",
|
|
267
474
|
"xml-js": "1.6.11",
|
|
268
475
|
"yaml": "2.8.1",
|
|
269
|
-
"yargs": "
|
|
476
|
+
"yargs": "18.0.0",
|
|
270
477
|
"yoctocolors": "2.1.2"
|
|
271
478
|
},
|
|
272
479
|
"devDependencies": {
|
|
273
|
-
"@biomejs/biome": "2.3.
|
|
480
|
+
"@biomejs/biome": "2.3.7",
|
|
274
481
|
"poku": "3.0.2",
|
|
275
482
|
"typescript": "5.9.3"
|
|
276
483
|
},
|
|
277
484
|
"optionalDependencies": {
|
|
278
|
-
"@appthreat/atom": "2.
|
|
485
|
+
"@appthreat/atom": "2.3.0",
|
|
279
486
|
"@appthreat/cdx-proto": "1.1.4",
|
|
280
|
-
"@bufbuild/protobuf": "2.10.
|
|
281
|
-
"@cyclonedx/cdxgen-plugins-bin": "1.
|
|
282
|
-
"@cyclonedx/cdxgen-plugins-bin-darwin-amd64": "1.
|
|
283
|
-
"@cyclonedx/cdxgen-plugins-bin-darwin-arm64": "1.
|
|
284
|
-
"@cyclonedx/cdxgen-plugins-bin-linux-amd64": "1.
|
|
285
|
-
"@cyclonedx/cdxgen-plugins-bin-linux-arm": "1.
|
|
286
|
-
"@cyclonedx/cdxgen-plugins-bin-linux-arm64": "1.
|
|
287
|
-
"@cyclonedx/cdxgen-plugins-bin-linux-ppc64": "1.
|
|
288
|
-
"@cyclonedx/cdxgen-plugins-bin-linuxmusl-amd64": "1.
|
|
289
|
-
"@cyclonedx/cdxgen-plugins-bin-linuxmusl-arm64": "1.
|
|
290
|
-
"@cyclonedx/cdxgen-plugins-bin-windows-amd64": "1.
|
|
291
|
-
"@cyclonedx/cdxgen-plugins-bin-windows-arm64": "1.
|
|
487
|
+
"@bufbuild/protobuf": "2.10.1",
|
|
488
|
+
"@cyclonedx/cdxgen-plugins-bin": "1.8.0",
|
|
489
|
+
"@cyclonedx/cdxgen-plugins-bin-darwin-amd64": "1.8.0",
|
|
490
|
+
"@cyclonedx/cdxgen-plugins-bin-darwin-arm64": "1.8.0",
|
|
491
|
+
"@cyclonedx/cdxgen-plugins-bin-linux-amd64": "1.8.0",
|
|
492
|
+
"@cyclonedx/cdxgen-plugins-bin-linux-arm": "1.8.0",
|
|
493
|
+
"@cyclonedx/cdxgen-plugins-bin-linux-arm64": "1.8.0",
|
|
494
|
+
"@cyclonedx/cdxgen-plugins-bin-linux-ppc64": "1.8.0",
|
|
495
|
+
"@cyclonedx/cdxgen-plugins-bin-linuxmusl-amd64": "1.8.0",
|
|
496
|
+
"@cyclonedx/cdxgen-plugins-bin-linuxmusl-arm64": "1.8.0",
|
|
497
|
+
"@cyclonedx/cdxgen-plugins-bin-windows-amd64": "1.8.0",
|
|
498
|
+
"@cyclonedx/cdxgen-plugins-bin-windows-arm64": "1.8.0",
|
|
292
499
|
"body-parser": "2.2.0",
|
|
293
500
|
"compression": "1.8.1",
|
|
294
501
|
"connect": "3.7.0",
|
|
@@ -297,29 +504,30 @@
|
|
|
297
504
|
"sqlite3": "npm:@appthreat/sqlite3@6.0.9"
|
|
298
505
|
},
|
|
299
506
|
"engines": {
|
|
300
|
-
"node": "
|
|
507
|
+
"node": "^20 || ^22 || ^24",
|
|
301
508
|
"pnpm": ">=10"
|
|
302
509
|
},
|
|
303
510
|
"devEngines": {
|
|
304
511
|
"runtime": [
|
|
305
512
|
{
|
|
306
513
|
"name": "node",
|
|
307
|
-
"version": "24
|
|
514
|
+
"version": ">=24",
|
|
308
515
|
"onFail": "ignore"
|
|
309
516
|
},
|
|
310
517
|
{
|
|
311
518
|
"name": "bun",
|
|
312
|
-
"version": "1.3.
|
|
519
|
+
"version": "1.3.3",
|
|
313
520
|
"onFail": "ignore"
|
|
314
521
|
},
|
|
315
522
|
{
|
|
316
523
|
"name": "deno",
|
|
317
|
-
"version": "2.5.
|
|
524
|
+
"version": "2.5.6",
|
|
318
525
|
"onFail": "ignore"
|
|
319
526
|
}
|
|
320
527
|
]
|
|
321
528
|
},
|
|
322
529
|
"scripts": {
|
|
530
|
+
"dependencies": "node bin/dependencies.js",
|
|
323
531
|
"gen-types": "npx -p typescript tsc",
|
|
324
532
|
"install:frozen": "pnpm install --config.strict-dep-builds=true --frozen-lockfile --package-import-method copy",
|
|
325
533
|
"install:prod": "pnpm install --config.strict-dep-builds=true --frozen-lockfile --package-import-method copy --prod",
|