Pax8API/Public/Test-Pax8OpenApiUpdate.ps1
|
function Test-Pax8OpenApiUpdate { [CmdletBinding()] param ( [switch]$Quiet ) $localManifest = Get-Pax8LocalSpecManifest if (-not $localManifest) { throw 'No local Pax8 OpenAPI manifest was found in the module data folder.' } $remoteManifest = Get-Pax8RemoteSpecManifest -SpecFile @($localManifest.specs | ForEach-Object file) $differences = @(Compare-Pax8SpecManifest -LocalManifest $localManifest -RemoteManifest $remoteManifest) $localSourceOperationCount = [int](($localManifest.specs | Measure-Object -Property operationCount -Sum).Sum) $generatedOperationCount = if ($localManifest.PSObject.Properties['generatedOperationCount']) { [int]$localManifest.generatedOperationCount } else { [int]$localManifest.operationCount } $result = [pscustomobject]@{ CheckedAt = [datetimeoffset]::UtcNow Source = 'https://devx.pax8.com/openapi' LocalGeneratedAt = $localManifest.generatedAt GeneratedOperationCount = $generatedOperationCount LocalOperationCount = $localSourceOperationCount RemoteOperationCount = [int](($remoteManifest.specs | Measure-Object -Property operationCount -Sum).Sum) UpdateAvailable = [bool]($differences.Count -gt 0) Differences = @($differences) } $cachePath = Get-Pax8UpdateCheckCachePath [pscustomobject]@{ checkedAt = $result.CheckedAt.ToString('o') source = $result.Source updateAvailable = $result.UpdateAvailable changedSpecs = @($differences | ForEach-Object File) localGeneratedAt = $result.LocalGeneratedAt generatedOperationCount = $result.GeneratedOperationCount localOperationCount = $result.LocalOperationCount remoteOperationCount = $result.RemoteOperationCount } | ConvertTo-Json -Depth 20 | Set-Content -LiteralPath $cachePath -Encoding utf8NoBOM if ($Quiet) { return $result.UpdateAvailable } $result } |