Private/Resolve-PlumberModuleManifest.ps1

function Resolve-PlumberModuleManifest {
    <#
        .SYNOPSIS
        Resolves the module manifest for a Plumber build root.
    #>

    [CmdletBinding()]
    [OutputType([string])]
    param (
        [Parameter(Mandatory)]
        [string]
        $BuildRoot,

        [string]
        $ModuleManifest
    )

    if ($ModuleManifest) {
        if ([System.IO.Path]::IsPathRooted($ModuleManifest)) {
            return $ModuleManifest
        }

        return Join-Path $BuildRoot $ModuleManifest
    }

    $manifestFiles = @(
        Get-ChildItem $BuildRoot -File -Filter '*.psd1' |
            Sort-Object Name
    )

    if ($manifestFiles.Count -eq 0) {
        throw "No module manifest (*.psd1) was found in '$BuildRoot'. Configure ModuleManifest explicitly."
    }

    if ($manifestFiles.Count -eq 1) {
        return $manifestFiles[0].FullName
    }

    $buildRootName = Split-Path $BuildRoot -Leaf
    $expectedManifestName = "$buildRootName.psd1"
    $matchingManifest = @(
        $manifestFiles |
            Where-Object { $_.Name -eq $expectedManifestName }
    )

    if ($matchingManifest.Count -eq 1) {
        return $matchingManifest[0].FullName
    }

    $manifestNames = $manifestFiles.Name -join ', '
    throw @(
        "ModuleManifest is not configured and manifest discovery is ambiguous in '$BuildRoot'."
        "Expected '$expectedManifestName' or a single *.psd1 file."
        "Found: $manifestNames."
        'Set ModuleManifest in the Plumber config to choose the module manifest explicitly.'
    ) -join ' '
}