0.2.2 • Published 1 year ago
zod-request v0.2.2
zod-request
Validated and Type-safe HTTP requests using Zod
Notable Features
- Exact API as Native
fetch
with extra features - Supports every environment (Node.js, Browser, Bun, etc.)
📦 Installation
npm install zod-request zod
📖 Usage
import { fetch } from 'zod-request';
import { z } from 'zod';
const todoSchema = z.object({
userId: z.number(),
id: z.number(),
title: z.string(),
completed: z.boolean()
});
const response = await fetch('https://jsonplaceholder.typicode.com/todos', {
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
schema: {
response: z.array(todoSchema)
}
});
// type of data is [{ userId: number, id: number, title: string, completed: boolean }, ...]
const data = await response.json();
console.log(Array.isArray(data)); // true
console.log(data.length); // 200
📚 Documentation
For all configuration options, please see the API docs.
🤝 Contributing
You can contribute to this project by opening an issue or a pull request on GitHub. Feel free to contribute, we care about your ideas and suggestions.
Examples
import { fetch } from 'zod-request';
import { z } from 'zod';
const schema = {
body: z.object({
name: z.string(),
age: z.number()
}),
response: z.object({
form: z.record(z.any()),
headers: z.record(z.string())
})
};
const response = await fetch('https://httpbin.org/post', {
method: 'POST',
form: {
name: 'John',
age: 20
},
schema: schema
});
const { form, headers } = await response.json();
console.log(form); // { name: 'John', age: '20' }
console.log(headers); // { 'Content-Type': 'multipart/form-data; boundary=---- ...
const response = await fetch('https://jsonplaceholder.typicode.com/todos', {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
const data = await response.unsafeJson(); // Throws an error if the response is not a valid JSON
console.log(Array.isArray(data)); // true
console.log(data.length); // 200
Relevant Links
License
0.2.2
1 year ago
0.2.0-canary.0
1 year ago
0.2.1
1 year ago
0.2.0
1 year ago
0.1.1-canary.2
1 year ago
0.1.1-canary.1
1 year ago
0.1.1
1 year ago
0.1.0
1 year ago
0.1.1-canary.0
1 year ago
0.1.0-canary.1
1 year ago
0.1.0-canary.0
1 year ago
0.0.6
2 years ago
0.0.5
2 years ago
0.0.4
2 years ago
0.0.3
2 years ago
0.0.2
2 years ago
0.0.1
2 years ago