Cidney.psm1

$ScriptPath = Split-Path $MyInvocation.MyCommand.Path

$Global:CidneyJobCount = 0
$Global:CidneyEventSubscribers = @()
$Global:CidneyEventOutput = @{}
$Global:CidneyImportedModules = @()
$Global:CidneyAddedSnapins = @()
$CidneyPipelineFunctions = [hashtable]::Synchronized(@{})


$Env:CidneyStore = Join-Path $env:LOCALAPPDATA 'Cidney'
New-Item $Env:CidneyStore -ItemType Directory -Force

#region Load Public DSL Keywords
try 
{
    Get-ChildItem (Join-Path $ScriptPath 'Keywords') -Filter *.ps1 | Select-Object -ExpandProperty FullName | 
        ForEach-Object {
            $Keyword = Split-Path $PSItem -Leaf
            . $PSItem
        }
    }
catch 
{
    Write-Warning ('{0}: {1}' -f $Keyword, $PSItem.Exception.Message)
    Continue
}
#endregion

#region Load Public Files
try 
{
    Get-ChildItem (Join-Path $ScriptPath 'Public') -Filter *.ps1 | Select-Object -ExpandProperty FullName | 
        ForEach-Object {
            $File = Split-Path $PSItem -Leaf
            . $PSItem
        }
} 
catch 
{
    Write-Warning ('{0}: {1}' -f $File, $PSItem.Exception.Message)
    Continue
}
#endregion

#region Load Private Files
try 
{
    Get-ChildItem (Join-Path $ScriptPath 'Private') -Filter *.ps1 | Select-Object -ExpandProperty FullName | 
        ForEach-Object {
            $File = Split-Path $PSItem -Leaf
            . $PSItem
        }
} 
catch 
{
    Write-Warning ('{0}: {1}' -f $File, $PSItem.Exception.Message)
    Continue
}
#endregion

$ExecutionContext.SessionState.Module.OnRemove = {
    Remove-Variable -Name CidneyPipelineCount -Force -ErrorAction SilentlyContinue
    Remove-Variable -Name CidneyPipelineFunctions -Force -ErrorAction SilentlyContinue
    Remove-Variable -Name CidneyImportedModules -Scope Global -Force -ErrorAction SilentlyContinue
    Remove-Variable -Name CidneyAddedSnapins -Scope Global -Force -ErrorAction SilentlyContinue

    Remove-Item $Env:CidneyStore -Force
}

Export-ModuleMember -Function Pipeline:
Export-ModuleMember -Function Stage:
Export-ModuleMember -Function On:
Export-ModuleMember -Function Do:
Export-ModuleMember -Function When:

Export-ModuleMember -Function Write-CidneyLog
Export-ModuleMember -Function Invoke-Cidney 
Export-ModuleMember -Function Get-CidneyPipeline
Export-ModuleMember -Function Remove-CidneyPipeline
Export-ModuleMember -Function Wait-CidneyJob
Export-ModuleMember -Function Send-Event