1
- import fetch , { Request } from 'node-fetch' ;
1
+ import fetch , { Request , Response } from 'node-fetch' ;
2
2
import { ZodSchema } from 'zod' ;
3
3
import { Logger } from '../logger' ;
4
4
@@ -10,30 +10,32 @@ import { Logger } from '../logger';
10
10
* @returns A promise that resolves to the expected type or rejects with an [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error).
11
11
*/
12
12
export const fetchData = async < ReturnType = unknown > ( request : Request , zodSchema : ZodSchema < ReturnType > ) : Promise < ReturnType > => {
13
+ let response : Response ;
13
14
try {
14
- const response = await fetch ( request ) ;
15
-
16
- if ( ! response . ok ) {
17
- throw new Error ( `HTTP Error. Status: ${ response . status } ` ) ;
18
- }
15
+ response = await fetch ( request ) ;
16
+ } catch ( e ) {
17
+ throw new Error ( `An error occured while fetching data from ${ request . url } : ${ String ( e ) } ` ) ;
18
+ }
19
19
20
- let data : unknown ;
21
- try {
22
- data = await response . json ( ) ;
23
- } catch ( e ) {
24
- throw new Error ( `Could not parse JSON. Make sure the endpoint at ${ request . url } returns valid JSON. Error: ${ String ( e ) } ` ) ;
25
- }
20
+ if ( ! response . ok ) {
21
+ throw new Error ( `HTTP Error. Status: ${ response . status } ` ) ;
22
+ }
26
23
27
- const result = zodSchema . safeParse ( data ) ;
24
+ let data : unknown ;
25
+ try {
26
+ data = await response . json ( ) ;
27
+ } catch ( e ) {
28
+ throw new Error ( `Could not parse JSON. Make sure the endpoint at ${ request . url } returns valid JSON. Error: ${ String ( e ) } ` ) ;
29
+ }
28
30
29
- if ( ! result . success ) {
30
- Logger . error ( '[zod] Data validation failed:' ) ;
31
- result . error . issues . forEach ( ( issue ) => Logger . error ( `Code: ${ issue . code } , Path: ${ issue . path . join ( '.' ) } , Message: ${ issue . message } ` ) ) ;
32
- throw result . error ;
33
- }
31
+ const result = zodSchema . safeParse ( data ) ;
34
32
35
- return result . data ;
36
- } catch ( e ) {
37
- throw new Error ( `An error occured while fetching data from ${ request . url } : ${ String ( e ) } ` ) ;
33
+ if ( ! result . success ) {
34
+ Logger . error ( '[zod] Data validation failed:' ) ;
35
+ result . error . issues . forEach ( ( issue ) => Logger . error ( `Code: ${ issue . code } , Path: ${ issue . path . join ( '.' ) } , Message: ${ issue . message } ` ) ) ;
36
+ console . log ( data ) ;
37
+ throw result . error ;
38
38
}
39
+
40
+ return result . data ;
39
41
} ;
0 commit comments