@@ -4,6 +4,7 @@ const debug = require('debug')('snyk');
44const path = require ( 'path' ) ;
55const Dependency = require ( './dependency' ) ;
66const parseNuspec = require ( './nuspec-parser' ) ;
7+ const _ = require ( 'lodash' ) ;
78
89function injectPath ( dep , packagesFolder ) {
910 dep . path = dep . localPath ?
@@ -25,24 +26,30 @@ function scanInstalled(installedPackages, packagesFolder) {
2526 } ) ;
2627 try {
2728 debug ( 'Scanning local installed folders' ) ;
28- debug ( 'Trying to read from installed packages folder: ' +
29- packagesFolder ) ;
29+ debug ( 'Trying to read from installed packages folder: ' + packagesFolder ) ;
3030 fs . readdirSync ( packagesFolder )
3131 . map ( function ( folderName ) {
32- return Dependency . from . folderName ( folderName ) ;
32+ try {
33+ return Dependency . from . folderName ( folderName ) ;
34+ } catch ( err ) {
35+ debug ( 'Unable to parse dependency from folder' ) ;
36+ debug ( err ) ;
37+ }
3338 } )
3439 . forEach ( function ( dep ) {
35- injectPath ( dep , packagesFolder ) ;
36- // only add a package from packages folder if version is different
37- if ( flattenedPackageList [ dep . name ] &&
38- flattenedPackageList [ dep . name ] . version !== dep . version ) {
39- // prefer found from packages folder (dep) over existing
40- debug ( 'For package ' + dep . name + ' the version ' +
41- flattenedPackageList [ dep . name ] . version +
42- ' was extracted from manifest file.' +
43- '\nWe are overwriting it with version ' + dep . version +
44- ' from the packages folder' ) ;
45- flattenedPackageList [ dep . name ] = dep ;
40+ if ( dep ) {
41+ injectPath ( dep , packagesFolder ) ;
42+ // only add a package from packages folder if version is different
43+ if ( flattenedPackageList [ dep . name ] &&
44+ flattenedPackageList [ dep . name ] . version !== dep . version ) {
45+ // prefer found from packages folder (dep) over existing
46+ debug ( 'For package ' + dep . name + ' the version ' +
47+ flattenedPackageList [ dep . name ] . version +
48+ ' was extracted from manifest file.' +
49+ '\nWe are overwriting it with version ' + dep . version +
50+ ' from the packages folder' ) ;
51+ flattenedPackageList [ dep . name ] = dep ;
52+ }
4653 }
4754 } ) ;
4855 } catch ( err ) {
@@ -52,14 +59,14 @@ function scanInstalled(installedPackages, packagesFolder) {
5259 return flattenedPackageList ;
5360}
5461
55- function fetchNugetInformationFromPackages ( flattenedPackageList , dotnetVersions ) {
62+ function fetchNugetInformationFromPackages ( flattenedPackageList , targetFramework ) {
5663 const nuspecParserChain = [ ] ;
5764 // begin collecting information from .nuget files on installed packages
5865 debug ( 'Trying to analyze .nuspec files' ) ;
5966 for ( const name in flattenedPackageList ) {
6067 const dep = flattenedPackageList [ name ] ;
6168 debug ( '...' + name ) ;
62- nuspecParserChain . push ( parseNuspec ( dep , dotnetVersions ) ) ;
69+ nuspecParserChain . push ( parseNuspec ( dep , targetFramework ) ) ;
6370 }
6471 return Promise . all ( nuspecParserChain ) ;
6572}
@@ -77,12 +84,13 @@ function processNugetInformation(nuspecResolutionChain) {
7784}
7885
7986module . exports = {
80- parse : function ( tree , fileContent , fileContentParser , dotnetVersions , packagesFolder ) {
81- tree . meta . targetFramework = dotnetVersions [ 0 ] . original ;
87+ parse : function ( tree , manifest , targetFramework , packagesFolder ) {
88+ if ( ! targetFramework ) {
89+ throw new Error ( 'No valid Dotnet target framework found' ) ;
90+ }
8291
83- const installedPackages = fileContentParser . parse ( fileContent , tree ) ;
84- const flattenedPackageList = scanInstalled ( installedPackages , packagesFolder ) ;
85- return fetchNugetInformationFromPackages ( flattenedPackageList , dotnetVersions )
92+ const flattenedPackageList = scanInstalled ( manifest , packagesFolder ) ;
93+ return fetchNugetInformationFromPackages ( flattenedPackageList , targetFramework )
8694 . then ( processNugetInformation )
8795 . then ( function buildDependencyTree ( nuspecResolutions ) {
8896 // .nuget parsing is complete, returned as array of promise resolutions
@@ -127,8 +135,6 @@ module.exports = {
127135 }
128136 }
129137 return tree ;
130- } ) . catch ( function ( err ) {
131- throw ( err ) ;
132138 } ) ;
133139 } ,
134140} ;
0 commit comments