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('/');

        if($_.StartsWith("https://")) {
            $compositeUrl = $_;
        }
        else{
            # Combine url and path
            $compositeUrl = Join-Path -Path $defaultHostName -ChildPath $_;
            $compositeUrl = "https://$compositeUrl";
        }
        
        # 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 $compositeUrl;
        }
        if($compositeUrl -match $Constants.ExtensionPattern) {
            return $compositeUrl;
        }
        
        return "$compositeUrl/";
    };
}