An open API service indexing awesome lists of open source software.

https://github.com/kevinedry/nestjs-trpc

Providing native support for decorators and implement an opinionated approach that aligns with NestJS conventions.
https://github.com/kevinedry/nestjs-trpc

api express nestjs trpc typescript

Last synced: 4 months ago
JSON representation

Providing native support for decorators and implement an opinionated approach that aligns with NestJS conventions.

Awesome Lists containing this project

README

          




tRPC


Nestjs tRPC Adapter


An opinionated approach to building
End-to-end typesafe APIs with tRPC within NestJS.



weekly downloads


MIT License


Discord




Demo


The client above is not importing any code from the server, only its type declarations.




## Introduction

**NestJS tRPC** is a library designed to integrate the capabilities of tRPC into the NestJS framework. It aims to provide native support for decorators and implement an opinionated approach that aligns with NestJS conventions.

## Features

- Fast Rust-based CLI for type generation with rich error messages
- Full static typesafety & autocompletion on the client, for inputs, outputs, and errors
- Implements the NestJS opinionated approach to how tRPC works
- Watch mode for auto-regeneration during development
- Out of the box support for **Dependency Injection** within the routes and procedures
- Native support for `express`, `fastify`, and `zod` with more drivers to come
- Examples are available in the ./examples folder

## Quickstart

### Installation

To install **NestJS tRPC** with your preferred package manager, you can use any of the following commands:

```shell
# bun
bun add nestjs-trpc zod @trpc/server

# npm
npm install nestjs-trpc zod @trpc/server

# pnpm
pnpm add nestjs-trpc zod @trpc/server

# yarn
yarn add nestjs-trpc zod @trpc/server
```

### Generate Types

Run the CLI to generate your AppRouter types:

```shell
# Generate types (one-time)
npx nestjs-trpc generate

# Watch mode for development
npx nestjs-trpc watch
```

## How to use

Here's a brief example demonstrating how to use the decorators available in **NestJS tRPC**:

```typescript
// users.router.ts
import { Inject } from '@nestjs/common';
import { Router, Query, UseMiddlewares } from 'nestjs-trpc';
import { UserService } from './user.service';
import { ProtectedMiddleware } from './protected.middleware';
import { TRPCError } from '@trpc/server';
import { z } from 'zod';

const userSchema = z.object({
name: z.string(),
password: z.string()
})

@Router()
class UserRouter {
constructor(
@Inject(UserService) private readonly userService: UserService
) {}

@UseMiddlewares(ProtectedMiddleware)
@Query({ output: z.array(userSchema) })
async getUsers() {
try {
return this.userService.getUsers();
} catch (error: unknown) {
throw new TRPCError({
code: "INTERNAL_SERVER_ERROR",
message: "An error has occured when trying to get users.",
cause: error
})
}
}
}
```

**👉 See full documentation on [NestJS-tRPC.io](https://nestjs-trpc.io/docs). 👈**

## All contributors

> NestJS tRPC is developed by [Kevin Edry](https://twitter.com/KevinEdry), which taken a huge inspiration from both NestJS and tRPC inner workings.



A table of avatars from the project's contributors


## Release Process

For maintainers, see [Release Checklist](./docs/docs/RELEASE_CHECKLIST.md) for the v2.0.0 release process.