Skip to content

Generate OpenAPI Documentation from prisma models

License

nitzano/prisma-openapi

Repository files navigation

Prisma OpenAPI

Generate OpenAPI schema from Prisma models

npm GitHub Repo stars npm GitHub License XO code style

A Prisma generator that automatically creates OpenAPI specifications from your Prisma schema. Seamlessly integrate your database models with API documentation without writing any additional code.

Features

  • πŸ”„ Automatic Generation: Convert Prisma models to OpenAPI schemas with a single command
  • πŸ” Type Safety: Maintain type consistency between your database and API documentation
  • πŸ› οΈ Customizable: Configure which models to include and set API metadata
  • 🧩 Relationship Support: Properly maps Prisma relationships to OpenAPI references
  • *️⃣ Enum Support: Full support for Prisma enums in your API documentation
  • πŸ“ JSDoc Generation: Create JSDoc comments for your TypeScript types based on the Prisma schema

Setup

npm i -D prisma-openapi
pnpm add -D prisma-openapi
yarn add -D prisma-openapi

Usage

Add the generator to your schema.prisma file:

generator openapi {
  provider = "prisma-openapi"
  output   = "./openapi"
}

Then run Prisma generate:

npx prisma generate

This will create OpenAPI documentation in the specified output directory.

Examples

Basic Usage

// schema.prisma
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

generator openapi {
  provider = "prisma-openapi"
  output   = "./openapi"
}

/// Represents a user in the system
model User {
  id        Int      @id @default(autoincrement())
  email     String   @unique
  name      String?
  posts     Post[]
}

/// Represents a blog post
model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String?
  published Boolean  @default(false)
  author    User     @relation(fields: [authorId], references: [id])
  authorId  Int
}

Running prisma generate will create OpenAPI specifications for these models:

openapi: 3.1.0
info:
  title: Prisma API
  description: API generated from Prisma schema
  version: 1.0.0
components:
  schemas:
    User:
      type: object
      description: Represents a user in the system
      properties:
        id:
          type: integer
          format: int32
        email:
          type: string
        name:
          type: string
        posts:
          type: array
          items:
            $ref: '#/components/schemas/Post'
      required:
        - id
        - email
    Post:
      type: object
      description: Represents a blog post
      properties:
        id:
          type: integer
          format: int32
        title:
          type: string
        content:
          type: string
        published:
          type: boolean
        author:
          $ref: '#/components/schemas/User'
        authorId:
          type: integer
          format: int32
      required:
        - id
        - title
        - published
        - author
        - authorId

Custom Configuration

generator openapi {
  provider      = "prisma-openapi"
  output        = "./openapi"
  title         = "My API"
  description   = "API for my application"
  includeModels = "User,Post"
  excludeModels = "Passwords"
  generateYaml  = true
  generateJson  = false
  generateJsDoc = false
}

JSDoc Integration

When generateJsDoc is enabled, prisma-openapi will generate a JavaScript file containing OpenAPI-compatible JSDoc comments. This can be integrated with tools like swagger-jsdoc to combine your API route documentation with your Prisma model definitions.

generator openapi {
  provider      = "prisma-openapi"
  output        = "./openapi"
  generateJsDoc = true
}

The generated JSDoc comments can be imported into your API documentation workflow:

/**
 * @openapi
 * components:
 *   schemas:
 *     User:
 *       type: object
 *       properties:
 *         id:
 *           type: integer
 *         email:
 *           type: string
 *         name:
 *           type: string
 *         posts:
 *           type: array
 *           items:
 *             $ref: '#/components/schemas/Post'
 *       required:
 *         - id
 *         - email
 */

Prisma Comments as Descriptions

Prisma-openapi automatically converts Prisma schema comments into OpenAPI description fields. Use triple-slash comments (///) to add descriptions to your models and fields:

/// User account information
model User {
  /// Primary key for the user
  id    Int    @id @default(autoincrement())
  /// User's email address for login
  email String @unique
  /// Optional display name
  name  String?
}

This will generate:

User:
  type: object
  description: User account information
  properties:
    id:
      type: integer
      description: Primary key for the user
    email:
      type: string
      description: User's email address for login
    name:
      type: string
      description: Optional display name

Configuration

Option Description Default
output Output directory for OpenAPI schema ./openapi
title API title in OpenAPI spec "Prisma API"
description API description in OpenAPI spec Empty string
includeModels Comma-separated list of models to include All models
excludeModels Comma-separated list of models to exclude None
generateYaml Generate YAML format true
generateJson Generate JSON format false
generateJsDoc Include JSDoc comments in the schema false

License

MIT