@darthrommy/zodfetch v0.3.1
ZodFetch
This is a simple fetch() wrapper extended by type validation of responses using zod.
Installation
To install, hit the following command:
npm i @darthrommy/zodfetchThis package requires zod as a peer dependency, so you also need to install it too.
npm i zodBasic Usage
If you know how to use both fetch and zod, you won't find it hard to use. You need to:
- Pass
zodschema as the first argument (required) - Pass url as the second argument (required)
- Pass
RequestInitobject as the last argument (optional)
import { z } from "zod";
import { zodFetch } from "@darthrommy/zodfetch";
// creating zod schema
const schema = z.object({
message: z.string(),
});
const { data } = await zodFetch(schema, "https://api.example.com", {
method: "GET",
headers: {
"content-type": "application/json",
},
});API
What zodFetch does is just fetch, validate its response body, and returns data as a axios-like interface.
zodFetch(schema, input, init?)
This is a wrapper of the schema.parse() method.
schema
A zod schema to validate. See Zod Docs.
input
A fetch input. (e.g. https://example.com/api)
init
A RequestInit object. (e.g. headers, body, method...)
returns
data
A response body you expect.
status
A status code of the response.
statusText
A status text of the response.
headers
A Headers object of the response.
type ZodFetch = <T>(
schema: z.ZodType<T>,
input: RequestInfo | URL,
init?: RequestInit
) => Promise<{
data: T;
status: number;
statusText: string;
headers: Headers;
}>;Error Handling
The schema.parse() may throw ZodError, so you need to try-catch if you want to handle validation error. If you want to handle without try-catch, I recommend zodSafeFetch.
try {
const { data } = await zodFetch(schema, url); // May throw error
return res.status(200).json(data);
} catch (e) {
return res.status(500).end();
}zodSafeFetch(schema, input, init?)
This is a wrapper of the schema.safeParse() method.
args
same as the zodFetch.
returns
data
{ success: true, data: T }if the body is valid.{ success: false, error: ZodError }if invalid.
See safeParse() Docs.
the rest of the returns
same as the zodFetch.
type ZodSafeFetch = <T>(
schema: z.ZodType<T>,
input: RequestInfo | URL,
init?: RequestInit
) => Promise<{
result: z.SafeParseReturnType<T, T>;
status: number;
statusText: string;
headers: Headers;
}>;