Private/Build-ScriptCache.ps1
|
function Build-ScriptCache { <# .SYNOPSIS Builds cache for a specific colorscript. The full path to the colorscript file. #> [CmdletBinding()] [OutputType([pscustomobject])] param( [Parameter(Mandatory)] [string]$ScriptPath ) $scriptName = [System.IO.Path]::GetFileNameWithoutExtension($ScriptPath) $cacheFile = Join-Path $script:CacheDir "$scriptName.cache" $result = [pscustomobject]@{ ScriptName = $scriptName CacheFile = $cacheFile Success = $false ExitCode = $null StdOut = '' StdErr = '' } if (-not [System.IO.File]::Exists($ScriptPath)) { $result.StdErr = $script:Messages.ScriptPathNotFound return $result } $execution = Invoke-ColorScriptProcess -ScriptPath $ScriptPath -ForCache $result.ExitCode = $execution.ExitCode $result.StdOut = $execution.StdOut $result.StdErr = $execution.StdErr if ($execution.Success) { try { Invoke-FileWriteAllText -Path $cacheFile -Content $execution.StdOut -Encoding $script:Utf8NoBomEncoding try { $scriptLastWrite = Get-FileLastWriteTimeUtc -Path $ScriptPath Set-FileLastWriteTimeUtc -Path $cacheFile -Timestamp $scriptLastWrite } catch { $scriptLastWrite = Get-FileLastWriteTime -Path $ScriptPath Set-FileLastWriteTime -Path $cacheFile -Timestamp $scriptLastWrite } $result.Success = $true } catch { $result.StdErr = $_.Exception.Message } } elseif (-not $result.StdErr) { $result.StdErr = ($script:Messages.ScriptExitedWithCode -f $execution.ExitCode) } return $result } |