private/Resolve-ContextFiles.ps1
|
function Resolve-ContextFiles { <# .SYNOPSIS Processes the Context parameter and resolves paths to normalized file paths. .DESCRIPTION Takes an array of context items (FileInfo objects, strings, or other objects with FullName/Path properties) and resolves them to normalized file paths using forward slashes for cross-platform CLI compatibility. .PARAMETER Context An array of context items to process. Can be: - [System.IO.FileInfo] or [System.IO.FileSystemInfo] objects - String paths (resolved if they exist) - Objects with FullName or Path properties .OUTPUTS [string[]] Array of normalized file paths (using forward slashes). Empty array if no valid context files found. .EXAMPLE $contextFiles = Resolve-ContextFiles -Context @("file1.md", "file2.md") .EXAMPLE $contextFiles = Resolve-ContextFiles -Context (Get-ChildItem *.md) #> [CmdletBinding()] param( [Parameter()] [object[]]$Context ) $contextFiles = @() if (-not $Context) { return $contextFiles } foreach ($contextItem in $Context) { if ($contextItem -is [System.IO.FileInfo] -or $contextItem -is [System.IO.FileSystemInfo]) { Write-PSFMessage -Level Verbose -Message "Context item is a file object: $($contextItem.FullName)" if (Test-Path $contextItem.FullName) { # Normalize path to use forward slashes $normalizedContext = $contextItem.FullName -replace '\\', '/' $contextFiles += $normalizedContext } else { Write-PSFMessage -Level Warning -Message "Context file not found: $($contextItem.FullName)" } } elseif ($contextItem -is [string]) { # Resolve the path if it exists $resolvedContext = Resolve-Path -Path $contextItem -ErrorAction SilentlyContinue if ($resolvedContext) { # Normalize path to use forward slashes $normalizedContext = $resolvedContext.Path -replace '\\', '/' Write-PSFMessage -Level Verbose -Message "Context item resolved to: $normalizedContext" $contextFiles += $normalizedContext } else { Write-PSFMessage -Level Warning -Message "Context path not found: $contextItem" } } else { Write-PSFMessage -Level Verbose -Message "Context item is an object, attempting to get FullName or Path property" if ($contextItem.PSObject.Properties['FullName']) { # Normalize path to use forward slashes $normalizedContext = $contextItem.FullName -replace '\\', '/' $contextFiles += $normalizedContext } elseif ($contextItem.PSObject.Properties['Path']) { # Normalize path to use forward slashes $normalizedContext = $contextItem.Path -replace '\\', '/' $contextFiles += $normalizedContext } else { Write-PSFMessage -Level Warning -Message "Could not determine path from context object: $($contextItem.GetType().Name)" } } } return $contextFiles } |