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 {

        if($_ -match $Constants.AbsoluteUrlPattern) {
            $compositeUrl = $_;
        }
        else{
            # Make sure no trailing slashes come through
            $path = $_.Trim('/');

            # 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 -or
            $compositeUrl -match $Constants.QueryStringParameterPattern) {
            return $compositeUrl;
        }
        
        return "$compositeUrl/";
    };
}