Private/ConvertTo-PSDependencyCanaryRequirementContent.ps1
|
<# .SYNOPSIS Rewrites PSDepend requirement versions while preserving the data-file layout. #> function ConvertTo-PSDependencyCanaryRequirementContent { [CmdletBinding()] param( [Parameter(Mandatory)][string]$Content, [Parameter(Mandatory)][string]$Path, [Parameter(Mandatory)][System.Collections.IDictionary]$Version ) $hashtable = Get-PSDependencyCanaryHashtableAst -Content $Content -Path $Path $replacements = @() foreach ($pair in $hashtable.KeyValuePairs) { $moduleName = [string]$pair.Item1.Value if ($moduleName -eq 'PSDependOptions') { continue } if (-not $Version.Contains($moduleName)) { throw "No resolved version was found for build dependency '$moduleName'." } $nestedHashtable = $pair.Item2.Find( { param($node) $node -is [System.Management.Automation.Language.HashtableAst] }, $true ) $versionAst = if ($nestedHashtable) { $versionPair = Get-PSDependencyCanaryHashtablePair -Hashtable $nestedHashtable -Key 'Version' if (-not $versionPair) { throw "The '$moduleName' entry in $Path has no Version property." } Get-PSDependencyCanaryPairStringAst -Pair $versionPair } else { Get-PSDependencyCanaryPairStringAst -Pair $pair } if (-not $versionAst) { throw "The version for '$moduleName' in $Path is not a string." } $newVersion = [string]$Version[$moduleName] $replacements += [pscustomobject]@{ StartOffset = $versionAst.Extent.StartOffset EndOffset = $versionAst.Extent.EndOffset Text = "'$newVersion'" } } ConvertTo-PSDependencyCanaryReplacedContent -Content $Content -Replacement $replacements } |