diff --git a/syft/cataloger/javascript/parse_package_json.go b/syft/cataloger/javascript/parse_package_json.go index 9d6ec9060..a0ebc899f 100644 --- a/syft/cataloger/javascript/parse_package_json.go +++ b/syft/cataloger/javascript/parse_package_json.go @@ -27,6 +27,7 @@ type PackageJSON struct { Homepage string `json:"homepage"` Description string `json:"description"` Dependencies map[string]string `json:"dependencies"` + Repository Repository `json:"repository"` } type Author struct { @@ -35,10 +36,17 @@ type Author struct { URL string `json:"url" mapstruct:"url"` } +type Repository struct { + Type string `json:"type"` + URL string `json:"url"` +} + // match example: "author": "Isaac Z. Schlueter (http://blog.izs.me)" // ---> name: "Isaac Z. Schlueter" email: "i@izs.me" url: "http://blog.izs.me" var authorPattern = regexp.MustCompile(`^\s*(?P[^<(]*)(\s+<(?P.*)>)?(\s\((?P.*)\))?\s*$`) +// This method implements the UnmarshalJSON interface to help normalize +// the json structure. func (a *Author) UnmarshalJSON(b []byte) error { var authorStr string var fields map[string]string @@ -98,6 +106,7 @@ func parsePackageJSON(_ string, reader io.Reader) ([]pkg.Package, error) { Metadata: pkg.NpmMetadata{ Author: p.Author.String(), Homepage: p.Homepage, + URL: p.Repository.URL, }, }) } diff --git a/syft/cataloger/javascript/parse_package_json_test.go b/syft/cataloger/javascript/parse_package_json_test.go index ae38d37be..b135a8e27 100644 --- a/syft/cataloger/javascript/parse_package_json_test.go +++ b/syft/cataloger/javascript/parse_package_json_test.go @@ -24,6 +24,7 @@ func TestParsePackageJSON(t *testing.T) { Metadata: pkg.NpmMetadata{ Author: "Isaac Z. Schlueter (http://blog.izs.me)", Homepage: "https://docs.npmjs.com/", + URL: "https://github.com/npm/cli", }, }, }, @@ -38,6 +39,7 @@ func TestParsePackageJSON(t *testing.T) { Metadata: pkg.NpmMetadata{ Author: "Isaac Z. Schlueter (http://blog.izs.me)", Homepage: "https://docs.npmjs.com/", + URL: "https://github.com/npm/cli", }, }, }, diff --git a/syft/cataloger/javascript/test-fixtures/pkg-json/package-nested-author.json b/syft/cataloger/javascript/test-fixtures/pkg-json/package-nested-author.json index 436fca091..ac2438a11 100644 --- a/syft/cataloger/javascript/test-fixtures/pkg-json/package-nested-author.json +++ b/syft/cataloger/javascript/test-fixtures/pkg-json/package-nested-author.json @@ -8,5 +8,9 @@ "email": "i@izs.me", "url": "http://blog.izs.me" }, + "repository": { + "type": "git", + "url": "https://github.com/npm/cli" + }, "license": "Artistic-2.0" } \ No newline at end of file diff --git a/syft/pkg/npm_metadata.go b/syft/pkg/npm_metadata.go index af683120b..5b12e5cbc 100644 --- a/syft/pkg/npm_metadata.go +++ b/syft/pkg/npm_metadata.go @@ -9,4 +9,5 @@ type NpmMetadata struct { License string `mapstructure:"license" json:"license"` Homepage string `mapstructure:"homepage" json:"homepage"` Description string `mapstructure:"description" json:"description"` + URL string `mapstructure:"url" json:"url"` }