Private/MapUrlsWithHostName.ps1

. "$PSScriptRoot/Constants.ps1";

# Add default hostname to a list of relative urls
function  MapUrlsWithHostName([string]$defaultHostName, [string[]]$urls){

    # Assert parameters
    if ([string]::IsNullOrWhiteSpace($defaultHostName)) { throw "defaultHostName parameter is null or empty"; }
    if ($urls -eq $null) { throw "urls parameter is null"; }

    return $urls | Foreach-Object {

        # Make sure no trailing slashes come through
        $path = $_.Trim('/');

        # Combine url and path
        $compositeUrl = Join-Path -Path $defaultHostName -ChildPath $_;
        
        # Fix slashes
        $compositeUrl = $compositeUrl.Replace('\', '/');
        $compositeUrl = $compositeUrl.Trim('/');

        # Make sure path ends with a slash, except if extension or no path
        
        if ([string]::IsNullOrWhiteSpace($path)) {
            return "https://$compositeUrl";
        }
        if($compositeUrl -match $Constants.ExtensionPattern) {
            return "https://$compositeUrl";
        }
        
        return "https://$compositeUrl/";
    };
}