@@ -77,9 +77,7 @@ export class ResponseError extends Error {
|
||||
|
||||
const data = await parseErrorResponseBody(
|
||||
// TS isn't smart enough to know that this is done under the hood,
|
||||
response as ConsumedResponse & {
|
||||
bodyUsed: true;
|
||||
},
|
||||
response,
|
||||
rawBody,
|
||||
);
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ export type ConsumedResponse = {
|
||||
values(): IterableIterator<string>;
|
||||
[Symbol.iterator](): Iterator<[string, string]>;
|
||||
};
|
||||
readonly bodyUsed: boolean;
|
||||
readonly ok: boolean;
|
||||
readonly redirected: boolean;
|
||||
readonly status: number;
|
||||
|
||||
@@ -54,20 +54,21 @@ export type ErrorResponseBody = {
|
||||
* @param response - The response of a failed request
|
||||
*/
|
||||
export async function parseErrorResponseBody(
|
||||
response: ConsumedResponse & { bodyUsed: true },
|
||||
response: ConsumedResponse,
|
||||
rawBody: string,
|
||||
): Promise<ErrorResponseBody>;
|
||||
export async function parseErrorResponseBody(
|
||||
response: ConsumedResponse & { text(): Promise<string>; bodyUsed: false },
|
||||
response: ConsumedResponse & { text(): Promise<string> },
|
||||
): Promise<ErrorResponseBody>;
|
||||
export async function parseErrorResponseBody(
|
||||
response:
|
||||
| (ConsumedResponse & { bodyUsed: true })
|
||||
| (ConsumedResponse & { text(): Promise<string>; bodyUsed: false }),
|
||||
response: ConsumedResponse | (ConsumedResponse & { text(): Promise<string> }),
|
||||
rawBody?: string,
|
||||
): Promise<ErrorResponseBody> {
|
||||
try {
|
||||
const text = !response.bodyUsed ? await response.text() : rawBody;
|
||||
const text =
|
||||
!response.bodyUsed && 'text' in response
|
||||
? await response.text()
|
||||
: rawBody;
|
||||
if (text) {
|
||||
if (
|
||||
response.headers.get('content-type')?.startsWith('application/json')
|
||||
|
||||
Reference in New Issue
Block a user