Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

joydip007x/Prisma-MultiSchema

Repository files navigation

NPM NPM Tests NPM Snyk

Prisma: MultiSchema NPM

Prisma normally limits your schema to one file, but with prisma-multischema, you can write multiple prisma schema files in an organized manner without any restrictions.

For Multiple files inter-relation you can import schemas , to manage the relation.

Built using TypeScript to for ES Module and CommonJS (CJS), to Unify Multiple Structured Schemas of Prisma-ORM

Installation

npm i prisma-multischema
yarn add prisma-multischema

Note Using VS Code ? Install Recommended VsCode Extensions from Dependencies (optional)

Leave a Star⭐ on the Repo ,if you found it helpful.
Supports and feedback means a lot and encourages me❤️.

Buy Me A Coffee

Usage

  • How to Use Tutorial : 📚MediumBlog || ✨YT Link

  • Place all your schemas in ProjectRoot/prisma/subschemas Folder.
    Like this :

    project_root 
     ├───node_modules
     ├───prisma 
     │ ├───subschemas <<<-----Place all your Schemas here
     │ │ ├───type 
     │ │ │ └───user.types.prisma
     │ │ │ └───bookmark.types.prisma
     │ │ └───user
     │ │ │ └───userData.prisma
     │ │ │ └───validity.prisma
     │ │ ├───anything-you-want.prisma
     │ │ ├───base.prisma 
     | | └───... 
     │ └───schema.prisma <-- will be Auto-Generated
     ├───src
     │ └───...
     ├───package.json
     │ 
     └───.gitignore

    For Clearer View : Image

  • Run in Terminal

    npx prisma-multischema

Project Demonstration

working example is available below -

Example

Let's go with two schemas User and Bookmark on different files ,where the relation is -

  • A User can have many bookmarks
  • Each bookmark has an userId field

base.prisma [ root/prisma/subschemas/base.prisma ]

generator client {
 provider = "prisma-client-js"
}
datasource db {
 provider = "mongodb"
 url = env("PRISMA_DATABASE_URL")
}

user.prisma [ root/prisma/subschemas/User/user.prisma ]

import { Bookmark } from "..\Bookmark\bookmark"
model User {

 id String @id @default(auto()) @map("_id") @db.ObjectId
 email String @unique

 Bookmark Bookmark[]
}
//MongoDB model IDs in prisma -must have a @map("_id") 
//https://www.prisma.io/docs/concepts/components/prisma-schema

bookmark.prisma [ root/prisma/subschemas/Bookmark/bookmark.prisma ]

import { User } from "..\User\user"
model Bookmark {

 id String @id @db.ObjectId @default(auto()) @map("_id") 
 title String

 user User @relation(fields: [userId], references: [id])
 userId String @db.ObjectId
}

Generated schema.prisma [root/prisma/schema.prisma]
after Running npx prisma-multischema

generator client {
 provider = "prisma-client-js"
}
datasource db {
 provider = "mongodb" 
 url = env("PRISMA_DATABASE_URL")
}
model User {
 id String @id @default(auto()) @map("_id") @db.ObjectId
 email String @unique
 Bookmark Bookmark[]
}
model Bookmark {
 id String @id @default(auto()) @map("_id") @db.ObjectId 
 title String
 user User @relation(fields: [userId], references: [id])
 userId String @db.ObjectId
}

https://www.prisma.io/docs

Additional

  • prisma schema files starting with header //#exclude will be excluded in final schema

  • Executing npx prisma-multischema will

    • Automatically run : npx prisma generate
      So, You don't need to update @prisma/client manually, each time the schema updates
    • Automatically run : npx prisma format
      because, Everyone likes clean code
  • Add npx prisma-multischema command as a prefix to your start script in package.json.

    {
    "name": "my-app",
    "version": "1.0.0",
    "scripts": {
     "unify": "npx prisma-multischema",
     "start": "npm run unify && node index.js",
     ...
     }
    }


    Now it will run & regenerate Main Schema everytime the project starts.

Dependencies (optional)

To use prisma import feature : (if you are using VS code, its better to use these)

  • Install prisma-import Extension (for VS code)

  • Disable Official prisma Extension (for VS code)

These are Optional Dependencies, If you can maintain multiple *.prisma schemas without TYPO ,you can ignore these.

To-do's

  • Add Support for keeping prisma's in different folder and aggregate them ( like root/src/auth/auth.prisma )

  • Add Command Flags

  • (削除) Handle/Remove " Error validating datasource db: " Warning (削除ここまで) Fixed

Authors - @joydip007x

AltStyle によって変換されたページ (->オリジナル) /