snyk 1.1002.0 → 1.1003.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/dist/cli/545.index.js
CHANGED
|
@@ -156848,6 +156848,7 @@ const requirements_parser_1 = __webpack_require__(13157);
|
|
|
156848
156848
|
const debug = Debug("snyk");
|
|
156849
156849
|
class PythonDepGraphBuilder {
|
|
156850
156850
|
constructor(name, requirements, metadata) {
|
|
156851
|
+
this.visitedMap = new Set();
|
|
156851
156852
|
this.requirements = requirements;
|
|
156852
156853
|
this.metadata = metadata;
|
|
156853
156854
|
this.builder = new dep_graph_1.DepGraphBuilder({ name: "pip" }, { name });
|
|
@@ -156868,26 +156869,26 @@ class PythonDepGraphBuilder {
|
|
|
156868
156869
|
return;
|
|
156869
156870
|
}
|
|
156870
156871
|
const nodeId = `${metadata.name}@${metadata.version}`;
|
|
156871
|
-
this.
|
|
156872
|
-
|
|
156873
|
-
|
|
156874
|
-
|
|
156872
|
+
if (!this.visitedMap.has(nodeId)) {
|
|
156873
|
+
this.visitedMap.add(nodeId);
|
|
156874
|
+
this.builder.addPkgNode({ name: metadata.name, version: metadata.version }, nodeId);
|
|
156875
|
+
for (const dep of metadata.dependencies) {
|
|
156876
|
+
await this.addDependenciesToDepGraph(nodeId, dep);
|
|
156877
|
+
}
|
|
156875
156878
|
}
|
|
156879
|
+
this.builder.connectDep(root, nodeId);
|
|
156876
156880
|
}
|
|
156877
156881
|
// find the best match for a dependency in found metadata files
|
|
156878
156882
|
findMetadata(dep) {
|
|
156879
|
-
const nameMatches = this.metadata
|
|
156880
|
-
if (nameMatches.length === 0) {
|
|
156883
|
+
const nameMatches = this.metadata[dep.name.toLowerCase()];
|
|
156884
|
+
if (!nameMatches || nameMatches.length === 0) {
|
|
156881
156885
|
return null;
|
|
156882
156886
|
}
|
|
156883
|
-
nameMatches.sort((v1, v2) => {
|
|
156884
|
-
return semver.rcompare(v1.version, v2.version);
|
|
156885
|
-
});
|
|
156886
156887
|
if (nameMatches.length === 1 || !dep.version) {
|
|
156887
156888
|
return nameMatches[0];
|
|
156888
156889
|
}
|
|
156889
156890
|
for (const meta of nameMatches) {
|
|
156890
|
-
if (semver.satisfies(meta.version, `${dep.specifier}${dep.version}
|
|
156891
|
+
if (semver.satisfies(meta.version, `${dep.specifier}${dep.version}`, true)) {
|
|
156891
156892
|
return meta;
|
|
156892
156893
|
}
|
|
156893
156894
|
}
|
|
@@ -156901,7 +156902,7 @@ class PythonDepGraphBuilder {
|
|
|
156901
156902
|
async function pipFilesToScannedProjects(filePathToContent) {
|
|
156902
156903
|
const scanResults = [];
|
|
156903
156904
|
const requirements = {};
|
|
156904
|
-
const metadataItems =
|
|
156905
|
+
const metadataItems = {};
|
|
156905
156906
|
for (const filepath of Object.keys(filePathToContent)) {
|
|
156906
156907
|
const fileBaseName = path.basename(filepath);
|
|
156907
156908
|
if (fileBaseName === "requirements.txt") {
|
|
@@ -156910,16 +156911,25 @@ async function pipFilesToScannedProjects(filePathToContent) {
|
|
|
156910
156911
|
else if (fileBaseName === "METADATA") {
|
|
156911
156912
|
try {
|
|
156912
156913
|
const packageInfo = (0, metadata_parser_1.getPackageInfo)(filePathToContent[filepath]);
|
|
156913
|
-
metadataItems.
|
|
156914
|
+
if (!metadataItems[packageInfo.name.toLowerCase()]) {
|
|
156915
|
+
metadataItems[packageInfo.name.toLowerCase()] = [];
|
|
156916
|
+
}
|
|
156917
|
+
metadataItems[packageInfo.name.toLowerCase()].push(packageInfo);
|
|
156914
156918
|
}
|
|
156915
156919
|
catch (err) {
|
|
156916
156920
|
debug(err.message);
|
|
156917
156921
|
}
|
|
156918
156922
|
}
|
|
156919
156923
|
}
|
|
156920
|
-
if (metadataItems.length === 0) {
|
|
156924
|
+
if (Object.keys(metadataItems).length === 0) {
|
|
156921
156925
|
return scanResults;
|
|
156922
156926
|
}
|
|
156927
|
+
// pre-sort each package name by version, descending
|
|
156928
|
+
for (const name of Object.keys(metadataItems)) {
|
|
156929
|
+
metadataItems[name].sort((v1, v2) => {
|
|
156930
|
+
return semver.rcompare(v1.version, v2.version);
|
|
156931
|
+
});
|
|
156932
|
+
}
|
|
156923
156933
|
for (const requirementsFile of Object.keys(requirements)) {
|
|
156924
156934
|
if (requirements[requirementsFile].length === 0) {
|
|
156925
156935
|
continue;
|