Functions/Invoke-GitHubGraphql.ps1

Function Invoke-GitHubGraphql {

  Param(
    [string] $Query,
    [hashtable] $Variables = @{},
    [string] $Token = "$(gh auth token)"
  )

  $headers = @{
    Authorization = "Bearer $($Token)"
  }

  $VariableNames = @($Variables.GetEnumerator() | ForEach-Object { $_.Key })
  if($VariableNames.Count -gt 0){
    $Query = "$Query `nvariables {"
    $Query += @($VariableNames | ForEach-Object { " `"$($_)`": $($_)" }) -join "`n"
    $Query += "`n}"
  }


  $data = Invoke-GitHubApiRoute -Path "graphql" -Method POST -Body $(@{query = $Query} | ConvertTo-Json) -Token $Token

  if($data.errors){
    Write-Host "Error: $($data.errors[0].message)"
    throw "Error: $($data.errors[0].message)"
  }

  return $data


}