Private/Resolve-OSDAppCatalogPackageVariant.ps1

function Resolve-OSDAppCatalogPackageVariant {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [AllowEmptyCollection()]
        [object[]]$Package,

        [ValidateSet('x64','arm64')]
        [string]$Architecture = (Get-OSDAppHostArchitecture)
    )

    $resolved = [System.Collections.Generic.List[object]]::new()

    foreach ($group in @($Package | Group-Object Id)) {
        $exact = @(
            $group.Group |
                Where-Object {
                    ([string]$_.Architecture).ToLowerInvariant() -eq $Architecture
                }
        )
        $neutral = @(
            $group.Group |
                Where-Object {
                    ([string]$_.Architecture).ToLowerInvariant() -eq 'any'
                }
        )

        if ($exact.Count -gt 1) {
            throw "Catalog contains more than one '$Architecture' package variant for '$($group.Name)'."
        }
        if ($neutral.Count -gt 1) {
            throw "Catalog contains more than one 'any' package variant for '$($group.Name)'."
        }

        if ($exact.Count -eq 1) {
            $resolved.Add($exact[0])
        }
        elseif ($neutral.Count -eq 1) {
            $resolved.Add($neutral[0])
        }
        else {
            throw "No compatible package variant for '$($group.Name)' on '$Architecture'. Available: $((@($group.Group.Architecture) -join ', '))"
        }
    }

    @($resolved)
}