@cyclonedx/cdxgen 11.0.2 → 11.0.4
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 +2 -1
- package/data/component-tags.json +5 -2
- package/data/frameworks-list.json +3 -0
- package/lib/cli/index.js +67 -45
- package/lib/evinser/evinser.js +50 -58
- package/lib/helpers/display.js +1 -1
- package/lib/helpers/utils.js +104 -51
- package/lib/helpers/utils.test.js +75 -0
- package/package.json +6 -6
- package/types/jest.config.d.ts.map +1 -1
- package/types/lib/cli/index.d.ts.map +1 -1
- package/types/lib/helpers/utils.d.ts +8 -0
- package/types/lib/helpers/utils.d.ts.map +1 -1
- package/types/lib/managers/docker.d.ts.map +1 -1
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ Our philosophy:
|
|
|
37
37
|
|
|
38
38
|
## Documentation
|
|
39
39
|
|
|
40
|
-
Please visit our [documentation site][docs-homepage] for detailed usage, tutorials, and support documentation.
|
|
40
|
+
Please visit our [GPT app][cdxgen-gpt] or the [documentation site][docs-homepage] for detailed usage, tutorials, and support documentation.
|
|
41
41
|
|
|
42
42
|
Sections include:
|
|
43
43
|
|
|
@@ -556,3 +556,4 @@ pnpm test
|
|
|
556
556
|
[podman-github-rootless]: https://github.com/containers/podman/blob/master/docs/tutorials/rootless_tutorial.md
|
|
557
557
|
[podman-github-remote]: https://github.com/containers/podman/blob/master/docs/tutorials/mac_win_client.md
|
|
558
558
|
[swh-cdxgen]: https://archive.softwareheritage.org/browse/origin/?origin_url=https://github.com/CycloneDX/cdxgen
|
|
559
|
+
[cdxgen-gpt]: https://chatgpt.com/g/g-673bfeb4037481919be8a2cd1bf868d2-cyclonedx-generator-cdxgen
|
package/data/component-tags.json
CHANGED
|
@@ -232,7 +232,8 @@
|
|
|
232
232
|
"sbom": [
|
|
233
233
|
{
|
|
234
234
|
"test": [
|
|
235
|
-
"(junit|xmlunit|testng|
|
|
235
|
+
"(junit|xmlunit|testng|mocha|jest|test4j|xunit|coverlet|Test\\.Sdk)",
|
|
236
|
+
"^(chai)$"
|
|
236
237
|
]
|
|
237
238
|
},
|
|
238
239
|
{
|
|
@@ -244,7 +245,9 @@
|
|
|
244
245
|
{ "parse": ["(parser)"] },
|
|
245
246
|
{ "transform": ["(transformer)"] },
|
|
246
247
|
{ "telemetry": ["(OpenTelemetry)"] },
|
|
247
|
-
{ "logging": ["(Microsoft\\.Extensions\\.Logging|Log4net)"] }
|
|
248
|
+
{ "logging": ["(Microsoft\\.Extensions\\.Logging|Log4net)"] },
|
|
249
|
+
{ "ml": ["^(llama|langchain|openai)", "(generativeai)"] },
|
|
250
|
+
{ "devel": ["^(types-|typing-|virtualenv|ruff|poetry)"] }
|
|
248
251
|
],
|
|
249
252
|
"obom": [
|
|
250
253
|
{
|
package/lib/cli/index.js
CHANGED
|
@@ -92,6 +92,7 @@ import {
|
|
|
92
92
|
parseCljDep,
|
|
93
93
|
parseCloudBuildData,
|
|
94
94
|
parseCmakeLikeFile,
|
|
95
|
+
parseComposerJson,
|
|
95
96
|
parseComposerLock,
|
|
96
97
|
parseConanData,
|
|
97
98
|
parseConanLockData,
|
|
@@ -240,11 +241,12 @@ const createDefaultParentComponent = (
|
|
|
240
241
|
: dirname(path);
|
|
241
242
|
const tmpA = dirNameStr.split(sep);
|
|
242
243
|
dirNameStr = tmpA[tmpA.length - 1];
|
|
244
|
+
const compName = options.projectName || dirNameStr;
|
|
243
245
|
const parentComponent = {
|
|
244
246
|
group: options.projectGroup || "",
|
|
245
|
-
name:
|
|
247
|
+
name: compName,
|
|
246
248
|
version: `${options.projectVersion}` || "latest",
|
|
247
|
-
type: "application",
|
|
249
|
+
type: compName.endsWith(".tar") ? "container" : "application",
|
|
248
250
|
};
|
|
249
251
|
const ppurl = new PackageURL(
|
|
250
252
|
type,
|
|
@@ -816,6 +818,7 @@ function addComponent(
|
|
|
816
818
|
if (!isRootPkg) {
|
|
817
819
|
const pkgIdentifier = parsePackageJsonName(pkg.name);
|
|
818
820
|
const author = pkg.author || undefined;
|
|
821
|
+
const authors = pkg.authors || undefined;
|
|
819
822
|
const publisher = pkg.publisher || undefined;
|
|
820
823
|
let group = pkg.group || pkgIdentifier.scope;
|
|
821
824
|
// Create empty group
|
|
@@ -868,6 +871,7 @@ function addComponent(
|
|
|
868
871
|
}
|
|
869
872
|
const component = {
|
|
870
873
|
author,
|
|
874
|
+
authors,
|
|
871
875
|
publisher,
|
|
872
876
|
group,
|
|
873
877
|
name,
|
|
@@ -919,6 +923,15 @@ function addComponent(
|
|
|
919
923
|
component.authors = authorsList;
|
|
920
924
|
delete component.author;
|
|
921
925
|
}
|
|
926
|
+
// Downgrade authors section for < 1.5 :(
|
|
927
|
+
if (options.specVersion < 1.6) {
|
|
928
|
+
if (component?.authors?.length) {
|
|
929
|
+
component.author = component.authors
|
|
930
|
+
.map((a) => (a.email ? `${a.name} <${a.email}>` : a.name))
|
|
931
|
+
.join(",");
|
|
932
|
+
}
|
|
933
|
+
delete component.authors;
|
|
934
|
+
}
|
|
922
935
|
// Retain any tags
|
|
923
936
|
if (
|
|
924
937
|
options.specVersion >= 1.6 &&
|
|
@@ -957,7 +970,6 @@ function determinePackageType(pkg) {
|
|
|
957
970
|
// Retain the exact component type in certain cases.
|
|
958
971
|
if (
|
|
959
972
|
[
|
|
960
|
-
"application",
|
|
961
973
|
"container",
|
|
962
974
|
"platform",
|
|
963
975
|
"operating-system",
|
|
@@ -972,6 +984,12 @@ function determinePackageType(pkg) {
|
|
|
972
984
|
) {
|
|
973
985
|
return pkg.type;
|
|
974
986
|
}
|
|
987
|
+
if (pkg.type === "application") {
|
|
988
|
+
if (pkg?.name?.endsWith(".tar")) {
|
|
989
|
+
return "container";
|
|
990
|
+
}
|
|
991
|
+
return pkg.type;
|
|
992
|
+
}
|
|
975
993
|
if (pkg.purl) {
|
|
976
994
|
try {
|
|
977
995
|
const purl = PackageURL.fromString(pkg.purl);
|
|
@@ -2253,7 +2271,11 @@ export async function createNodejsBom(path, options) {
|
|
|
2253
2271
|
}
|
|
2254
2272
|
}
|
|
2255
2273
|
const pkgJsonLockFile = getAllFiles(path, "package-lock.json", options);
|
|
2256
|
-
const pkgJsonFile = getAllFiles(
|
|
2274
|
+
const pkgJsonFile = getAllFiles(
|
|
2275
|
+
path,
|
|
2276
|
+
`${options.multiProject ? "**/" : ""}package.json`,
|
|
2277
|
+
options,
|
|
2278
|
+
);
|
|
2257
2279
|
const yarnLockFile = getAllFiles(path, "yarn.lock", options);
|
|
2258
2280
|
const pnpmLockFile = getAllFiles(path, "pnpm-lock.yaml", options);
|
|
2259
2281
|
if (
|
|
@@ -2265,7 +2287,7 @@ export async function createNodejsBom(path, options) {
|
|
|
2265
2287
|
) {
|
|
2266
2288
|
let pkgMgr = "npm";
|
|
2267
2289
|
const supPkgMgrs = ["npm", "yarn", "yarnpkg", "pnpm", "pnpx"];
|
|
2268
|
-
const pkgData = JSON.parse(readFileSync(
|
|
2290
|
+
const pkgData = JSON.parse(readFileSync(pkgJsonFile[0], "utf8"));
|
|
2269
2291
|
const mgrData = pkgData.packageManager;
|
|
2270
2292
|
let mgr = "";
|
|
2271
2293
|
let installArgs = ["install"];
|
|
@@ -2281,9 +2303,10 @@ export async function createNodejsBom(path, options) {
|
|
|
2281
2303
|
process.env[`${pkgMgr.toUpperCase()}_INSTALL_ARGS`].split(" ");
|
|
2282
2304
|
installArgs = installArgs.concat(addArgs);
|
|
2283
2305
|
}
|
|
2284
|
-
|
|
2306
|
+
const basePath = dirname(pkgJsonFile[0]);
|
|
2307
|
+
console.log(`Executing '${pkgMgr} ${installArgs.join(" ")}' in`, basePath);
|
|
2285
2308
|
const result = spawnSync(pkgMgr, installArgs, {
|
|
2286
|
-
cwd:
|
|
2309
|
+
cwd: basePath,
|
|
2287
2310
|
encoding: "utf-8",
|
|
2288
2311
|
timeout: TIMEOUT_MS,
|
|
2289
2312
|
maxBuffer: MAX_BUFFER,
|
|
@@ -4844,57 +4867,46 @@ export function createPHPBom(path, options) {
|
|
|
4844
4867
|
options,
|
|
4845
4868
|
);
|
|
4846
4869
|
if (composerLockFiles.length) {
|
|
4870
|
+
// Look for any root composer.json to capture the parentComponent
|
|
4871
|
+
if (existsSync(join(path, "composer.json"))) {
|
|
4872
|
+
const { moduleParent } = parseComposerJson(join(path, "composer.json"));
|
|
4873
|
+
parentComponent = moduleParent;
|
|
4874
|
+
}
|
|
4847
4875
|
for (const f of composerLockFiles) {
|
|
4848
4876
|
const basePath = dirname(f);
|
|
4877
|
+
let moduleParent;
|
|
4849
4878
|
if (DEBUG_MODE) {
|
|
4850
4879
|
console.log(`Parsing ${f}`);
|
|
4851
4880
|
}
|
|
4852
|
-
|
|
4853
|
-
// Is there a composer.json to find the parent component
|
|
4854
|
-
if (
|
|
4855
|
-
|
|
4856
|
-
|
|
4857
|
-
|
|
4858
|
-
|
|
4859
|
-
|
|
4860
|
-
|
|
4861
|
-
|
|
4862
|
-
|
|
4863
|
-
|
|
4864
|
-
parentComponent.group = dirname(pkgName);
|
|
4865
|
-
if (parentComponent.group === ".") {
|
|
4866
|
-
parentComponent.group = "";
|
|
4867
|
-
}
|
|
4868
|
-
parentComponent.name = basename(pkgName);
|
|
4869
|
-
parentComponent.type = "application";
|
|
4870
|
-
parentComponent.version = composerData.version || "latest";
|
|
4871
|
-
parentComponent["bom-ref"] = decodeURIComponent(
|
|
4872
|
-
new PackageURL(
|
|
4873
|
-
"composer",
|
|
4874
|
-
parentComponent.group,
|
|
4875
|
-
parentComponent.name,
|
|
4876
|
-
parentComponent.version,
|
|
4877
|
-
null,
|
|
4878
|
-
null,
|
|
4879
|
-
).toString(),
|
|
4880
|
-
);
|
|
4881
|
+
const rootRequires = [];
|
|
4882
|
+
// Is there a composer.json to find the module parent component
|
|
4883
|
+
if (existsSync(join(basePath, "composer.json"))) {
|
|
4884
|
+
const retMap = parseComposerJson(join(basePath, "composer.json"));
|
|
4885
|
+
moduleParent = retMap.moduleParent;
|
|
4886
|
+
const rootRequires = retMap.rootRequires;
|
|
4887
|
+
// Track all the modules in a mono-repo
|
|
4888
|
+
if (!Object.keys(parentComponent).length) {
|
|
4889
|
+
parentComponent = moduleParent;
|
|
4890
|
+
} else {
|
|
4891
|
+
parentComponent.components = parentComponent.components || [];
|
|
4892
|
+
parentComponent.components.push(moduleParent);
|
|
4881
4893
|
}
|
|
4882
4894
|
}
|
|
4883
4895
|
const retMap = parseComposerLock(f, rootRequires);
|
|
4884
4896
|
if (retMap.pkgList?.length) {
|
|
4885
4897
|
pkgList = pkgList.concat(retMap.pkgList);
|
|
4886
4898
|
}
|
|
4899
|
+
if (!moduleParent) {
|
|
4900
|
+
moduleParent = createDefaultParentComponent(
|
|
4901
|
+
basePath,
|
|
4902
|
+
"composer",
|
|
4903
|
+
options,
|
|
4904
|
+
);
|
|
4905
|
+
}
|
|
4887
4906
|
if (retMap.dependenciesList) {
|
|
4888
|
-
if (!Object.keys(parentComponent).length) {
|
|
4889
|
-
parentComponent = createDefaultParentComponent(
|
|
4890
|
-
path,
|
|
4891
|
-
"composer",
|
|
4892
|
-
options,
|
|
4893
|
-
);
|
|
4894
|
-
}
|
|
4895
4907
|
// Complete the dependency tree by making parent component depend on the first level
|
|
4896
4908
|
const pdependencies = {
|
|
4897
|
-
ref:
|
|
4909
|
+
ref: moduleParent["bom-ref"],
|
|
4898
4910
|
dependsOn: [
|
|
4899
4911
|
...new Set(retMap.rootList.map((p) => p["bom-ref"])),
|
|
4900
4912
|
].sort(),
|
|
@@ -4906,6 +4918,17 @@ export function createPHPBom(path, options) {
|
|
|
4906
4918
|
);
|
|
4907
4919
|
}
|
|
4908
4920
|
}
|
|
4921
|
+
// Complete the root dependency tree
|
|
4922
|
+
if (parentComponent?.components?.length) {
|
|
4923
|
+
const parentDependsOn = parentComponent.components.map(
|
|
4924
|
+
(d) => d["bom-ref"],
|
|
4925
|
+
);
|
|
4926
|
+
dependencies = mergeDependencies(
|
|
4927
|
+
[{ ref: parentComponent["bom-ref"], dependsOn: parentDependsOn }],
|
|
4928
|
+
dependencies,
|
|
4929
|
+
parentComponent,
|
|
4930
|
+
);
|
|
4931
|
+
}
|
|
4909
4932
|
return buildBomNSData(options, pkgList, "composer", {
|
|
4910
4933
|
src: path,
|
|
4911
4934
|
filename: composerLockFiles.join(", "),
|
|
@@ -6052,7 +6075,6 @@ export async function createXBom(path, options) {
|
|
|
6052
6075
|
} catch (err) {
|
|
6053
6076
|
return undefined;
|
|
6054
6077
|
}
|
|
6055
|
-
// node.js - package.json
|
|
6056
6078
|
if (
|
|
6057
6079
|
existsSync(join(path, "package.json")) ||
|
|
6058
6080
|
existsSync(join(path, "rush.json")) ||
|
package/lib/evinser/evinser.js
CHANGED
|
@@ -28,7 +28,7 @@ const typePurlsCache = {};
|
|
|
28
28
|
*
|
|
29
29
|
* @param {Object} options Command line options
|
|
30
30
|
*/
|
|
31
|
-
export
|
|
31
|
+
export async function prepareDB(options) {
|
|
32
32
|
if (!options.dbPath.includes("memory") && !fs.existsSync(options.dbPath)) {
|
|
33
33
|
try {
|
|
34
34
|
fs.mkdirSync(options.dbPath, { recursive: true });
|
|
@@ -93,14 +93,14 @@ export const prepareDB = async (options) => {
|
|
|
93
93
|
await createAndStoreSlice(purl, purlsJars, Usages, options);
|
|
94
94
|
}
|
|
95
95
|
return { sequelize, Namespaces, Usages, DataFlows };
|
|
96
|
-
}
|
|
96
|
+
}
|
|
97
97
|
|
|
98
|
-
export
|
|
98
|
+
export async function catalogMavenDeps(
|
|
99
99
|
dirPath,
|
|
100
100
|
purlsJars,
|
|
101
101
|
Namespaces,
|
|
102
102
|
options = {},
|
|
103
|
-
)
|
|
103
|
+
) {
|
|
104
104
|
let jarNSMapping = undefined;
|
|
105
105
|
if (fs.existsSync(path.join(dirPath, "bom.json.map"))) {
|
|
106
106
|
try {
|
|
@@ -144,9 +144,9 @@ export const catalogMavenDeps = async (
|
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
|
-
}
|
|
147
|
+
}
|
|
148
148
|
|
|
149
|
-
export
|
|
149
|
+
export async function catalogGradleDeps(dirPath, purlsJars, Namespaces) {
|
|
150
150
|
console.log(
|
|
151
151
|
"About to collect jar dependencies from the gradle cache. This would take a while ...",
|
|
152
152
|
);
|
|
@@ -180,14 +180,14 @@ export const catalogGradleDeps = async (dirPath, purlsJars, Namespaces) => {
|
|
|
180
180
|
console.log(
|
|
181
181
|
"To speed up successive re-runs, pass the argument --skip-maven-collector to evinse command.",
|
|
182
182
|
);
|
|
183
|
-
}
|
|
183
|
+
}
|
|
184
184
|
|
|
185
|
-
export
|
|
185
|
+
export async function createAndStoreSlice(
|
|
186
186
|
purl,
|
|
187
187
|
purlsJars,
|
|
188
188
|
Usages,
|
|
189
189
|
options = {},
|
|
190
|
-
)
|
|
190
|
+
) {
|
|
191
191
|
const retMap = createSlice(purl, purlsJars[purl], "usages", options);
|
|
192
192
|
let sliceData = undefined;
|
|
193
193
|
if (retMap?.slicesFile && fs.existsSync(retMap.slicesFile)) {
|
|
@@ -203,14 +203,14 @@ export const createAndStoreSlice = async (
|
|
|
203
203
|
fs.rmSync(retMap.tempDir, { recursive: true, force: true });
|
|
204
204
|
}
|
|
205
205
|
return sliceData;
|
|
206
|
-
}
|
|
206
|
+
}
|
|
207
207
|
|
|
208
|
-
export
|
|
208
|
+
export async function createSlice(
|
|
209
209
|
purlOrLanguages,
|
|
210
210
|
filePath,
|
|
211
211
|
sliceType = "usages",
|
|
212
212
|
options = {},
|
|
213
|
-
)
|
|
213
|
+
) {
|
|
214
214
|
if (!filePath) {
|
|
215
215
|
return;
|
|
216
216
|
}
|
|
@@ -290,9 +290,9 @@ export const createSlice = (
|
|
|
290
290
|
slicesFile,
|
|
291
291
|
atomFile,
|
|
292
292
|
};
|
|
293
|
-
}
|
|
293
|
+
}
|
|
294
294
|
|
|
295
|
-
export
|
|
295
|
+
export function purlToLanguage(purl, filePath) {
|
|
296
296
|
let language = undefined;
|
|
297
297
|
const purlObj = PackageURL.fromString(purl);
|
|
298
298
|
switch (purlObj.type) {
|
|
@@ -312,9 +312,9 @@ export const purlToLanguage = (purl, filePath) => {
|
|
|
312
312
|
language = "c";
|
|
313
313
|
}
|
|
314
314
|
return language;
|
|
315
|
-
}
|
|
315
|
+
}
|
|
316
316
|
|
|
317
|
-
export
|
|
317
|
+
export function initFromSbom(components, language) {
|
|
318
318
|
const purlLocationMap = {};
|
|
319
319
|
const purlImportsMap = {};
|
|
320
320
|
for (const comp of components) {
|
|
@@ -344,7 +344,7 @@ export const initFromSbom = (components, language) => {
|
|
|
344
344
|
purlLocationMap,
|
|
345
345
|
purlImportsMap,
|
|
346
346
|
};
|
|
347
|
-
}
|
|
347
|
+
}
|
|
348
348
|
|
|
349
349
|
/**
|
|
350
350
|
* Function to analyze the project
|
|
@@ -352,7 +352,7 @@ export const initFromSbom = (components, language) => {
|
|
|
352
352
|
* @param {Object} dbObjMap DB and model instances
|
|
353
353
|
* @param {Object} options Command line options
|
|
354
354
|
*/
|
|
355
|
-
export
|
|
355
|
+
export async function analyzeProject(dbObjMap, options) {
|
|
356
356
|
const dirPath = options._[0] || ".";
|
|
357
357
|
const languages = options.language;
|
|
358
358
|
const language = Array.isArray(languages) ? languages[0] : languages;
|
|
@@ -502,16 +502,16 @@ export const analyzeProject = async (dbObjMap, options) => {
|
|
|
502
502
|
cryptoComponents,
|
|
503
503
|
cryptoGeneratePurls,
|
|
504
504
|
};
|
|
505
|
-
}
|
|
505
|
+
}
|
|
506
506
|
|
|
507
|
-
export
|
|
507
|
+
export async function parseObjectSlices(
|
|
508
508
|
language,
|
|
509
509
|
usageSlice,
|
|
510
510
|
dbObjMap,
|
|
511
511
|
servicesMap = {},
|
|
512
512
|
purlLocationMap = {},
|
|
513
513
|
purlImportsMap = {},
|
|
514
|
-
)
|
|
514
|
+
) {
|
|
515
515
|
if (!usageSlice || !Object.keys(usageSlice).length) {
|
|
516
516
|
return purlLocationMap;
|
|
517
517
|
}
|
|
@@ -548,7 +548,7 @@ export const parseObjectSlices = async (
|
|
|
548
548
|
servicesMap,
|
|
549
549
|
userDefinedTypesMap,
|
|
550
550
|
};
|
|
551
|
-
}
|
|
551
|
+
}
|
|
552
552
|
|
|
553
553
|
/**
|
|
554
554
|
* The implementation of this function is based on the logic proposed in the atom slices specification
|
|
@@ -562,14 +562,14 @@ export const parseObjectSlices = async (
|
|
|
562
562
|
* @param {Object} purlImportsMap Object to track package urls and their import aliases
|
|
563
563
|
* @returns
|
|
564
564
|
*/
|
|
565
|
-
export
|
|
565
|
+
export async function parseSliceUsages(
|
|
566
566
|
language,
|
|
567
567
|
userDefinedTypesMap,
|
|
568
568
|
slice,
|
|
569
569
|
dbObjMap,
|
|
570
570
|
purlLocationMap,
|
|
571
571
|
purlImportsMap,
|
|
572
|
-
)
|
|
572
|
+
) {
|
|
573
573
|
const fileName = slice.fileName;
|
|
574
574
|
const typesToLookup = new Set();
|
|
575
575
|
const lKeyOverrides = {};
|
|
@@ -764,7 +764,7 @@ export const parseSliceUsages = async (
|
|
|
764
764
|
}
|
|
765
765
|
}
|
|
766
766
|
}
|
|
767
|
-
}
|
|
767
|
+
}
|
|
768
768
|
|
|
769
769
|
/**
|
|
770
770
|
* Method to parse semantic slice data
|
|
@@ -887,11 +887,7 @@ function searchSymbolLocations(compSymbols, fileIndexes) {
|
|
|
887
887
|
return searchHits;
|
|
888
888
|
}
|
|
889
889
|
|
|
890
|
-
export
|
|
891
|
-
language,
|
|
892
|
-
userDefinedTypesMap,
|
|
893
|
-
typeFullName,
|
|
894
|
-
) => {
|
|
890
|
+
export function isFilterableType(language, userDefinedTypesMap, typeFullName) {
|
|
895
891
|
if (
|
|
896
892
|
!typeFullName ||
|
|
897
893
|
["ANY", "UNKNOWN", "VOID", "IMPORT"].includes(typeFullName.toUpperCase())
|
|
@@ -956,7 +952,7 @@ export const isFilterableType = (
|
|
|
956
952
|
return true;
|
|
957
953
|
}
|
|
958
954
|
return false;
|
|
959
|
-
}
|
|
955
|
+
}
|
|
960
956
|
|
|
961
957
|
/**
|
|
962
958
|
* Method to detect services from annotation objects in the usage slice
|
|
@@ -965,7 +961,7 @@ export const isFilterableType = (
|
|
|
965
961
|
* @param {Array} slice Usages array for each objectSlice
|
|
966
962
|
* @param {Object} servicesMap Existing service map
|
|
967
963
|
*/
|
|
968
|
-
export
|
|
964
|
+
export function detectServicesFromUsages(language, slice, servicesMap = {}) {
|
|
969
965
|
const usages = slice.usages;
|
|
970
966
|
if (!usages) {
|
|
971
967
|
return [];
|
|
@@ -1022,7 +1018,7 @@ export const detectServicesFromUsages = (language, slice, servicesMap = {}) => {
|
|
|
1022
1018
|
}
|
|
1023
1019
|
}
|
|
1024
1020
|
}
|
|
1025
|
-
}
|
|
1021
|
+
}
|
|
1026
1022
|
|
|
1027
1023
|
/**
|
|
1028
1024
|
* Method to detect services from user defined types in the usage slice
|
|
@@ -1031,11 +1027,7 @@ export const detectServicesFromUsages = (language, slice, servicesMap = {}) => {
|
|
|
1031
1027
|
* @param {Array} userDefinedTypes User defined types
|
|
1032
1028
|
* @param {Object} servicesMap Existing service map
|
|
1033
1029
|
*/
|
|
1034
|
-
export
|
|
1035
|
-
language,
|
|
1036
|
-
userDefinedTypes,
|
|
1037
|
-
servicesMap,
|
|
1038
|
-
) => {
|
|
1030
|
+
export function detectServicesFromUDT(language, userDefinedTypes, servicesMap) {
|
|
1039
1031
|
if (
|
|
1040
1032
|
["python", "py", "c", "cpp", "c++", "php"].includes(language) &&
|
|
1041
1033
|
userDefinedTypes &&
|
|
@@ -1089,9 +1081,9 @@ export const detectServicesFromUDT = (
|
|
|
1089
1081
|
}
|
|
1090
1082
|
}
|
|
1091
1083
|
}
|
|
1092
|
-
}
|
|
1084
|
+
}
|
|
1093
1085
|
|
|
1094
|
-
export
|
|
1086
|
+
export function constructServiceName(_language, slice) {
|
|
1095
1087
|
let serviceName = "service";
|
|
1096
1088
|
if (slice?.fullName) {
|
|
1097
1089
|
serviceName = slice.fullName.split(":")[0].replace(/\./g, "-");
|
|
@@ -1102,9 +1094,9 @@ export const constructServiceName = (_language, slice) => {
|
|
|
1102
1094
|
serviceName = `${serviceName}-service`;
|
|
1103
1095
|
}
|
|
1104
1096
|
return serviceName;
|
|
1105
|
-
}
|
|
1097
|
+
}
|
|
1106
1098
|
|
|
1107
|
-
export
|
|
1099
|
+
export function extractEndpoints(language, code) {
|
|
1108
1100
|
if (!code) {
|
|
1109
1101
|
return undefined;
|
|
1110
1102
|
}
|
|
@@ -1155,7 +1147,7 @@ export const extractEndpoints = (language, code) => {
|
|
|
1155
1147
|
break;
|
|
1156
1148
|
}
|
|
1157
1149
|
return endpoints;
|
|
1158
|
-
}
|
|
1150
|
+
}
|
|
1159
1151
|
|
|
1160
1152
|
/**
|
|
1161
1153
|
* Method to create the SBOM with evidence file called evinse file.
|
|
@@ -1164,7 +1156,7 @@ export const extractEndpoints = (language, code) => {
|
|
|
1164
1156
|
* @param {Object} options Command line options
|
|
1165
1157
|
* @returns
|
|
1166
1158
|
*/
|
|
1167
|
-
export
|
|
1159
|
+
export function createEvinseFile(sliceArtefacts, options) {
|
|
1168
1160
|
const {
|
|
1169
1161
|
tempDir,
|
|
1170
1162
|
usagesSlicesFile,
|
|
@@ -1311,7 +1303,7 @@ export const createEvinseFile = (sliceArtefacts, options) => {
|
|
|
1311
1303
|
}
|
|
1312
1304
|
// Redo post processing with evinse data
|
|
1313
1305
|
return bomNSData?.bomJson;
|
|
1314
|
-
}
|
|
1306
|
+
}
|
|
1315
1307
|
|
|
1316
1308
|
/**
|
|
1317
1309
|
* Method to convert dataflow slice into usable callstack frames
|
|
@@ -1324,14 +1316,14 @@ export const createEvinseFile = (sliceArtefacts, options) => {
|
|
|
1324
1316
|
* @param {Object} _purlLocationMap Object to track locations where purls are used
|
|
1325
1317
|
* @param {Object} purlImportsMap Object to track package urls and their import aliases
|
|
1326
1318
|
*/
|
|
1327
|
-
export
|
|
1319
|
+
export async function collectDataFlowFrames(
|
|
1328
1320
|
language,
|
|
1329
1321
|
userDefinedTypesMap,
|
|
1330
1322
|
dataFlowSlice,
|
|
1331
1323
|
dbObjMap,
|
|
1332
1324
|
_purlLocationMap,
|
|
1333
1325
|
purlImportsMap,
|
|
1334
|
-
)
|
|
1326
|
+
) {
|
|
1335
1327
|
const nodes = dataFlowSlice?.graph?.nodes || [];
|
|
1336
1328
|
// Cache the nodes based on the id to improve lookup
|
|
1337
1329
|
const nodeCache = {};
|
|
@@ -1438,7 +1430,7 @@ export const collectDataFlowFrames = async (
|
|
|
1438
1430
|
}
|
|
1439
1431
|
}
|
|
1440
1432
|
return dfFrames;
|
|
1441
|
-
}
|
|
1433
|
+
}
|
|
1442
1434
|
|
|
1443
1435
|
/**
|
|
1444
1436
|
* Method to convert reachable slice into usable callstack frames and crypto components
|
|
@@ -1448,7 +1440,7 @@ export const collectDataFlowFrames = async (
|
|
|
1448
1440
|
* @param {string} _language Application language
|
|
1449
1441
|
* @param {Object} reachablesSlice Reachables slice object from atom
|
|
1450
1442
|
*/
|
|
1451
|
-
export
|
|
1443
|
+
export function collectReachableFrames(_language, reachablesSlice) {
|
|
1452
1444
|
const reachableNodes = reachablesSlice?.reachables || [];
|
|
1453
1445
|
// purl key and an array of frames array
|
|
1454
1446
|
// CycloneDX 1.5 currently accepts only 1 frame as evidence
|
|
@@ -1536,7 +1528,7 @@ export const collectReachableFrames = (_language, reachablesSlice) => {
|
|
|
1536
1528
|
cryptoComponents,
|
|
1537
1529
|
cryptoGeneratePurls,
|
|
1538
1530
|
};
|
|
1539
|
-
}
|
|
1531
|
+
}
|
|
1540
1532
|
|
|
1541
1533
|
/**
|
|
1542
1534
|
* Method to pick a callstack frame as an evidence. This method is required since CycloneDX 1.5 accepts only a single frame as evidence.
|
|
@@ -1544,7 +1536,7 @@ export const collectReachableFrames = (_language, reachablesSlice) => {
|
|
|
1544
1536
|
* @param {Array} dfFrames Data flow frames
|
|
1545
1537
|
* @returns
|
|
1546
1538
|
*/
|
|
1547
|
-
export
|
|
1539
|
+
export function framePicker(dfFrames) {
|
|
1548
1540
|
if (!dfFrames || !dfFrames.length) {
|
|
1549
1541
|
return undefined;
|
|
1550
1542
|
}
|
|
@@ -1557,7 +1549,7 @@ export const framePicker = (dfFrames) => {
|
|
|
1557
1549
|
}
|
|
1558
1550
|
}
|
|
1559
1551
|
return aframe;
|
|
1560
|
-
}
|
|
1552
|
+
}
|
|
1561
1553
|
|
|
1562
1554
|
/**
|
|
1563
1555
|
* Method to simplify types. For example, arrays ending with [] could be simplified.
|
|
@@ -1565,11 +1557,11 @@ export const framePicker = (dfFrames) => {
|
|
|
1565
1557
|
* @param {string} typeFullName Full name of the type to simplify
|
|
1566
1558
|
* @returns Simplified type string
|
|
1567
1559
|
*/
|
|
1568
|
-
export
|
|
1560
|
+
export function simplifyType(typeFullName) {
|
|
1569
1561
|
return typeFullName.replace("[]", "");
|
|
1570
|
-
}
|
|
1562
|
+
}
|
|
1571
1563
|
|
|
1572
|
-
export
|
|
1564
|
+
export function getClassTypeFromSignature(language, typeFullName) {
|
|
1573
1565
|
if (["java", "jar"].includes(language) && typeFullName.includes(":")) {
|
|
1574
1566
|
typeFullName = typeFullName.split(":")[0];
|
|
1575
1567
|
const tmpA = typeFullName.split(".");
|
|
@@ -1610,11 +1602,11 @@ export const getClassTypeFromSignature = (language, typeFullName) => {
|
|
|
1610
1602
|
typeFullName = typeFullName.split("$")[0];
|
|
1611
1603
|
}
|
|
1612
1604
|
return simplifyType(typeFullName);
|
|
1613
|
-
}
|
|
1605
|
+
}
|
|
1614
1606
|
|
|
1615
|
-
|
|
1607
|
+
function addToOverrides(lKeyOverrides, atype, fileName, ausageLineNumber) {
|
|
1616
1608
|
if (!lKeyOverrides[atype]) {
|
|
1617
1609
|
lKeyOverrides[atype] = new Set();
|
|
1618
1610
|
}
|
|
1619
1611
|
lKeyOverrides[atype].add(`${fileName}#${ausageLineNumber}`);
|
|
1620
|
-
}
|
|
1612
|
+
}
|
package/lib/helpers/display.js
CHANGED
|
@@ -293,7 +293,7 @@ export function printDependencyTree(
|
|
|
293
293
|
// https://github.com/nodejs/node/issues/35973
|
|
294
294
|
console.log(highlightStr(treeGraphics.join("\n"), highlight));
|
|
295
295
|
} else {
|
|
296
|
-
console.log(
|
|
296
|
+
console.log(highlightStr(treeGraphics.slice(0, 500).join("\n"), highlight));
|
|
297
297
|
}
|
|
298
298
|
}
|
|
299
299
|
|
package/lib/helpers/utils.js
CHANGED
|
@@ -26,6 +26,7 @@ import path, {
|
|
|
26
26
|
} from "node:path";
|
|
27
27
|
import process from "node:process";
|
|
28
28
|
import { URL, fileURLToPath } from "node:url";
|
|
29
|
+
import toml from "@iarna/toml";
|
|
29
30
|
import Arborist from "@npmcli/arborist";
|
|
30
31
|
import { load } from "cheerio";
|
|
31
32
|
import { parseEDNString } from "edn-data";
|
|
@@ -45,7 +46,6 @@ import {
|
|
|
45
46
|
satisfies,
|
|
46
47
|
valid,
|
|
47
48
|
} from "semver";
|
|
48
|
-
import toml from "toml";
|
|
49
49
|
import { IriValidationStrategy, validateIri } from "validate-iri";
|
|
50
50
|
import { xml2js } from "xml-js";
|
|
51
51
|
import { getTreeWithPlugin } from "../managers/piptree.js";
|
|
@@ -538,7 +538,6 @@ export function getAllFiles(dirPath, pattern, options = {}) {
|
|
|
538
538
|
"**/.hg/**",
|
|
539
539
|
"**/.git/**",
|
|
540
540
|
"**/venv/**",
|
|
541
|
-
"**/docs/**",
|
|
542
541
|
"**/examples/**",
|
|
543
542
|
"**/site-packages/**",
|
|
544
543
|
"**/flow-typed/**",
|
|
@@ -548,6 +547,15 @@ export function getAllFiles(dirPath, pattern, options = {}) {
|
|
|
548
547
|
if (!pattern.includes("package.json")) {
|
|
549
548
|
ignoreList.push("**/node_modules/**");
|
|
550
549
|
}
|
|
550
|
+
// ignore docs only for non-lock file lookups
|
|
551
|
+
if (
|
|
552
|
+
!pattern.includes("package.json") &&
|
|
553
|
+
!pattern.includes("package-lock.json") &&
|
|
554
|
+
!pattern.includes("yarn.lock") &&
|
|
555
|
+
!pattern.includes("pnpm-lock.yaml")
|
|
556
|
+
) {
|
|
557
|
+
ignoreList.push("**/docs/**");
|
|
558
|
+
}
|
|
551
559
|
if (options?.exclude && Array.isArray(options.exclude)) {
|
|
552
560
|
ignoreList = ignoreList.concat(options.exclude);
|
|
553
561
|
}
|
|
@@ -3183,8 +3191,6 @@ export function executeParallelGradleProperties(dir, allProjectsStr) {
|
|
|
3183
3191
|
? process.env.GRADLE_ARGS_PROPERTIES.split(" ")
|
|
3184
3192
|
: [],
|
|
3185
3193
|
);
|
|
3186
|
-
|
|
3187
|
-
console.log("Executing", gradleCmd, gradleArgs.join(" "), "in", dir);
|
|
3188
3194
|
const result = spawnSync(gradleCmd, gradleArgs, {
|
|
3189
3195
|
cwd: dir,
|
|
3190
3196
|
encoding: "utf-8",
|
|
@@ -4081,7 +4087,14 @@ export async function parsePoetrylockData(lockData, lockFile, pyProjectFile) {
|
|
|
4081
4087
|
pyProjectFile = lockFile.replace("poetry.lock", "pyproject.toml");
|
|
4082
4088
|
if (existsSync(pyProjectFile)) {
|
|
4083
4089
|
const pyprojTomlFile = readFileSync(pyProjectFile, { encoding: "utf-8" });
|
|
4084
|
-
|
|
4090
|
+
let tomlData;
|
|
4091
|
+
try {
|
|
4092
|
+
tomlData = toml.parse(pyprojTomlFile);
|
|
4093
|
+
} catch (err) {
|
|
4094
|
+
console.log(
|
|
4095
|
+
`Error while parsing the file ${pyprojTomlFile}. Dependency tree information might be incorrect.`,
|
|
4096
|
+
);
|
|
4097
|
+
}
|
|
4085
4098
|
if (tomlData?.tool?.poetry) {
|
|
4086
4099
|
for (const adep of Object.keys(tomlData?.tool?.poetry?.dependencies)) {
|
|
4087
4100
|
if (
|
|
@@ -6003,57 +6016,46 @@ export async function getCratesMetadata(pkgList) {
|
|
|
6003
6016
|
* @param {Array} pkgList Package list
|
|
6004
6017
|
*/
|
|
6005
6018
|
export async function getDartMetadata(pkgList) {
|
|
6006
|
-
const RESPONSE_TYPE = "json";
|
|
6007
|
-
const HEADER_ACCEPT = "application/vnd.pub.v2+json";
|
|
6008
6019
|
const PUB_DEV_URL = process.env.PUB_DEV_URL || "https://pub.dev";
|
|
6009
|
-
const PUB_PACKAGES_URL = `${PUB_DEV_URL}/api/packages/`;
|
|
6010
6020
|
const PUB_LICENSE_REGEX = /^license:/i;
|
|
6011
|
-
const
|
|
6021
|
+
const OPTIONS = {
|
|
6022
|
+
responseType: "json",
|
|
6023
|
+
headers: {
|
|
6024
|
+
Accept: "application/vnd.pub.v2+json",
|
|
6025
|
+
},
|
|
6026
|
+
};
|
|
6012
6027
|
|
|
6028
|
+
const cdepList = [];
|
|
6013
6029
|
for (const p of pkgList) {
|
|
6014
6030
|
try {
|
|
6015
6031
|
if (DEBUG_MODE) {
|
|
6016
6032
|
console.log(`Querying ${PUB_DEV_URL} for ${p.name}`);
|
|
6017
6033
|
}
|
|
6018
|
-
const
|
|
6019
|
-
|
|
6020
|
-
|
|
6021
|
-
Accept: HEADER_ACCEPT,
|
|
6022
|
-
},
|
|
6023
|
-
});
|
|
6034
|
+
const PUB_PACKAGE_URL = `${PUB_DEV_URL}/api/packages/${p.name}/versions/${p.version}`;
|
|
6035
|
+
const PUB_PACKAGE_SCORE_URL = `${PUB_PACKAGE_URL}/score`;
|
|
6036
|
+
const res = await cdxgenAgent.get(PUB_PACKAGE_URL, OPTIONS);
|
|
6024
6037
|
if (res?.body) {
|
|
6025
|
-
const
|
|
6026
|
-
|
|
6027
|
-
|
|
6028
|
-
p.
|
|
6029
|
-
|
|
6030
|
-
|
|
6031
|
-
}
|
|
6032
|
-
|
|
6033
|
-
|
|
6034
|
-
|
|
6035
|
-
const
|
|
6036
|
-
|
|
6037
|
-
|
|
6038
|
-
|
|
6039
|
-
|
|
6040
|
-
|
|
6041
|
-
|
|
6042
|
-
|
|
6043
|
-
);
|
|
6044
|
-
if (res2?.body) {
|
|
6045
|
-
const tags = res2.body.tags;
|
|
6046
|
-
const license = tags.find((tag) => PUB_LICENSE_REGEX.test(tag));
|
|
6047
|
-
if (license) {
|
|
6048
|
-
p.license = spdxLicenses.find(
|
|
6049
|
-
(spdxLicense) =>
|
|
6050
|
-
spdxLicense.toLowerCase() ===
|
|
6051
|
-
license.replace(PUB_LICENSE_REGEX, "").toLowerCase(),
|
|
6052
|
-
);
|
|
6053
|
-
}
|
|
6038
|
+
const pubspec = res.body.pubspec;
|
|
6039
|
+
p.description = pubspec.description;
|
|
6040
|
+
if (pubspec.repository) {
|
|
6041
|
+
p.repository = { url: pubspec.repository };
|
|
6042
|
+
}
|
|
6043
|
+
if (pubspec.homepage) {
|
|
6044
|
+
p.homepage = { url: pubspec.homepage };
|
|
6045
|
+
}
|
|
6046
|
+
const score = await cdxgenAgent.get(PUB_PACKAGE_SCORE_URL, OPTIONS);
|
|
6047
|
+
if (score?.body) {
|
|
6048
|
+
const tags = score.body.tags;
|
|
6049
|
+
const license = tags.find((tag) => PUB_LICENSE_REGEX.test(tag));
|
|
6050
|
+
if (license) {
|
|
6051
|
+
p.license = spdxLicenses.find(
|
|
6052
|
+
(spdxLicense) =>
|
|
6053
|
+
spdxLicense.toLowerCase() ===
|
|
6054
|
+
license.replace(PUB_LICENSE_REGEX, "").toLowerCase(),
|
|
6055
|
+
);
|
|
6054
6056
|
}
|
|
6055
|
-
cdepList.push(p);
|
|
6056
6057
|
}
|
|
6058
|
+
cdepList.push(p);
|
|
6057
6059
|
}
|
|
6058
6060
|
} catch (err) {
|
|
6059
6061
|
cdepList.push(p);
|
|
@@ -8572,6 +8574,50 @@ export function parsePaketLockData(paketLockData, pkgLockFile) {
|
|
|
8572
8574
|
};
|
|
8573
8575
|
}
|
|
8574
8576
|
|
|
8577
|
+
/**
|
|
8578
|
+
* Parse composer.json file
|
|
8579
|
+
*
|
|
8580
|
+
* @param {string} composerJsonFile composer.json file
|
|
8581
|
+
*
|
|
8582
|
+
* @returns {Object} Object with rootRequires and parent component
|
|
8583
|
+
*/
|
|
8584
|
+
export function parseComposerJson(composerJsonFile) {
|
|
8585
|
+
const moduleParent = {};
|
|
8586
|
+
const composerData = JSON.parse(
|
|
8587
|
+
readFileSync(composerJsonFile, { encoding: "utf-8" }),
|
|
8588
|
+
);
|
|
8589
|
+
const rootRequires = composerData.require;
|
|
8590
|
+
const pkgName = composerData.name;
|
|
8591
|
+
if (pkgName) {
|
|
8592
|
+
moduleParent.group = dirname(pkgName);
|
|
8593
|
+
if (moduleParent.group === ".") {
|
|
8594
|
+
moduleParent.group = "";
|
|
8595
|
+
}
|
|
8596
|
+
moduleParent.name = basename(pkgName);
|
|
8597
|
+
moduleParent.type = "application";
|
|
8598
|
+
moduleParent.version = composerData.version;
|
|
8599
|
+
if (composerData.description) {
|
|
8600
|
+
moduleParent.description = composerData.description;
|
|
8601
|
+
}
|
|
8602
|
+
if (composerData.license) {
|
|
8603
|
+
moduleParent.licenses = getLicenses({
|
|
8604
|
+
expression: composerData.license,
|
|
8605
|
+
});
|
|
8606
|
+
}
|
|
8607
|
+
moduleParent["bom-ref"] = decodeURIComponent(
|
|
8608
|
+
new PackageURL(
|
|
8609
|
+
"composer",
|
|
8610
|
+
moduleParent.group,
|
|
8611
|
+
moduleParent.name,
|
|
8612
|
+
moduleParent.version,
|
|
8613
|
+
null,
|
|
8614
|
+
null,
|
|
8615
|
+
).toString(),
|
|
8616
|
+
);
|
|
8617
|
+
}
|
|
8618
|
+
return { rootRequires, moduleParent };
|
|
8619
|
+
}
|
|
8620
|
+
|
|
8575
8621
|
/**
|
|
8576
8622
|
* Parse composer lock file
|
|
8577
8623
|
*
|
|
@@ -8658,6 +8704,17 @@ export function parseComposerLock(pkgLockFile, rootRequires) {
|
|
|
8658
8704
|
},
|
|
8659
8705
|
},
|
|
8660
8706
|
};
|
|
8707
|
+
if (pkg?.dist?.url) {
|
|
8708
|
+
apkg.distribution = { url: pkg.dist.url };
|
|
8709
|
+
}
|
|
8710
|
+
if (pkg?.authors?.length) {
|
|
8711
|
+
apkg.authors = pkg.authors.map((a) => {
|
|
8712
|
+
return { name: a.name, email: a.email };
|
|
8713
|
+
});
|
|
8714
|
+
}
|
|
8715
|
+
if (pkg?.keywords?.length) {
|
|
8716
|
+
apkg.tags = pkg.keywords;
|
|
8717
|
+
}
|
|
8661
8718
|
if (pkg.autoload && Object.keys(pkg.autoload).length) {
|
|
8662
8719
|
const namespaces = [];
|
|
8663
8720
|
for (const aaload of Object.keys(pkg.autoload)) {
|
|
@@ -10807,11 +10864,6 @@ export function getPipFrozenTree(
|
|
|
10807
10864
|
"Install suitable version of python or set the environment variable PYTHON_CMD.",
|
|
10808
10865
|
);
|
|
10809
10866
|
}
|
|
10810
|
-
if (!result.stderr) {
|
|
10811
|
-
console.log(
|
|
10812
|
-
"Ensure the virtualenv package is installed using pip. `python -m pip install virtualenv`",
|
|
10813
|
-
);
|
|
10814
|
-
}
|
|
10815
10867
|
}
|
|
10816
10868
|
} else {
|
|
10817
10869
|
if (DEBUG_MODE) {
|
|
@@ -11678,7 +11730,8 @@ export function parseCmakeLikeFile(cmakeListFile, pkgType, options = {}) {
|
|
|
11678
11730
|
.split(")")[0]
|
|
11679
11731
|
.split(",")
|
|
11680
11732
|
.filter((v) => v.length > 1);
|
|
11681
|
-
const parentName =
|
|
11733
|
+
const parentName =
|
|
11734
|
+
tmpB.length > 0 ? tmpB[0].replace(":", "").trim() : "";
|
|
11682
11735
|
let parentVersion = undefined;
|
|
11683
11736
|
// In case of meson.build we can find the version number after the word version
|
|
11684
11737
|
// thanks to our replaces and splits
|
|
@@ -3720,7 +3720,17 @@ test("parseComposerLock", () => {
|
|
|
3720
3720
|
group: "quickbooks",
|
|
3721
3721
|
name: "v3-php-sdk",
|
|
3722
3722
|
scope: "required",
|
|
3723
|
+
tags: ["api", "http", "quickbooks", "rest", "smallbusiness"],
|
|
3723
3724
|
version: "v4.0.6.1",
|
|
3725
|
+
authors: [
|
|
3726
|
+
{
|
|
3727
|
+
email: "Hao_Lu@intuit.com",
|
|
3728
|
+
name: "hlu2",
|
|
3729
|
+
},
|
|
3730
|
+
],
|
|
3731
|
+
distribution: {
|
|
3732
|
+
url: "https://api.github.com/repos/intuit/QuickBooks-V3-PHP-SDK/zipball/fe42e409bcdc431614f1cfc80cfc4191b926f3ed",
|
|
3733
|
+
},
|
|
3724
3734
|
purl: "pkg:composer/quickbooks/v3-php-sdk@v4.0.6.1",
|
|
3725
3735
|
"bom-ref": "pkg:composer/quickbooks/v3-php-sdk@v4.0.6.1",
|
|
3726
3736
|
repository: {
|
|
@@ -3765,13 +3775,45 @@ test("parseComposerLock", () => {
|
|
|
3765
3775
|
version: "v2.4.4",
|
|
3766
3776
|
purl: "pkg:composer/amphp/amp@v2.4.4",
|
|
3767
3777
|
"bom-ref": "pkg:composer/amphp/amp@v2.4.4",
|
|
3778
|
+
authors: [
|
|
3779
|
+
{
|
|
3780
|
+
email: "rdlowrey@php.net",
|
|
3781
|
+
name: "Daniel Lowrey",
|
|
3782
|
+
},
|
|
3783
|
+
{
|
|
3784
|
+
email: "aaron@trowski.com",
|
|
3785
|
+
name: "Aaron Piotrowski",
|
|
3786
|
+
},
|
|
3787
|
+
{
|
|
3788
|
+
email: "bobwei9@hotmail.com",
|
|
3789
|
+
name: "Bob Weinand",
|
|
3790
|
+
},
|
|
3791
|
+
{
|
|
3792
|
+
email: "me@kelunik.com",
|
|
3793
|
+
name: "Niklas Keller",
|
|
3794
|
+
},
|
|
3795
|
+
],
|
|
3768
3796
|
repository: {
|
|
3769
3797
|
type: "git",
|
|
3770
3798
|
url: "https://github.com/amphp/amp.git",
|
|
3771
3799
|
reference: "1e58d53e4af390efc7813e36cd215bd82cba4b06",
|
|
3772
3800
|
},
|
|
3801
|
+
distribution: {
|
|
3802
|
+
url: "https://api.github.com/repos/amphp/amp/zipball/1e58d53e4af390efc7813e36cd215bd82cba4b06",
|
|
3803
|
+
},
|
|
3773
3804
|
license: ["MIT"],
|
|
3774
3805
|
description: "A non-blocking concurrency framework for PHP applications.",
|
|
3806
|
+
tags: [
|
|
3807
|
+
"async",
|
|
3808
|
+
"asynchronous",
|
|
3809
|
+
"awaitable",
|
|
3810
|
+
"concurrency",
|
|
3811
|
+
"event",
|
|
3812
|
+
"event-loop",
|
|
3813
|
+
"future",
|
|
3814
|
+
"non-blocking",
|
|
3815
|
+
"promise",
|
|
3816
|
+
],
|
|
3775
3817
|
properties: [
|
|
3776
3818
|
{
|
|
3777
3819
|
name: "SrcFile",
|
|
@@ -3806,6 +3848,24 @@ test("parseComposerLock", () => {
|
|
|
3806
3848
|
version: "v2.6.2",
|
|
3807
3849
|
purl: "pkg:composer/amphp/amp@v2.6.2",
|
|
3808
3850
|
"bom-ref": "pkg:composer/amphp/amp@v2.6.2",
|
|
3851
|
+
authors: [
|
|
3852
|
+
{
|
|
3853
|
+
email: "rdlowrey@php.net",
|
|
3854
|
+
name: "Daniel Lowrey",
|
|
3855
|
+
},
|
|
3856
|
+
{
|
|
3857
|
+
email: "aaron@trowski.com",
|
|
3858
|
+
name: "Aaron Piotrowski",
|
|
3859
|
+
},
|
|
3860
|
+
{
|
|
3861
|
+
email: "bobwei9@hotmail.com",
|
|
3862
|
+
name: "Bob Weinand",
|
|
3863
|
+
},
|
|
3864
|
+
{
|
|
3865
|
+
email: "me@kelunik.com",
|
|
3866
|
+
name: "Niklas Keller",
|
|
3867
|
+
},
|
|
3868
|
+
],
|
|
3809
3869
|
repository: {
|
|
3810
3870
|
type: "git",
|
|
3811
3871
|
url: "https://github.com/amphp/amp.git",
|
|
@@ -3813,6 +3873,20 @@ test("parseComposerLock", () => {
|
|
|
3813
3873
|
},
|
|
3814
3874
|
license: ["MIT"],
|
|
3815
3875
|
description: "A non-blocking concurrency framework for PHP applications.",
|
|
3876
|
+
distribution: {
|
|
3877
|
+
url: "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb",
|
|
3878
|
+
},
|
|
3879
|
+
tags: [
|
|
3880
|
+
"async",
|
|
3881
|
+
"asynchronous",
|
|
3882
|
+
"awaitable",
|
|
3883
|
+
"concurrency",
|
|
3884
|
+
"event",
|
|
3885
|
+
"event-loop",
|
|
3886
|
+
"future",
|
|
3887
|
+
"non-blocking",
|
|
3888
|
+
"promise",
|
|
3889
|
+
],
|
|
3816
3890
|
scope: "required",
|
|
3817
3891
|
properties: [
|
|
3818
3892
|
{ name: "SrcFile", value: "./test/data/composer-3.lock" },
|
|
@@ -3852,6 +3926,7 @@ test("parseComposerLock", () => {
|
|
|
3852
3926
|
license: ["Apache-2.0"],
|
|
3853
3927
|
description: "A versatile logging framework for PHP",
|
|
3854
3928
|
scope: "required",
|
|
3929
|
+
tags: ["log", "logging", "php"],
|
|
3855
3930
|
properties: [{ name: "SrcFile", value: "./test/data/composer-4.lock" }],
|
|
3856
3931
|
evidence: {
|
|
3857
3932
|
identity: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyclonedx/cdxgen",
|
|
3
|
-
"version": "11.0.
|
|
3
|
+
"version": "11.0.4",
|
|
4
4
|
"description": "Creates CycloneDX Software Bill of Materials (SBOM) from source or container image",
|
|
5
5
|
"homepage": "http://github.com/cyclonedx/cdxgen",
|
|
6
6
|
"author": "Prabhu Subramanian <prabhu@appthreat.com>",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"find-up": "7.0.0",
|
|
72
72
|
"glob": "^11.0.0",
|
|
73
73
|
"global-agent": "^3.0.0",
|
|
74
|
-
"got": "^14.4.
|
|
74
|
+
"got": "^14.4.5",
|
|
75
75
|
"iconv-lite": "^0.6.3",
|
|
76
76
|
"js-yaml": "^4.1.0",
|
|
77
77
|
"jws": "^4.0.0",
|
|
@@ -83,11 +83,11 @@
|
|
|
83
83
|
"ssri": "^12.0.0",
|
|
84
84
|
"table": "^6.8.2",
|
|
85
85
|
"tar": "^7.4.3",
|
|
86
|
-
"toml": "^3.0.0",
|
|
87
86
|
"uuid": "^11.0.2",
|
|
88
87
|
"validate-iri": "^1.0.1",
|
|
89
88
|
"xml-js": "^1.6.11",
|
|
90
|
-
"yargs": "^17.7.2"
|
|
89
|
+
"yargs": "^17.7.2",
|
|
90
|
+
"@iarna/toml": "2.2.5"
|
|
91
91
|
},
|
|
92
92
|
"optionalDependencies": {
|
|
93
93
|
"@appthreat/atom": "2.0.25",
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
"body-parser": "^2.0.1",
|
|
104
104
|
"compression": "^1.7.5",
|
|
105
105
|
"connect": "^3.7.0",
|
|
106
|
-
"jsonata": "^2.0.
|
|
106
|
+
"jsonata": "^2.0.6",
|
|
107
107
|
"sequelize": "^6.37.4",
|
|
108
108
|
"sqlite3": "^5.1.7"
|
|
109
109
|
},
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
"devDependencies": {
|
|
118
118
|
"@biomejs/biome": "1.9.4",
|
|
119
119
|
"jest": "^29.7.0",
|
|
120
|
-
"typescript": "^5.
|
|
120
|
+
"typescript": "^5.7.2"
|
|
121
121
|
},
|
|
122
122
|
"overrides": {
|
|
123
123
|
"glob": "^11.0.0",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jest.config.d.ts","sourceRoot":"","sources":["../jest.config.js"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"jest.config.d.ts","sourceRoot":"","sources":["../jest.config.js"],"names":[],"mappings":"AAAA,yBAA0B,IAAI,CAAC;AAC/B,gCAAiC,UAAU,CAAC;AAC5C,kDAA0E;AAC1E,yCAAkD;AAClD,8BAA+B,MAAM,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/cli/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/cli/index.js"],"names":[],"mappings":"AA4wBA;;;;;;;;GAQG;AACH,gFAFW,MAAM,SAchB;AAyVD;;;;;;;GAOG;AACH,mCALW,MAAM,qBAiEhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM;;;;EAKhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM;;;;EAkBhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAs5BhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BA2ehB;AAED;;;;;;;;;;GAUG;AACH,+DAsEC;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BA6bhB;AAED;;;;;GAKG;AACH,kCAHW,MAAM,8BA+YhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAqIhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAiDhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,qBA+KhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,qBAsHhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,0CAHW,MAAM,qBAuBhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,8BAqDhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,8BA4ChB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,qCAHW,MAAM,8BA6FhB;AAED;;;;;GAKG;AACH,iDAHW,MAAM,qBAiUhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,qBAqJhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAmFhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BA4XhB;AAED;;;;;GAKG;AACH,2CAHW,MAAM;;;;;;;;;;;;;;;;;;;;GAoChB;AAED;;;;;;;;KA+DC;AAED;;;;;;GAMG;AACH,yDAuCC;AAED;;;;;;;;;GASG;AACH,2GA6BC;AAED;;;;;GAKG;AACH,0CAHW,MAAM,EAAE,8BAmclB;AAED;;;;;GAKG;AACH,iCAHW,MAAM,8BAgUhB;AAED;;;;;GAKG;AACH,gCAHW,MAAM,qBAqOhB;AAED;;;;;;GAMG;AACH,wDAFY,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CAAC,CAwHxE"}
|
|
@@ -716,6 +716,14 @@ export function parsePaketLockData(paketLockData: any, pkgLockFile: any): {
|
|
|
716
716
|
pkgList: any[];
|
|
717
717
|
dependenciesList: any[];
|
|
718
718
|
};
|
|
719
|
+
/**
|
|
720
|
+
* Parse composer.json file
|
|
721
|
+
*
|
|
722
|
+
* @param {string} composerJsonFile composer.json file
|
|
723
|
+
*
|
|
724
|
+
* @returns {Object} Object with rootRequires and parent component
|
|
725
|
+
*/
|
|
726
|
+
export function parseComposerJson(composerJsonFile: string): any;
|
|
719
727
|
/**
|
|
720
728
|
* Parse composer lock file
|
|
721
729
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/helpers/utils.js"],"names":[],"mappings":"AAyIA,8CAKC;AAqBD,yCAYC;AAED,2CAQC;AAuMD;;;;;;;GAOG;AACH,4EAoBC;AAED;;;;;;GAMG;AACH,mGAuEC;AAED;;;;;;;;GAQG;AACH,yGASC;AAgBD;;;;;;GAMG;AACH,qCAJW,MAAM,WACN,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/helpers/utils.js"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../lib/managers/docker.js"],"names":[],"mappings":"AAoDA;;GAEG;AACH,4CA6CC;AAxED,4BAA6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../lib/managers/docker.js"],"names":[],"mappings":"AAoDA;;GAEG;AACH,4CA6CC;AAxED,4BAA6C;AAC7C,kCAAmC,WAAW,CAAC;AAkFxC,iCAHI,MAAM,WACN,MAAM,iDAehB;AAqBM,6DAmBN;AAgLM,4EAsGN;AAEM,oFAwBN;AAUM;;;;;;;;EAwEN;AAsBM,2DA6KN;AAEM,2EA4FN;AAMM;;;;;;;;;;;;;GAqDN;AAEM;;;;;;;GAqGN;AAMM,8DAqIN;AAKM,4EAmGN;AAEM,+EAMN;AAEM,4EAyCN;AAEM,iFA0BN"}
|