@danprince/zhttp
TypeScript icon, indicating that this package has built-in type declarations

0.0.6 • Public • Published

zhttp

A small library that brings zod, express, and static-path together to create type safe HTTP endpoints for clients and servers.

Getting Started

Install zhttp and its peer dependencies.

npm i @danprince/zhttp express @types/express zod static-path

Example

Define your endpoints somewhere that both your client and server can import from.

// shared/endpoints.ts
import { endpoint } from "@danprince/zhttp";
import { z } from "zod";
import { path } from "path";

export let sendMessage = endpoint({
  // static-path definition
  path: path("/message/:to"),

  // "post" | "get" | "patch" | "put" | "delete" | "head"
  method: "post",

  // zod request body schema
  request: z.object({
    subject: z.string(),
    text: z.string(),
  }),

  // zod response body schema
  response: z.object({
    status: z.union([
      z.literal("success"),
      z.literal("pending"),
      z.literal("failure"),
    ]),
  }),
});

Then create corresponding server side route handlers.

// server/routes.ts
import { createRouter } from "@danprince/zhttp/express";
import { sendMessage } from "../shared/endpoints";

let router = createRouter();

router.use(sendMessage, async (req, res) => {
  // Type safe access from req.body
  let { subject, text } = req.body;

  // ...

  // Type safe res.body methods
  res.json({ status: "success" });
});

// router.routes() is an Express.Router

And finally, the client side.

// client/index.ts
import { fetchJson } from "@danprince/zhttp/fetch";
import { sendMessage } from "../shared/endpoints";

let res = await fetchJson(sendMessage, {
  params: { to: "howard" },
  body: {
    subject: "Hello!",
    text: "This is a message",
  },
});

// Type safe response
res.status

Readme

Keywords

none

Package Sidebar

Install

npm i @danprince/zhttp

Weekly Downloads

8

Version

0.0.6

License

MIT

Unpacked Size

33.2 kB

Total Files

12

Last publish

Collaborators

  • danprince