Skip to content

rocicorp/prisma-zero

Repository files navigation

prisma-zero

Generate Zero schemas from Prisma schemas.

Installation

npm install prisma-zero
# or
bun add prisma-zero
# or
yarn add prisma-zero
# or
pnpm add prisma-zero

Usage

Add a new generator to your prisma.schema:

generator zero {
  provider = "prisma-zero"
}

Add the schema generation script to your package.json:

{
  "scripts": {
    "generate": "prisma generate",
    "postinstall": "npm generate"
  }
}

Please reference the Zero docs for how to use your new Zero schema: https://zero.rocicorp.dev/docs/reading-data.

Postgres Array Support

Since Zero doesn't natively support Postgres arrays, this generator automatically maps array fields to JSON storage while preserving TypeScript type safety:

model User {
  id          String   @id @default(cuid())
  email       String   @unique
  tags        String[] // Maps to json<string[]>()
  scores      Int[]    // Maps to json<number[]>()
  categories  Category[] // Maps to json<Category[]>() for enum arrays
}

enum Category {
  TECH
  BUSINESS
  LIFESTYLE
}

The generated Zero schema will include:

export const userTable = table('User')
  .columns({
    id: string(),
    email: string(),
    tags: json<string[]>(),
    scores: json<number[]>(),
    categories: json<Category[]>(),
  })
  .primaryKey('id');

Supported Array Types

  • Scalar arrays: String[], Int[], Float[], Boolean[], DateTime[], BigInt[], Decimal[]
  • Enum arrays: MyEnum[]
  • Optional arrays: String[]?json<string[]>().optional()

Configuration

If you want to customize the behavior of the generator you can use the following options:

generator zero {
  // Specify output dir
  output = "generated/zero"
  // When true, the output will be formatted using prettier
  prettier = true
  // When true, the generator will remap table names to camel case using Zero's `.from()` method.
  // You can read more about it here https://zero.rocicorp.dev/docs/zero-schema#name-mapping
  camelCase = true
  // Optional list of Prisma Model names you want to exclude from the generated schema
  // This does *not* change tables that replicate to zero-cache - only the types on the client
  excludeTables = ["Posts", "Comments", ...]
}

Attribution

Thank you to @elledienne who built @passionfroot/prisma-generator-zero, which this is heavily based on.

About

Generate Zero schemas from Prisma ORM schemas.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors 2

  •  
  •