Private/Merge-DefaultAndExplicitArgs.ps1

function Merge-DefaultAndExplicitArgs {
    [CmdletBinding()]
    param (
        [Parameter(HelpMessage = "Default arguments array from Get-DefaultArgsForAction")]
        [Alias("def")]
        [Hashtable] $defaultArgs,

        [Parameter(HelpMessage = "Explicit arguments array from Get-ExplicitArgsForAction")]
        [Alias("exp")]
        [Hashtable] $explicitArgs
    )
    Write-Verbose "Merging default and explicit arguments"
    Write-Verbose " Default args count: $($defaultArgs.Keys.Count)"
    Write-Verbose " Explicit args count: $($explicitArgs.Keys.Count)"

    $result = @{}

    # Process default arguments first
    foreach ($key in $defaultArgs.Keys) {
        $value = $defaultArgs[$key]
        Write-Verbose " Adding default arg: $key = $($value | ConvertTo-Json -Compress)"
        $result[$key] = $value
    }

    # Process explicit arguments
    foreach ($key in $explicitArgs.Keys) {
        $oldValue = if ($result.ContainsKey($key)) { $result[$key] } else { "<none>" }
        $newValue = $explicitArgs[$key]
        Write-Verbose " Overriding arg: $key = $($newValue | ConvertTo-Json -Compress) (was: $oldValue)"
        $result[$key] = $newValue
    }


    return ,$result
}