PowerShellMenus.psm1

#Get public and private function definition files.
$Public = @( Get-ChildItem -Path $PSScriptRoot\src\public\*.ps1 -ErrorAction SilentlyContinue )
$Private = @( Get-ChildItem -Path $PSScriptRoot\src\private\*.ps1 -ErrorAction SilentlyContinue )
$Classes = @( Get-ChildItem -Path $PSScriptRoot\src\classes\*.ps1 -ErrorAction SilentlyContinue )

#import all Classes
Foreach ($Class in $Classes) {
    Try {
        $ClassDataAsString = (get-Content $Class) -join "`n"
        Invoke-Expression $ClassDataAsString
    }
    catch {
        if ( $index -eq 2 ) {
            Write-Error -Message "Failed to import class $($class.fullName): $_"
        }
    }
}
#Dot source the Private files
Foreach ($import in $Private) {
    Try {
        . $import.fullname
    }
    Catch {
        Write-Error -Message "Failed to import function $($import.fullname): $_"
    }
}

$CurrentFunctions = Get-ChildItem function:
$PublicFunctions = @()
#Dot source the Public files
Foreach ($import in $Public) {
    Try {
        . $import.fullname
        $PublicFunctions += Get-ChildItem function: | Where-Object {$CurrentFunctions -notcontains $_}
    }
    Catch {
        Write-Error -Message "Failed to import function $($import.fullname): $_"
    }
}

Export-ModuleMember -Function $PublicFunctions -Alias *