Skip to content

Commit

Permalink
feat(checkver): improve JSONPath extraction support (#4522)
Browse files Browse the repository at this point in the history
  • Loading branch information
pratikpc authored Nov 29, 2021
1 parent 07ecd01 commit 4ec9ecc
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 17 deletions.
8 changes: 7 additions & 1 deletion bin/checkver.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,13 @@ while ($in_progress -gt 0) {
}

if ($jsonpath) {
$ver = json_path $page $jsonpath
# Return only a single value if regex is absent
$noregex = [String]::IsNullOrEmpty($regex)
# If reverse is ON and regex is ON,
# Then reverse would have no effect because regex handles reverse
# on its own
# So in this case we have to disable reverse
$ver = json_path $page $jsonpath $null ($reverse -and $noregex) $noregex
if (!$ver) {
$ver = json_path_legacy $page $jsonpath
}
Expand Down
34 changes: 18 additions & 16 deletions lib/json.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -92,31 +92,33 @@ function ConvertToPrettyJson {
}
}

function json_path([String] $json, [String] $jsonpath, [Hashtable] $substitutions) {
function json_path([String] $json, [String] $jsonpath, [Hashtable] $substitutions, [Boolean] $reverse, [Boolean] $single) {
Add-Type -Path "$psscriptroot\..\supporting\validator\bin\Newtonsoft.Json.dll"
if ($null -ne $substitutions) {
$jsonpath = substitute $jsonpath $substitutions ($jsonpath -like "*=~*")
}
try {
$obj = [Newtonsoft.Json.Linq.JObject]::Parse($json)
$obj = [Newtonsoft.Json.Linq.JValue]::Parse($json)
} catch [Newtonsoft.Json.JsonReaderException] {
try {
$obj = [Newtonsoft.Json.Linq.JArray]::Parse($json)
} catch [Newtonsoft.Json.JsonReaderException] {
return $null
}
return $null
}

try {
try {
$result = $obj.SelectToken($jsonpath, $true)
} catch [Newtonsoft.Json.JsonException] {
return $null
$result = $obj.SelectTokens($jsonpath, $true)
if ($reverse) {
# Return versions in reverse order
$result = [System.Linq.Enumerable]::Reverse($result)
}
return $result.ToString()
} catch [System.Management.Automation.MethodInvocationException] {
write-host -f DarkRed $_
return $null
if ($single) {
# Extract First value
$result = [System.Linq.Enumerable]::First($result)
# Convert first value to string
$result = $result.ToString()
} else {
$result = "$([String]::Join('\n', $result))"
}
return $result
} catch [Exception] {
Write-Host $_ -ForegroundColor DarkRed
}

return $null
Expand Down

0 comments on commit 4ec9ecc

Please sign in to comment.