• Stars
    star
    625
  • Rank 71,862 (Top 2 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created over 2 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Prisma 2+ generator to emit fully implemented tRPC routers

npm version npm HitCount npm

Logo

Prisma tRPC Generator

A Prisma generator that automates creating your tRPC routers from your Prisma schema.
Explore the options ยป

Report Bug ยท Request Feature

Buy Me A Coffee

Table of Contents

About The Project

Automatically generate fully implemented tRPC routers from your Prisma Schema. This includes routers, app router and of course all input schemas using Zod. Updates every time npx prisma generate runs.

Supported Prisma Versions

Prisma 4

  • 0.2.0 and higher

Prisma 2/3

  • 0.1.12 and lower

Supported tRPC Versions

tRPC 10

  • 0.8.0 and higher

tRPC 9

  • 0.7.2 and lower

Installation

Using npm:

 npm install prisma-trpc-generator

Using yarn:

 yarn add prisma-trpc-generator

Usage

1- Star this repo ๐Ÿ˜‰

2- Add the generator to your Prisma schema

generator trpc {
  provider          = "prisma-trpc-generator"
  withZod           = true
  withMiddleware    = false
  withShield        = false
  contextPath       = "../src/context"
  trpcOptionsPath   = "../src/trpcOptions"
}

3- Enable strict mode in tsconfig as it is required by Zod, and considered a Typescript best practice

{
  "compilerOptions": {
    "strict": true
  }
}

4- Running npx prisma generate for the following schema.prisma

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  posts Post[]
}

model Post {
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  title     String
  content   String?
  published Boolean  @default(false)
  viewCount Int      @default(0)
  author    User?    @relation(fields: [authorId], references: [id])
  authorId  Int?
}

will generate

tRPC Routers

5- Make sure you have a valid Context file, as specified in contextPath option. The official Context for reference.

6- Optionally, you can specify a trpcOptionsPath to set various tRPC options (like transformer, error formatter, etc). Find about all possible options here.

import { ZodError } from 'zod';

export default {
  errorFormatter({ shape, error }) {
    return {
      ...shape,
      data: {
        ...shape.data,
        zodError:
          error.code === 'BAD_REQUEST' && error.cause instanceof ZodError
            ? error.cause.flatten()
            : null,
      },
    };
  },
};

Customizations

Skipping entire models

/// @@Gen.model(hide: true)
model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
}

Additional Options

Option Description Type Default
output Output directory for the generated routers and zod schemas string ./generated
withMiddleware Attaches a global middleware that runs before all procedures boolean or string true
output Output directory for the generated routers and zod schemas string ./generated
withZod Use Zod for input validation boolean true
withShield Generates a tRPC Shield to use as a permissions layer boolean or string true
contextPath Sets the context path used in your routers string ../../../../src/context
trpcOptionsPath Sets the tRPC instance options string ../../../../src/trpcOptions
isGenerateSelect Enables the generation of Select related schemas and the select property boolean false
isGenerateInclude Enables the generation of Include related schemas and the include property boolean false
showModelNameInProcedure When disabled, the generated procedure no longer includes the name of the Prisma model boolean true
generateModelActions Enables the generation of specific model actions string aggregate,aggregateRaw,count,create,createMany,delete,deleteMany,findFirst,findFirstOrThrow,findMany,findRaw,findUnique,findUniqueOrThrow,groupBy,update,updateMany,upsert

Use additional options in the schema.prisma

generator trpc {
  provider           = "prisma-trpc-generator"
  output             = "./trpc"
  withMiddleware     = "../middleware"
  withZod            = false
  withShield         = false
  contextPath        = "../context"
  trpcOptionsPath    = "../trpcOptions"
  isGenerateSelect   = true
  isGenerateInclude  = true
  showModelNameInProcedure  = false
  generateModelActions = "aggregate,aggregateRaw,count,create,createMany,delete,deleteMany,findFirst,findFirstOrThrow,findMany,findRaw,findUnique,findUniqueOrThrow,groupBy,update,updateMany,upsert"
}

More Repositories

1

prisma-zod-generator

Prisma 2+ generator to emit Zod schemas from your Prisma schema
TypeScript
407
star
2

prisma-class-validator-generator

Prisma 2+ generator to emit typescript models of your database with class validator
TypeScript
55
star
3

prisma-yup-generator

Prisma 2+ generator to emit Yup schemas from your Prisma schema
TypeScript
48
star
4

prisma-trpc-shield-generator

Prisma +2 generator to emit a tRPC shield from your Prisma schema
TypeScript
46
star
5

prisma-joi-generator

Prisma 2+ generator to emit Joi schemas from your Prisma schema
TypeScript
38
star
6

prisma-json-server-generator

Prisma 2+ generator to emit a JSON file that can be run with json-server
TypeScript
23
star
7

create-trpc-app

Create tRPC-powered apps with one command
TypeScript
22
star
8

json-to-prisma-schema-convertor

Converts a Json schema to a Prisma schema
TypeScript
21
star
9

prisma-custom-models-generator

Prisma 2+ generator to emit custom models from your schema"
TypeScript
20
star
10

awesome-zod

A collection of awesome Zod resources .
16
star
11

prisma-schema-sorter

Prisma 2 tool to sort schema models, enums, generators and datasources
TypeScript
16
star
12

graphql-shield-generator

Emits a GraphQL Shield from your GraphQL schema
TypeScript
9
star
13

prisma-query-inspector

Prisma +2 tool to inspect all queries going to the database, formatted and with all params if any
TypeScript
8
star
14

firestore-prisma

Convert Firestore data into a Prisma schema
TypeScript
6
star
15

breakpoint-bookmarks

A vsCode extension that lets you bookmark all your different breakpoints into separate files, and activate them as needed
TypeScript
6
star
16

firebase-functions-downloader

Downloads Firebase/Google Cloud Functions code
TypeScript
3
star
17

lang-firestore

Firestore query language basic support for the CodeMirror code editor
TypeScript
3
star
18

jigsaw-puzzle

A basic Jigsaw game built using Angular 7's Drag and Drop
TypeScript
2
star
19

omar-dulaimi

Get to know me
2
star
20

firestore-indexes-diff

Displays differences between two Firestore index config files
TypeScript
2
star
21

firestore-prisma-web

Web editor of Firestore Prisma
TypeScript
2
star
22

pure-javascript-list-with-filtering

A task
JavaScript
1
star
23

learnyounode

Solutions for learnyounode exercises
JavaScript
1
star
24

django-vue-url-shortner

Shorten your URLs easily
Python
1
star
25

nextjs-shallow-routing-repro

A repro to prove that shallow routing doesn't work in a specific case
JavaScript
1
star
26

sveltejs-note-taking-app

A basic note taking web app built with SvelteJS for the purposes of trying out this awesome new framework.
JavaScript
1
star