JSPM

  • Created
  • Published
  • Downloads 443
  • Score
    100M100P100Q89682F
  • License MIT

vue-query client integration for @ts-rest

Package Exports

    Readme

    ts-rest

    Incrementally adoptable RPC-like client and server helpers for a magical end to end typed experience πŸͺ„

    GitHub Repo stars License Bundle Size

    Join us on Discord for help, feedback, and discussions!


    Discord Shield

    Introduction

    ts-rest offers a simple way to define a contract for your API, which can be both consumed and implemented by your application, giving you end to end type safety without the hassle or code generation.

    Features

    • End-to-end type safety πŸ›Ÿ
    • RPC-like client side API ⚑️
    • Small Bundle Size πŸ“‰
    • No Code Generation πŸƒβ€β™€οΈ
    • Zod support for runtime validation πŸ”’
    • Full optional OpenAPI integration πŸ“

    πŸ‘‰ Start reading the official Quickstart Guide πŸ‘ˆ

    Super Simple Example

    Easily define your API contract somewhere shared

    const contract = c.router({
      getPosts: {
        method: 'GET',
        path: '/posts',
        query: z.object({
          skip: z.number(),
          take: z.number(),
        }), // <-- Zod schema
        responses: {
          200: c.type<Post[]>(), // <-- OR normal TS types
        },
        headers: z.object({
          'x-pagination-page': z.coerce.number().optional(),
        }),
      },
    });

    Fulfill the contract on your server, with a type-safe router:

    const router = s.router(contract, {
      getPosts: async ({ params: { id } }) => {
        return {
          status: 200,
          body: prisma.post.findUnique({ where: { id } }),
        };
      },
    });

    Consume the api on the client with a RPC-like interface:

    const result = await client.getPosts({
      headers: { 'x-pagination-page': 1 },
      query: { skip: 0, take: 10 },
      // ^-- Fully typed!
    });

    Quickstart

    Create a contract, implement it on your server then consume it in your client. Incrementally adopt, trial it with your team, then get shipping faster.

    πŸ‘‰ Start reading the official Quickstart Guide πŸ‘ˆ

    Contributors ✨

    MASSIVE Thanks to all of these wonderful people (emoji key), who have helped make ts-rest possible:

    Youssef Gaber
    Youssef Gaber

    πŸ’» πŸ€” ⚠️
    Per Hermansson
    Per Hermansson

    πŸ“– πŸ’»
    GrΓ©gory Houllier
    GrΓ©gory Houllier

    πŸ“–
    Michael Angelo
    Michael Angelo

    πŸ“–
    Pieter Venter
    Pieter Venter

    πŸ“–
    Rifaldhi AW
    Rifaldhi AW

    πŸ“–
    Jonathan White
    Jonathan White

    πŸ’» πŸ“–
    Max Brosnahan
    Max Brosnahan

    πŸ’» πŸ€”
    Oliver Butler
    Oliver Butler

    πŸ’» πŸ€” πŸ“– πŸš‡ 🚧
    Adrian Barylski
    Adrian Barylski

    πŸ’» πŸ“– ⚠️
    Neil A. Dobson
    Neil A. Dobson

    πŸ’»
    Eric Do
    Eric Do

    πŸ“–
    Ben
    Ben

    πŸ’» πŸ“– ⚠️
    LW
    LW

    πŸ’» πŸ›
    Andrew Vance
    Andrew Vance

    πŸ“–

    Star History

    Since our first commit in 2022 we've been growing steadily. We're proud of our progress and we're excited about the future.

    Join us on Discord for help, feedback, and discussions!


    Discord Shield