core/public/Resolve-JaxCliArgs.ps1
|
function Resolve-JaxCliArgs { [CmdletBinding()] param ( [string[]] $Args, [System.Collections.IDictionary] $Defaults ) Initialize-JaxCliParameterRegistry $definitions = Get-JaxCliParameters $lookup = @{} foreach ($definition in $definitions) { $lookup[$definition.Name] = $definition foreach ($alias in $definition.Aliases) { $lookup[$alias] = $definition } } $values = @{} if ($null -ne $Defaults) { foreach ($key in $Defaults.Keys) { $values[$key] = $Defaults[$key] } } $unknown = @() $remaining = @() if ($null -eq $Args) { $Args = @() } for ($index = 0; $index -lt $Args.Count; $index++) { $arg = $Args[$index] if (-not $arg.StartsWith('-')) { $remaining += $arg continue } $token = $arg.TrimStart('-') if ([string]::IsNullOrWhiteSpace($token)) { $remaining += $arg continue } $name = $token $value = $null if ($token.Contains('=')) { $parts = $token.Split('=', 2) $name = $parts[0] $value = $parts[1] } $normalized = $name.ToLowerInvariant() if (-not $lookup.ContainsKey($normalized)) { $unknown += $arg if ($null -eq $value -and ($index + 1) -lt $Args.Count) { $next = $Args[$index + 1] if (-not $next.StartsWith('-')) { $unknown += $next $index++ } } continue } $definition = $lookup[$normalized] if ($definition.Type -eq 'switch') { $values[$definition.Name] = Convert-JaxCliSwitchValue -Value $value continue } if ($null -eq $value -and ($index + 1) -lt $Args.Count) { $next = $Args[$index + 1] if (-not $next.StartsWith('-')) { $value = $next $index++ } } $values[$definition.Name] = $value } return @{ Values = $values Unknown = $unknown Remaining = $remaining } } |