feat: scoped npm support (@angular/core style paths) in extract_npm_info

This commit is contained in:
Marker689
2026-05-11 20:46:42 +03:00
parent b50c64aadb
commit 2dd26272cb
3 changed files with 64 additions and 7 deletions

View File

@@ -63,16 +63,27 @@ def extract_go_info(asset_path: str) -> tuple[str, str] | None:
def extract_npm_info(asset_path: str) -> tuple[str, str] | None:
"""Extract package name and version from an npm proxy asset path.
Path format: packages/react/-/react-18.2.0.tgz
Path format:
packages/react/-/react-18.2.0.tgz
packages/@angular/core/-/core-18.0.0.tgz (scoped)
"""
parts = asset_path.strip("/").split("/")
if len(parts) < 4 or parts[0] != PKG_PATH_PREFIX:
return None
name = parts[1]
# Last segment: <name>-<version>.tgz
# Scoped package: @scope/name
if parts[1].startswith("@"):
if len(parts) < 5:
return None
name = f"{parts[1]}/{parts[2]}"
short_name = parts[2]
else:
name = parts[1]
short_name = name
last = parts[-1]
if last.startswith(name + "-"):
raw = last[len(name) + 1 :]
if last.startswith(short_name + "-"):
raw = last[len(short_name) + 1 :]
for ext in (".tgz", ".tar.gz"):
if raw.endswith(ext):
return name, raw[: -len(ext)]