Private/ConvertTo-PstParameterDefinition.ps1
|
function ConvertTo-PstParameterDefinition { <# .SYNOPSIS Normalizes parameter input from string or hashtable to standard format. .DESCRIPTION Accepts parameter definitions as simple strings or detailed hashtables and converts them to a standardized hashtable format for code generation. .PARAMETER ParameterInput Single parameter as string or hashtable, or array of parameters. .EXAMPLE ConvertTo-PstParameterDefinition -ParameterInput "UserId" Converts simple string to hashtable with defaults. .EXAMPLE ConvertTo-PstParameterDefinition -ParameterInput @{Name="UserId"; Type="string"; Mandatory=$true} Passes through detailed hashtable with validation. .NOTES Version: 1.0 Author: numidia Creation Date: 2025-12-01 Purpose: Normalize parameter input for code generators #> [CmdletBinding()] [OutputType([hashtable[]])] param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [AllowEmptyCollection()] $ParameterInput ) begin { Write-Debug "Begin '$($MyInvocation.MyCommand.Name)' at '$(Get-Date)'" $normalizedParams = [System.Collections.ArrayList]::new() } process { try { # Handle null or empty if ($null -eq $ParameterInput -or ($ParameterInput -is [array] -and $ParameterInput.Count -eq 0)) { Write-Verbose "No parameters provided" return @() } # Ensure array $params = if ($ParameterInput -is [array]) { $ParameterInput } else { @($ParameterInput) } foreach ($param in $params) { if ($param -is [string]) { # Simple string - convert to hashtable with defaults $normalized = @{ Name = $param Type = 'string' Mandatory = $false Pipeline = $false Position = $null HelpMessage = '' Validation = @() DefaultValue = $null } Write-Verbose "Normalized string parameter '$param' to hashtable" } elseif ($param -is [hashtable]) { # Hashtable - validate and fill defaults if (-not $param.ContainsKey('Name')) { throw "Parameter hashtable must contain 'Name' key" } $normalized = @{ Name = $param.Name Type = if ($param.ContainsKey('Type')) { $param.Type } else { 'string' } Mandatory = if ($param.ContainsKey('Mandatory')) { $param.Mandatory } else { $false } Pipeline = if ($param.ContainsKey('Pipeline')) { $param.Pipeline } else { $false } Position = if ($param.ContainsKey('Position')) { $param.Position } else { $null } HelpMessage = if ($param.ContainsKey('HelpMessage')) { $param.HelpMessage } else { '' } Validation = if ($param.ContainsKey('Validation')) { $param.Validation } else { @() } ValidationSet = if ($param.ContainsKey('ValidationSet')) { $param.ValidationSet } else { $null } DefaultValue = if ($param.ContainsKey('DefaultValue')) { $param.DefaultValue } else { $null } } Write-Verbose "Normalized hashtable parameter '$($param.Name)'" } else { throw "Parameter must be string or hashtable, got: $($param.GetType().Name)" } [void]$normalizedParams.Add($normalized) } } catch { Write-Error "Failed to normalize parameter: $($_.Exception.Message)" $PSCmdlet.ThrowTerminatingError($_) } } end { Write-Debug "End '$($MyInvocation.MyCommand.Name)' at '$(Get-Date)'" return $normalizedParams.ToArray() } } |