Skip to content

Commit 883041e

Browse files
authored
Improve support for 3 path segments NPM URLs in url2purl #167 (#170)
Signed-off-by: tdruez <tdruez@nexb.com>
1 parent d89a160 commit 883041e

4 files changed

Lines changed: 13 additions & 8 deletions

File tree

CHANGELOG.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ Changelog
77
- Drop support for Python 3.7.
88
https://github.com/package-url/packageurl-python/issues/160
99

10+
- Improve support for 3 path segments NPM URLs in ``url2purl``.
11+
https://github.com/package-url/packageurl-python/issues/167
12+
1013
0.15.6 (2024-07-25)
1114
-------------------
1215

src/packageurl/contrib/url2purl.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -143,20 +143,19 @@ def build_npm_api_purl(uri):
143143
path = unquote_plus(urlparse(uri).path)
144144
segments = [seg for seg in path.split("/") if seg]
145145

146-
if len(segments) != 2:
146+
if len(segments) < 2:
147147
return
148148

149+
# /@esbuild/freebsd-arm64/0.21.5
150+
if len(segments) == 3:
151+
return PackageURL("npm", namespace=segments[0], name=segments[1], version=segments[2])
152+
149153
# /@invisionag/eslint-config-ivx
150154
if segments[0].startswith("@"):
151-
namespace = segments[0]
152-
name = segments[1]
153-
return PackageURL("npm", namespace, name)
155+
return PackageURL("npm", namespace=segments[0], name=segments[1])
154156

155157
# /angular/1.6.6
156-
else:
157-
name = segments[0]
158-
version = segments[1]
159-
return PackageURL("npm", name=name, version=version)
158+
return PackageURL("npm", name=segments[0], version=segments[1])
160159

161160

162161
def build_npm_download_purl(uri):

tests/contrib/data/url2purl.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
"https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz": "pkg:npm/xdg-basedir@3.0.0",
8989
"https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz": "pkg:npm/yallist@2.1.2",
9090
"https://registry.npmjs.org/@theia/plugin-ext/-/plugin-ext-0.9.0-next.007f41ae.tgz": "pkg:npm/%40theia/plugin-ext@0.9.0-next.007f41ae",
91+
"https://registry.npmjs.org/@esbuild/freebsd-arm64/0.21.5": "pkg:npm/%40esbuild/freebsd-arm64@0.21.5",
9192
"https://npmjs.com/package/abbrev": "pkg:npm/abbrev",
9293
"https://npmjs.com/package/accepts/v/1.3.7": "pkg:npm/accepts@1.3.7",
9394
"https://npmjs.com/package/@angular/cli": "pkg:npm/%40angular/cli",

tests/contrib/test_purl2url.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ def test_purl2url_get_repo_url():
5858
"pkg:npm/is-npm": "https://www.npmjs.com/package/is-npm",
5959
"pkg:npm/@clayui/tooltip@3.1.0": "https://www.npmjs.com/package/@clayui/tooltip/v/3.1.0",
6060
"pkg:npm/%40clayui/tooltip@3.1.0": "https://www.npmjs.com/package/@clayui/tooltip/v/3.1.0",
61+
"pkg:npm/%40esbuild/freebsd-arm64@0.21.5": "https://www.npmjs.com/package/@esbuild/freebsd-arm64/v/0.21.5",
6162
"pkg:nuget/System.Text.Json": "https://www.nuget.org/packages/System.Text.Json",
6263
"pkg:nuget/System.Text.Json@6.0.6": "https://www.nuget.org/packages/System.Text.Json/6.0.6",
6364
"pkg:hackage/cli-extras": "https://hackage.haskell.org/package/cli-extras",
@@ -81,6 +82,7 @@ def test_purl2url_get_download_url():
8182
"pkg:npm/is-npm@1.0.0": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
8283
"pkg:npm/@clayui/tooltip@3.1.0": "https://registry.npmjs.org/@clayui/tooltip/-/tooltip-3.1.0.tgz",
8384
"pkg:npm/%40clayui/tooltip@3.1.0": "https://registry.npmjs.org/@clayui/tooltip/-/tooltip-3.1.0.tgz",
85+
"pkg:npm/%40esbuild/freebsd-arm64@0.21.5": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
8486
"pkg:hackage/cli-extras@0.2.0.0": "https://hackage.haskell.org/package/cli-extras-0.2.0.0/cli-extras-0.2.0.0.tar.gz",
8587
"pkg:nuget/System.Text.Json@6.0.6": "https://www.nuget.org/api/v2/package/System.Text.Json/6.0.6",
8688
"pkg:github/nexb/scancode-toolkit@3.1.1?version_prefix=v": "https://github.com/nexb/scancode-toolkit/archive/v3.1.1.tar.gz",

0 commit comments

Comments
 (0)