Skip to content

Commit e170b33

Browse files
fix zod error being thrown incorrectly while fetching data
1 parent 6a8cbbb commit e170b33

File tree

1 file changed

+23
-21
lines changed

1 file changed

+23
-21
lines changed

src/lib/apis/fetchData.ts

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import fetch, { Request } from 'node-fetch';
1+
import fetch, { Request, Response } from 'node-fetch';
22
import { ZodSchema } from 'zod';
33
import { Logger } from '../logger';
44

@@ -10,30 +10,32 @@ import { Logger } from '../logger';
1010
* @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).
1111
*/
1212
export const fetchData = async <ReturnType = unknown>(request: Request, zodSchema: ZodSchema<ReturnType>): Promise<ReturnType> => {
13+
let response: Response;
1314
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+
}
1919

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+
}
2623

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+
}
2830

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);
3432

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;
3838
}
39+
40+
return result.data;
3941
};

0 commit comments

Comments
 (0)