Private/ConvertTo-PSDependencyCanaryChangelog.ps1

<#
.SYNOPSIS
Adds a dependency validation release entry to a Keep a Changelog document.
#>

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

    $newline = if ($Content.Contains("`r`n")) { "`r`n" } else { "`n" }
    $dependencyEntries = @(
        $Dependency.Keys |
            Sort-Object |
            ForEach-Object { "- Validated and pinned ``$_`` at ``$($Dependency[$_])``." }
    )
    $section = @(
        "## [$Version] $(Get-Date -Format 'yyyy-MM-dd')"
        ''
        '### Changed'
        ''
        $dependencyEntries
        ''
        ''
    ) -join $newline
    $firstReleaseHeading = [regex]::Match($Content, '(?m)^##\s+\[')
    if ($firstReleaseHeading.Success) { return $Content.Insert($firstReleaseHeading.Index, $section) }
    $Content.TrimEnd() + $newline + $newline + $section
}