Private/ConvertTo-PSDependencyCanaryRequiredModuleContent.ps1

<#
.SYNOPSIS
Updates module-manifest RequiredModules entries to validated versions.
#>

function ConvertTo-PSDependencyCanaryRequiredModuleContent {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)][string]$Content,
        [Parameter(Mandatory)][string]$Path,
        [Parameter(Mandatory)][System.Collections.IDictionary]$Version
    )

    $replacements = @()
    foreach ($specification in @(Get-PSDependencyCanaryRequiredModule -Content $Content -Path $Path)) {
        if (-not $Version.Contains($specification.ModuleName)) {
            throw "No resolved version was found for required module '$($specification.ModuleName)'."
        }
        $candidateVersion = [string]$Version[$specification.ModuleName]
        if ($specification.IsString -or -not $specification.VersionPair) {
            $replacements += [pscustomobject]@{
                StartOffset = $specification.EntryAst.Extent.StartOffset
                EndOffset = $specification.EntryAst.Extent.EndOffset
                Text = "@{ ModuleName = '$($specification.ModuleName)'; RequiredVersion = '$candidateVersion' }"
            }
            continue
        }
        $versionAst = Get-PSDependencyCanaryPairStringAst -Pair $specification.VersionPair
        $replacements += [pscustomobject]@{
            StartOffset = $versionAst.Extent.StartOffset
            EndOffset = $versionAst.Extent.EndOffset
            Text = "'$candidateVersion'"
        }
    }
    ConvertTo-PSDependencyCanaryReplacedContent -Content $Content -Replacement $replacements
}