diff --git a/lib/util/purl.js b/lib/util/purl.js index f3f3805f9069fbf190da5b4a2b21d73f5f7fd674..08b4d57d0e7971cceadd05cffb31684d139c65a7 100644 --- a/lib/util/purl.js +++ b/lib/util/purl.js @@ -25,14 +25,14 @@ function parse(input) { [remaining, purl.version] = parts; } parts = remaining.split('/'); - [purl.datasource, ...remaining] = parts; + [purl.type, ...remaining] = parts; if (remaining.length === 1) { [purl.name] = remaining; - purl.lookupName = purl.name; + purl.fullname = purl.name; } else { purl.name = remaining.pop(); purl.namespace = remaining.join('/').replace('%40', '@'); - purl.lookupName = purl.namespace + '/' + purl.name; + purl.fullname = purl.namespace + '/' + purl.name; } if (purl.qualifiers) { const allQualifiers = purl.qualifiers.split('&'); @@ -41,19 +41,18 @@ function parse(input) { const [key, val] = qualifier.split('='); purl.qualifiers[key] = val; }); - if (purl.qualifiers.repository_url) { - purl.registryUrls = purl.qualifiers.repository_url.split(','); - delete purl.qualifiers.repository_url; - } } else { purl.qualifiers = {}; } + const res = { + datasource: purl.type, + lookupName: purl.fullname, + }; + if (purl.qualifiers.repository_url) { + res.registryUrls = purl.qualifiers.repository_url.split(','); + } if (purl.subpath) { - purl.lookupType = purl.subpath; - delete purl.subpath; + res.lookupType = purl.subpath; } - delete purl.namespace; - delete purl.name; - delete purl.version; // we don't use it - return purl; + return res; } diff --git a/test/util/__snapshots__/purl.spec.js.snap b/test/util/__snapshots__/purl.spec.js.snap index fed348fa3a64c7f9c0bb8d521f7f71812dd5c03b..4bfeba0066209d5daf14b22d30eb51757a17febb 100644 --- a/test/util/__snapshots__/purl.spec.js.snap +++ b/test/util/__snapshots__/purl.spec.js.snap @@ -5,7 +5,6 @@ Object { "datasource": "github", "lookupName": "abc/def", "lookupType": "releases", - "qualifiers": Object {}, } `; @@ -13,7 +12,6 @@ exports[`util/purl parse() parses namespaced npm 1`] = ` Object { "datasource": "npm", "lookupName": "@foo/bar", - "qualifiers": Object {}, } `; @@ -21,7 +19,6 @@ exports[`util/purl parse() parses namespaced npm with version 1`] = ` Object { "datasource": "npm", "lookupName": "@foo/bar", - "qualifiers": Object {}, } `; @@ -29,9 +26,6 @@ exports[`util/purl parse() parses npm with version and 1 qualifier 1`] = ` Object { "datasource": "npm", "lookupName": "foo", - "qualifiers": Object { - "a": "b", - }, } `; @@ -39,10 +33,6 @@ exports[`util/purl parse() parses npm with version and 2 qualifiers 1`] = ` Object { "datasource": "npm", "lookupName": "foo", - "qualifiers": Object { - "a": "b", - "c": "d", - }, } `; @@ -50,7 +40,6 @@ exports[`util/purl parse() parses repository_url qualifier 1`] = ` Object { "datasource": "maven", "lookupName": "org.apache.xmlgraphics/batik-anim", - "qualifiers": Object {}, "registryUrls": Array [ "repo.spring.io/release", ], @@ -61,6 +50,5 @@ exports[`util/purl parse() parses simple npm 1`] = ` Object { "datasource": "npm", "lookupName": "foo", - "qualifiers": Object {}, } `;