Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions packages/cli/install.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ function Get-PackageMetadata {
try {
$errorJson = $errorMsg | ConvertFrom-Json
if ($errorJson.error) {
Write-Error-Exit "Failed to fetch version '${versionPath}': $($errorJson.error)"
Write-Error-Exit "Failed to fetch version '${versionPath}': $($errorJson.error)`n URL: $metadataUrl"
}
} catch {
# JSON parsing failed, fall through to generic error
Expand All @@ -85,11 +85,17 @@ function Get-PackageMetadata {
# Check for error in successful response
# npm can return {"error":"..."} object or a plain string like "version not found: test"
if ($script:PackageMetadata -is [string]) {
# Plain string response means error
Write-Error-Exit "Failed to fetch version '${versionPath}': $script:PackageMetadata"
# Some registries (e.g. JFrog) may return JSON with a non-JSON content type,
# causing Invoke-RestMethod to return a raw string. Try parsing it as JSON first.
try {
$script:PackageMetadata = $script:PackageMetadata | ConvertFrom-Json
} catch {
# Not valid JSON - treat as plain string error
Write-Error-Exit "Failed to fetch version '${versionPath}': $script:PackageMetadata`n URL: $metadataUrl"
}
}
if ($script:PackageMetadata.error) {
Write-Error-Exit "Failed to fetch version '${versionPath}': $($script:PackageMetadata.error)"
Write-Error-Exit "Failed to fetch version '${versionPath}': $($script:PackageMetadata.error)`n URL: $metadataUrl"
}
}
return $script:PackageMetadata
Expand Down
10 changes: 5 additions & 5 deletions packages/cli/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -245,16 +245,16 @@ fetch_package_metadata() {
# npm can return either {"error":"..."} or a plain JSON string like "version not found: test"
if echo "$PACKAGE_METADATA" | grep -q '"error"'; then
local error_msg
error_msg=$(echo "$PACKAGE_METADATA" | grep -o '"error":"[^"]*"' | cut -d'"' -f4)
error "Failed to fetch version '${version_path}': ${error_msg:-unknown error}"
error_msg=$(echo "$PACKAGE_METADATA" | grep -o '"error" *: *"[^"]*"' | cut -d'"' -f4)
error "Failed to fetch version '${version_path}': ${error_msg:-unknown error}\n URL: $metadata_url"
fi
# Check if response is a plain error string (not a valid package object)
# Use '"version":' to match JSON property, not just the word "version"
if ! echo "$PACKAGE_METADATA" | grep -q '"version":'; then
if ! echo "$PACKAGE_METADATA" | grep -q '"version" *:'; then
# Remove surrounding quotes from the error message if present
local error_msg
error_msg=$(echo "$PACKAGE_METADATA" | sed 's/^"//;s/"$//')
error "Failed to fetch version '${version_path}': ${error_msg:-unknown error}"
error "Failed to fetch version '${version_path}': ${error_msg:-unknown error}\n URL: $metadata_url"
fi
fi
# PACKAGE_METADATA is set as a global variable, no need to echo
Expand All @@ -266,7 +266,7 @@ get_version_from_metadata() {
# Call fetch_package_metadata to populate PACKAGE_METADATA global
# Don't use command substitution as it would swallow the exit from error()
fetch_package_metadata
RESOLVED_VERSION=$(echo "$PACKAGE_METADATA" | grep -o '"version":"[^"]*"' | head -1 | cut -d'"' -f4)
RESOLVED_VERSION=$(echo "$PACKAGE_METADATA" | grep -o '"version" *: *"[^"]*"' | head -1 | cut -d'"' -f4)
if [ -z "$RESOLVED_VERSION" ]; then
error "Failed to extract version from package metadata"
fi
Expand Down
Loading