feat: scoped npm support (@angular/core style paths) in extract_npm_info
This commit is contained in:
@@ -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)]
|
||||
|
||||
Reference in New Issue
Block a user