in commands/api/api.go [295:353]
func processResponse(resp *http.Response, opts *ApiOptions, headersOutputStream io.Writer) (endCursor string, err error) {
if opts.ShowResponseHeaders {
fmt.Fprintln(headersOutputStream, resp.Proto, resp.Status)
printHeaders(headersOutputStream, resp.Header, opts.IO.ColorEnabled())
fmt.Fprint(headersOutputStream, "\r\n")
}
if resp.StatusCode == http.StatusNoContent {
return
}
var responseBody io.Reader = resp.Body
isJSON, _ := regexp.MatchString(`[/+]json(;|$)`, resp.Header.Get("Content-Type"))
var serverError string
if isJSON && (opts.RequestPath == "graphql" || resp.StatusCode >= http.StatusBadRequest) {
responseBody, serverError, err = parseErrorResponse(responseBody, resp.StatusCode)
if err != nil {
return
}
}
var bodyCopy *bytes.Buffer
isGraphQLPaginate := isJSON && resp.StatusCode == http.StatusOK && opts.Paginate && opts.RequestPath == "graphql"
if isGraphQLPaginate {
bodyCopy = &bytes.Buffer{}
responseBody = io.TeeReader(responseBody, bodyCopy)
}
if isJSON && opts.IO.ColorEnabled() {
out := &bytes.Buffer{}
_, err = io.Copy(out, responseBody)
if err == nil {
result := jsonPretty.Color(jsonPretty.Pretty(out.Bytes()), nil)
_, err = fmt.Fprintln(opts.IO.StdOut, string(result))
}
} else {
_, err = io.Copy(opts.IO.StdOut, responseBody)
}
if err != nil {
return
}
if serverError != "" {
fmt.Fprintf(opts.IO.StdErr, "glab: %s\n", serverError)
err = cmdutils.SilentError
return
} else if resp.StatusCode > 299 {
fmt.Fprintf(opts.IO.StdErr, "glab: HTTP %d\n", resp.StatusCode)
err = cmdutils.SilentError
return
}
if isGraphQLPaginate {
endCursor = findEndCursor(bodyCopy)
}
return
}