core/public/Read-JaxPromptMap.ps1
|
function Read-JaxPromptMap { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string] $Prompt, [hashtable] $Default, [System.Collections.Queue] $InputQueue ) $defaultText = '' if ($null -ne $Default -and $Default.Count -gt 0) { $pairs = @() foreach ($key in $Default.Keys) { $pairs += "$key=$($Default[$key])" } $defaultText = $pairs -join ', ' } if ($null -ne $InputQueue) { if ($InputQueue.Count -gt 0) { $response = $InputQueue.Dequeue() } else { return $Default } } else { $suffix = if ([string]::IsNullOrEmpty($defaultText)) { '' } else { " [$defaultText]" } $response = Read-Host -Prompt "$Prompt$suffix" } if ([string]::IsNullOrWhiteSpace($response)) { return $Default } $trimmed = $response.Trim() if ($trimmed -in @('clear', 'none', '-')) { return @{} } $result = @{} $pairs = $trimmed -split ',' foreach ($pair in $pairs) { $entry = $pair.Trim() if ($entry.Length -eq 0) { continue } $split = $entry.Split('=', 2) if ($split.Count -eq 2) { $key = $split[0].Trim() $value = $split[1].Trim() if ($key.Length -gt 0) { $result[$key] = $value } } } if ($result.Count -eq 0) { return $Default } return $result } |