Private/Invoke-ColorScriptCacheOperation.ps1

function Invoke-ColorScriptCacheOperation {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)][string]$ScriptName,
        [Parameter(Mandatory)][string]$ScriptPath
    )

    $resultRecord = $null
    $warningMessage = $null
    $updated = 0
    $failed = 0

    try {
        $cacheResult = Build-ScriptCache -ScriptPath $ScriptPath
    }
    catch {
        if (-not $script:CacheDir) {
            Initialize-CacheDirectory
        }
        $cacheResult = [pscustomobject]@{
            ScriptName = $ScriptName
            CacheFile  = Join-Path -Path $script:CacheDir -ChildPath ("{0}.cache" -f $ScriptName)
            Success    = $false
            ExitCode   = $null
            StdOut     = ''
            StdErr     = $_.Exception.Message
        }
    }

    if ($cacheResult.Success) {
        $updated = 1
        $status = 'Updated'
        $message = $script:Messages.StatusCached
        $cacheExists = $true
    }
    else {
        $failed = 1
        $status = 'Failed'

        if ($cacheResult.StdErr) {
            $message = $cacheResult.StdErr
        }
        elseif ($null -ne $cacheResult.ExitCode) {
            $message = $script:Messages.ScriptExitedWithCode -f $cacheResult.ExitCode
        }
        else {
            $message = 'Cache build failed.'
        }

        $warningMessage = "Failed to cache ${ScriptName}: $message"
        $cacheExists = $false
    }

    $resultRecord = [pscustomobject]@{
        Name        = if ($cacheResult.ScriptName) { $cacheResult.ScriptName } else { $ScriptName }
        ScriptPath  = $ScriptPath
        CacheFile   = $cacheResult.CacheFile
        Status      = $status
        Message     = $message
        CacheExists = $cacheExists
        ExitCode    = $cacheResult.ExitCode
        StdOut      = $cacheResult.StdOut
        StdErr      = $cacheResult.StdErr
    }

    return [pscustomobject]@{
        Result  = $resultRecord
        Updated = $updated
        Failed  = $failed
        Warning = $warningMessage
    }
}