github.com/joey-fossa/fossa-cli@v0.7.34-0.20190708193710-569f1e8679f0/buildtools/dotnet/project_json.go (about)

     1  package dotnet
     2  
     3  import (
     4  	"github.com/fossas/fossa-cli/files"
     5  	"github.com/fossas/fossa-cli/graph"
     6  	"github.com/fossas/fossa-cli/pkg"
     7  )
     8  
     9  type Project struct {
    10  	Version      string                 `json:"version"`
    11  	Dependencies map[string]interface{} `json:"dependencies"`
    12  }
    13  
    14  func ProjectGraph(target string) (graph.Deps, error) {
    15  	var project Project
    16  	err := files.ReadJSON(&project, target)
    17  	if err != nil {
    18  		return graph.Deps{}, err
    19  	}
    20  
    21  	depMap := make(map[pkg.ID]pkg.Package)
    22  	imports := []pkg.Import{}
    23  
    24  	for name, fields := range project.Dependencies {
    25  		version := ""
    26  		switch v := fields.(type) {
    27  		case string:
    28  			version = v
    29  		case map[string]interface{}:
    30  			mapVersion, isString := v["version"].(string)
    31  			if isString {
    32  				version = mapVersion
    33  			}
    34  		}
    35  
    36  		id := pkg.ID{
    37  			Type:     pkg.NuGet,
    38  			Name:     name,
    39  			Revision: version,
    40  		}
    41  		imports = append(imports, pkg.Import{Target: name, Resolved: id})
    42  		depMap[id] = pkg.Package{ID: id}
    43  	}
    44  
    45  	return graph.Deps{
    46  		Direct:     imports,
    47  		Transitive: depMap,
    48  	}, nil
    49  }