Private/Get-FylgyrBaselineFingerprintSet.ps1

function Get-FylgyrBaselineFingerprintSet {
    [CmdletBinding()]
    [OutputType([System.Collections.Generic.HashSet[string]])]
    param(
        [Parameter(Mandatory)]
        [string]$BaselinePath
    )

    if (-not (Test-Path -Path $BaselinePath -PathType Leaf)) {
        throw "Baseline file not found: $BaselinePath"
    }

    $raw = Get-Content -Path $BaselinePath -Raw
    if ([string]::IsNullOrWhiteSpace($raw)) {
        throw "Baseline file is empty: $BaselinePath"
    }

    try {
        $parsed = $raw | ConvertFrom-Json
    }
    catch {
        throw "Failed to parse baseline JSON: $($_.Exception.Message)"
    }

    $baselineResults = if ($parsed -is [System.Array]) {
        @($parsed)
    }
    elseif ($parsed -and $parsed.PSObject.Properties['results']) {
        @($parsed.results)
    }
    elseif ($parsed) {
        @($parsed)
    }
    else {
        @()
    }

    $fingerprints = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::Ordinal)
    foreach ($baselineResult in $baselineResults) {
        if (-not $baselineResult) {
            continue
        }

        if (-not $baselineResult.PSObject.Properties['CheckName'] -or
            -not $baselineResult.PSObject.Properties['Resource'] -or
            -not $baselineResult.PSObject.Properties['Detail']) {
            continue
        }

        if ($baselineResult.PSObject.Properties['Status'] -and $baselineResult.Status -eq 'Pass') {
            continue
        }

        $fingerprint = Get-FylgyrFingerprint -Result $baselineResult
        if (-not [string]::IsNullOrWhiteSpace($fingerprint)) {
            $fingerprints.Add($fingerprint) | Out-Null
        }
    }

    return $fingerprints
}