src/InvokePaket.ps1

function Invoke-Paket
{

    Push-Location "$(getProjectRoot)"
    
    BootstrapPaket
    BootstrapDSCModule
    generatePaketFiles

    if(isWindows)
    {
        $paketBin = ".paket\paket.exe"
    }
    else
    {
        $paketBin = "mono .paket\paket.exe"
    }

    Invoke-ExternalCommandRealtime $paketBin $args

    clearPaketFiles

    Pop-Location

}

function BootstrapPaket
{
    Push-Location "$(GetPSForgeModuleRoot)\paket"
    if(-not (Test-Path ".\paket.exe"))
    {
        if(isWindows)
        {
            Invoke-ExternalCommand ".\paket.bootstrapper.exe"
        }
        else
        {
            Invoke-ExternalCommand  "mono" @(".\paket.bootstrapper.exe")
        }
    }
    Pop-Location
}
function clearPaketFiles
{
    Remove-Item -Recurse -Force .paket -ErrorAction SilentlyContinue
    Remove-Item -Force paket.dependencies -ErrorAction SilentlyContinue
    Remove-Item -Force paket.template -ErrorAction SilentlyContinue
}

function GeneratePaketTemplate {
    param (
        [Parameter(Mandatory=$True,Position=1)]
        $moduleName,
        [Parameter(Mandatory=$True,Position=2)]
        $moduleManifest
    )
    
        return `
@"
type file
id ${ModuleName}
version $($moduleManifest.ModuleVersion)
authors $($moduleManifest.Author)
description
    $($moduleManifest.Description)
files
    ${ModuleName}.psd1 ==> .
    DSCResources ==> DSCResources
dependencies
"@
 
    
}

function generatePaketFiles
{
    $ModuleName = GetModuleName
    
    clearPaketFiles

    $moduleManifest = GetModuleManifest
    $dependenciesManifest = GetDependenciesManifest

    New-Item -Path "paket.dependencies" | Out-Null    

    Copy-Item -Recurse "$(GetPSForgeModuleRoot)\paket" ".\.paket" | Out-Null

    if($PSVersionTable.PSVersion.Major -ge 6) {
      $utf8 = [System.Text.Encoding]::UTF8
    } else {
      $utf8 = "utf8"
    }

    ForEach($nugetFeed in $dependenciesManifest.NugetFeeds)
    {
        "source $nugetFeed" | Out-File paket.dependencies -Append -Encoding $utf8 
    }

    ForEach($nugetPackage in $dependenciesManifest.NugetPackages)
    {
        "nuget $nugetPackage" | Out-File paket.dependencies -Append -Encoding $utf8 
    }

    GeneratePaketTemplate $moduleName $moduleManifest | Out-File  paket.template -Append -Encoding $utf8

    ForEach($nugetPackage in $dependenciesManifest.NugetPackages)
    {

        " $(($nugetPackage -Split " ")[0]) == LOCKEDVERSION" | Out-File paket.template -Append -Encoding $utf8
    }

}