PSPuppetDB.psm1

param (
    [bool]$DebugModule = $false
)

# Get public and private function definition files
    $Public  = @( Get-ChildItem -Path $PSScriptRoot\Public\*.ps1 -ErrorAction SilentlyContinue )
    $Private = @( Get-ChildItem -Path $PSScriptRoot\Private\*.ps1 -ErrorAction SilentlyContinue )
    $FilesToLoad = @([object[]]$Public + [object[]]$Private) | Where-Object {$_}
    $ModuleRoot = $PSScriptRoot

# Dot source the files
# Thanks to Bartek, Constatine
# https://becomelotr.wordpress.com/2017/02/13/expensive-dot-sourcing/
    Foreach($File in $FilesToLoad)
    {
        Write-Verbose "Importing [$File]"
        Try
        {
            if ($DebugModule)
            {
                . $File.FullName
            }
            else {
                . (
                    [scriptblock]::Create(
                        [io.file]::ReadAllText($File.FullName, [Text.Encoding]::UTF8)
                    )
                )
            }
        }
        Catch
        {
            Write-Error -Message "Failed to import function $($File.fullname)"
            Write-Error $_
        }
    }

Try
{
    #Import the config
    $_PDBConfigXmlPath = Get-PDBConfigPath
    $PDBConfigProps = 'BaseUri', 'Certificate'
    $PDBConfig = [pscustomobject]@{} | Select-Object $PDBConfigProps
    if(-not (Test-Path -Path $_PDBConfigXmlPath -ErrorAction SilentlyContinue)) {
        try {
            Write-Warning "Did not find config file [$_PDBConfigXmlPath], attempting to initialize"
            Initialize-PDBConfig -Path $_PDBConfigXmlPath -ErrorAction Stop
        }
        catch {
            Write-Warning "Failed to create config file [$_PDBConfigXmlPath]: $_"
        }
    }
    else {
        $PDBConfig = Get-PDBConfig -Source Xml -ErrorAction Stop
    }
}
Catch
{
    Write-Warning "Error importing PSPuppetDB config"
    Write-Warning $_
}

Export-ModuleMember -Function $Public.BaseName