core/modules/psmarkdig/psmarkdig.psm1

Set-StrictMode -Version Latest

Function Import-MarkDigLibrary{
    [OutputType([System.Boolean])]
    [CmdletBinding()]
    param()
    $installed = $false
    $Assemblies = [System.Collections.Generic.List[string]]::new()
    $MarkDigPath = ("{0}/lib" -f $PSScriptRoot)
    ## Select the correct assemblies
    if ($PSEdition -eq 'Desktop'){
        $files = [System.IO.Directory]::EnumerateFiles(("{0}/netstandard2.0" -f $MarkDigPath), "*.dll","AllDirectories")
        if($null -ne $files){
            foreach ($file in $files) {
                $Assemblies.Add($file)
            }
        }
    }
    elseif ($PSEdition -eq 'Core'){
        $files = [System.IO.Directory]::EnumerateFiles(("{0}/net8.0" -f $MarkDigPath),"*.dll","AllDirectories")
        if($null -ne $files){
            foreach ($file in $files) {
                $Assemblies.Add($file)
            }
        }
    }
    else{
        Write-Warning "Unknown PowerShell version"
    }
    #Load markdig lib
    try {
        Add-Type -LiteralPath $Assemblies | Out-Null
        Write-Verbose -Message "Markdig library installed successfully"
        $installed = $true
        return $installed
    }
    catch { throw }
}


$isInstalled = Import-MarkDigLibrary

if($isInstalled){
    #Get public functions
    $PublicFolder = Join-Path -Path $PSScriptRoot -ChildPath "public"
    $publicFunctions = (Get-ChildItem -Path $PublicFolder -Filter *.ps1 -File).BaseName
    # Import localized data
    $LocalizedDataParams = @{
        BindingVariable = 'messages';
        BaseDirectory = (Join-Path $PSScriptRoot 'Localized');
    }
    #Import localized data
    Import-LocalizedData @LocalizedDataParams;
    #Import public and private files
    $sourceFolders = @('private', 'public')
    ForEach ($folder in $sourceFolders) {
        $path = Join-Path $PSScriptRoot $folder
        If (-not (Test-Path $path)) {
            continue
        }
        $files = [System.IO.Directory]::EnumerateFiles($path,'*',[System.IO.SearchOption]::AllDirectories)
        ForEach ($file in ($files | Sort-Object)) {
            If ([System.IO.Path]::GetExtension($file) -ne '.ps1') {
                continue
            }
            . $file
        }
    }
    #Export module members
    Export-ModuleMember -Function $publicFunctions
}
else{
    Write-Warning "Unable to load psmarkdig module"
}