github.com/anchore/syft@v1.38.2/syft/pkg/cataloger/dart/package.go (about) 1 package dart 2 3 import ( 4 "context" 5 6 "github.com/anchore/packageurl-go" 7 "github.com/anchore/syft/syft/file" 8 "github.com/anchore/syft/syft/pkg" 9 "github.com/anchore/syft/syft/pkg/cataloger/internal/licenses" 10 ) 11 12 func newPubspecLockPackage(name string, raw pubspecLockPackage, locations ...file.Location) pkg.Package { 13 metadata := pkg.DartPubspecLockEntry{ 14 Name: name, 15 Version: raw.Version, 16 HostedURL: raw.getHostedURL(), 17 VcsURL: raw.getVcsURL(), 18 } 19 20 p := pkg.Package{ 21 Name: name, 22 Version: raw.Version, 23 Locations: file.NewLocationSet(locations...), 24 PURL: packageURLFromPubspecLock(metadata), 25 Language: pkg.Dart, 26 Type: pkg.DartPubPkg, 27 Metadata: metadata, 28 } 29 30 p.SetID() 31 32 return p 33 } 34 35 func newPubspecPackage(ctx context.Context, resolver file.Resolver, raw pubspecPackage, locations ...file.Location) pkg.Package { 36 var env *pkg.DartPubspecEnvironment 37 if raw.Environment.SDK != "" || raw.Environment.Flutter != "" { 38 // this is required only after pubspec v2, but might have been optional before this 39 env = &pkg.DartPubspecEnvironment{ 40 SDK: raw.Environment.SDK, 41 Flutter: raw.Environment.Flutter, 42 } 43 } 44 p := pkg.Package{ 45 Name: raw.Name, 46 Version: raw.Version, 47 Locations: file.NewLocationSet(locations...), 48 PURL: packageURLFromPubspec(raw.Name, raw.Version), 49 Language: pkg.Dart, 50 Type: pkg.DartPubPkg, 51 Metadata: pkg.DartPubspec{ 52 Homepage: raw.Homepage, 53 Repository: raw.Repository, 54 Documentation: raw.Documentation, 55 PublishTo: raw.PublishTo, 56 Environment: env, 57 Platforms: raw.Platforms, 58 IgnoredAdvisories: raw.IgnoredAdvisories, 59 }, 60 } 61 62 p.SetID() 63 64 p = licenses.RelativeToPackage(ctx, resolver, p) 65 66 return p 67 } 68 69 func packageURLFromPubspecLock(m pkg.DartPubspecLockEntry) string { 70 var qualifiers packageurl.Qualifiers 71 72 if m.HostedURL != "" { 73 qualifiers = append(qualifiers, packageurl.Qualifier{ 74 Key: "hosted_url", 75 Value: m.HostedURL, 76 }) 77 } else if m.VcsURL != "" { // Default to using Hosted if somehow both are provided 78 qualifiers = append(qualifiers, packageurl.Qualifier{ 79 Key: "vcs_url", 80 Value: m.VcsURL, 81 }) 82 } 83 84 return packageurl.NewPackageURL( 85 packageurl.TypePub, 86 "", 87 m.Name, 88 m.Version, 89 qualifiers, 90 "", 91 ).ToString() 92 } 93 94 func packageURLFromPubspec(name, version string) string { 95 var qualifiers packageurl.Qualifiers 96 97 return packageurl.NewPackageURL( 98 packageurl.TypePub, 99 "", 100 name, 101 version, 102 qualifiers, 103 "", 104 ).ToString() 105 }