zod-request
TypeScript icon, indicating that this package has built-in type declarations

0.2.2 • Public • Published

zod-request

Validated and Type-safe HTTP requests using Zod

npm install size

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

Send a Post request with a FormData body
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=---- ...
Skip body validation for a request
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

MIT © Shahrad Elahi

Package Sidebar

Install

npm i zod-request

Weekly Downloads

59

Version

0.2.2

License

MIT

Unpacked Size

24.1 kB

Total Files

7

Last publish

Collaborators

  • shahradelahi