Modules/IdLE.Core/Private/Get-IdleCommandParameterNames.ps1

Set-StrictMode -Version Latest

function Get-IdleCommandParameterNames {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [ValidateNotNull()]
        [object] $Handler
    )

    # Returns a HashSet[string] of parameter names supported by the handler.
    $set = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::OrdinalIgnoreCase)

    if ($Handler -is [scriptblock]) {

        $paramBlock = $Handler.Ast.ParamBlock
        if ($null -eq $paramBlock) {
            return $set
        }

        foreach ($p in $paramBlock.Parameters) {
            # Parameter name is stored without the leading '$'
            $null = $set.Add([string]$p.Name.VariablePath.UserPath)
        }

        return $set
    }

    if ($Handler -is [System.Management.Automation.CommandInfo]) {
        foreach ($n in $Handler.Parameters.Keys) {
            $null = $set.Add([string]$n)
        }
        return $set
    }

    # Unknown handler shape: return an empty set.
    return $set
}