@@ -76,79 +76,86 @@ export const createClient = (config: Config = {}): Client => {
7676 // fetch must be assigned here, otherwise it would throw the error:
7777 // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation
7878 const _fetch = opts . fetch ! ;
79- let response = await _fetch ( request ) ;
80-
81- for ( const fn of interceptors . response . _fns ) {
82- if ( fn ) {
83- response = await fn ( response , request , opts ) ;
84- }
79+ let error : unknown ;
80+ let response
81+ try {
82+ response = await _fetch ( request ) ;
83+ } catch ( e ) {
84+ error = e
8585 }
86-
87- const result = {
88- request,
89- response,
90- } ;
91-
92- if ( response . ok ) {
93- if (
94- response . status === 204 ||
95- response . headers . get ( 'Content-Length' ) === '0'
96- ) {
97- return opts . responseStyle === 'data'
98- ? { }
99- : {
100- data : { } ,
101- ...result ,
102- } ;
86+ if ( response ) {
87+ for ( const fn of interceptors . response . _fns ) {
88+ if ( fn ) {
89+ response = await fn ( response , request , opts ) ;
90+ }
10391 }
10492
105- const parseAs =
106- ( opts . parseAs === 'auto'
107- ? getParseAs ( response . headers . get ( 'Content-Type' ) )
108- : opts . parseAs ) ?? 'json' ;
109-
110- let data : any ;
111- switch ( parseAs ) {
112- case 'arrayBuffer' :
113- case 'blob' :
114- case 'formData' :
115- case 'json' :
116- case 'text' :
117- data = await response [ parseAs ] ( ) ;
118- break ;
119- case 'stream' :
93+ const result = {
94+ request,
95+ response,
96+ } ;
97+
98+ if ( response . ok ) {
99+ if (
100+ response . status === 204 ||
101+ response . headers . get ( 'Content-Length' ) === '0'
102+ ) {
120103 return opts . responseStyle === 'data'
121- ? response . body
104+ ? { }
122105 : {
123- data : response . body ,
106+ data : { } ,
124107 ...result ,
125108 } ;
126- }
109+ }
127110
128- if ( parseAs === 'json' ) {
129- if ( opts . responseValidator ) {
130- await opts . responseValidator ( data ) ;
111+ const parseAs =
112+ ( opts . parseAs === 'auto'
113+ ? getParseAs ( response . headers . get ( 'Content-Type' ) )
114+ : opts . parseAs ) ?? 'json' ;
115+
116+ let data : any ;
117+ switch ( parseAs ) {
118+ case 'arrayBuffer' :
119+ case 'blob' :
120+ case 'formData' :
121+ case 'json' :
122+ case 'text' :
123+ data = await response [ parseAs ] ( ) ;
124+ break ;
125+ case 'stream' :
126+ return opts . responseStyle === 'data'
127+ ? response . body
128+ : {
129+ data : response . body ,
130+ ...result ,
131+ } ;
131132 }
132133
133- if ( opts . responseTransformer ) {
134- data = await opts . responseTransformer ( data ) ;
134+ if ( parseAs === 'json' ) {
135+ if ( opts . responseValidator ) {
136+ await opts . responseValidator ( data ) ;
137+ }
138+
139+ if ( opts . responseTransformer ) {
140+ data = await opts . responseTransformer ( data ) ;
141+ }
135142 }
136- }
137143
138- return opts . responseStyle === 'data'
139- ? data
140- : {
141- data,
142- ...result ,
143- } ;
144- }
144+ return opts . responseStyle === 'data'
145+ ? data
146+ : {
147+ data,
148+ ...result ,
149+ } ;
150+ }
145151
146- let error = await response . text ( ) ;
152+ error = await response . text ( ) ;
147153
148- try {
149- error = JSON . parse ( error ) ;
150- } catch {
151- // noop
154+ try {
155+ error = JSON . parse ( error as string ) ;
156+ } catch {
157+ // noop
158+ }
152159 }
153160
154161 let finalError = error ;
0 commit comments