functions/Cache.ps1
function _SanitizeContainerName([Parameter(Mandatory=$true, ValueFromPipeline=$true)]$container) { return $container.Replace("\","_").Replace("/","_").Replace(":","_") } function Export-Cache([Parameter(Mandatory=$true,ValueFromPipeline=$true)]$data, [Parameter(Mandatory=$true)]$container, [Parameter(Mandatory=$false)]$dir = ".cache") { # check custom providers if ($container.Contains(":")) { $splits = $container.split(":") $provider = $splits[0] if ($null -ne (get-command "export-$($provider)cache" -ErrorAction Ignore)) { return & "export-$($provider)cache" $data $container.Substring($provider.length + 1) } } # default disk cache provider if ([System.IO.Path]::IsPathRooted($dir)) { $cacheDir = $dir } else { $cacheDir = Join-Path "$home\Documents\windowspowershell" $dir } $container = _SanitizeContainerName $container try { if (!(test-path $cacheDir)) { $null = new-item -ItemType directory $cacheDir -erroraction stop } } catch { throw "could not find or create cache directory '$cachedir'" } $path = "$cacheDir\$container.json" $data | ConvertTo-Json | Out-File $path -Encoding utf8 } function Import-Cache([Parameter(Mandatory=$true)]$container, [Parameter(Mandatory=$false)]$dir = ".cache") { # check custom providers if ([string]::IsNullOrEmpty($container)) { throw "container cannot be null or empty" } if ($container.Contains(":")) { $splits = $container.split(":") $provider = $splits[0] if ($null -ne (get-command "import-$($provider)cache" -ErrorAction Ignore)) { return & "import-$($provider)cache" $container.Substring($provider.length + 1) } } # default disk cache provider if ([System.IO.Path]::IsPathRooted($dir)) { $cacheDir = $dir } else { $cacheDir = Join-Path "$home\Documents\windowspowershell" $dir } $container = _SanitizeContainerName $container try { if (!(test-path $cacheDir)) { $null = new-item -ItemType directory $cacheDir -erroraction stop } } catch { throw "could not find or create cache directory '$cachedir'" } $path = "$cacheDir\$container.json" $data = $null if (test-path $path) { $data = Get-Content $path -Encoding UTF8 | out-String | ConvertFrom-Json } return $data } function Remove-Cache([Parameter(Mandatory=$true)]$container, [Parameter(Mandatory=$false)]$dir = ".cache") { if ([System.IO.Path]::IsPathRooted($dir)) { $cacheDir = $dir } else { $cacheDir = Join-Path "$home\Documents\windowspowershell" $dir } $container = _SanitizeContainerName $container if ((test-path $cacheDir)) { $path = "$cacheDir\$container.json" if (test-path $path) { remove-item $path } } } |