0.2.2 • Published 1 year ago

zod-request v0.2.2

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

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

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

MIT © Shahrad Elahi

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