11import { middlewareHelper } from "./middleware.js"
22import type { Wretch , WretchResponse , WretchResponseChain , WretchError as WretchErrorType } from "./types.js"
3- import { FETCH_ERROR , CATCHER_FALLBACK } from "./constants.js"
3+ import { CATCHER_FALLBACK , FETCH_ERROR } from "./constants.js"
44
55/**
66 * This class inheriting from Error is thrown when the fetch response is not "ok".
@@ -45,9 +45,6 @@ export const resolver = <T, Chain, R, E>(wretch: T & Wretch<T, Chain, R, E>) =>
4545 // Throws on an http error
4646 const referenceError = new Error ( )
4747 const throwingPromise : Promise < void | WretchResponse > = _fetchReq
48- . catch ( error => {
49- throw { [ FETCH_ERROR ] : error }
50- } )
5148 . then ( async response => {
5249 if ( ! response . ok ) {
5350 const err = new WretchError ( )
@@ -57,19 +54,14 @@ export const resolver = <T, Chain, R, E>(wretch: T & Wretch<T, Chain, R, E>) =>
5754 err . status = response . status
5855 err . url = finalUrl
5956
60- if ( response . type === "opaque" ) {
61- err . message = response . statusText
62- throw err
63- }
64-
65- if ( errorTransformer ) {
66- throw await errorTransformer ( err , response )
67- }
68-
69- try {
70- err . message = await response . text ( )
71- } catch {
57+ if ( response . type === "opaque" || errorTransformer ) {
7258 err . message = response . statusText
59+ } else {
60+ try {
61+ err . message = await response . text ( )
62+ } catch {
63+ err . message = response . statusText
64+ }
7365 }
7466
7567 throw err
@@ -78,16 +70,18 @@ export const resolver = <T, Chain, R, E>(wretch: T & Wretch<T, Chain, R, E>) =>
7870 } )
7971 // Wraps the Promise in order to dispatch the error to a matching catcher
8072 const catchersWrapper = < T > ( promise : Promise < T > ) : Promise < void | T > =>
81- promise . catch ( err => {
82- const fetchErrorFlag = FETCH_ERROR in err
83- const error = fetchErrorFlag ? err [ FETCH_ERROR ] : err
73+ promise . catch ( async error => {
8474
8575 const catcher =
86- ( error ?. status && catchers . get ( error . status ) ) ||
76+ catchers . get ( error ? .status ) ||
8777 catchers . get ( error ?. name ) ||
88- ( fetchErrorFlag && catchers . get ( FETCH_ERROR ) ) ||
78+ ( ! ( error instanceof WretchError ) && catchers . get ( FETCH_ERROR ) ) ||
8979 catchers . get ( CATCHER_FALLBACK )
9080
81+ if ( error . response && errorTransformer ) {
82+ error = await errorTransformer ( error , error . response )
83+ }
84+
9185 if ( catcher )
9286 return catcher ( error , wretch )
9387
0 commit comments