npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

prisma-monorepo

v1.0.2

Published

CLI tool for using Prisma in monorepo

Downloads

4

Readme

Prisma Monorepo

npm version npm downloads License Prisma

CLI tool for using Prisma in monorepo.

It is merging entities (models/view/enums/types) from more schema files into one root schema file and allowing to regenerate only those imported entites when they change. This allows you to do manual changes in the root schema file like creating relations, putting another entities, etc.

Consider following scenario:

my-project
  - packages
    - app
      ...
      - prisma/schema.prisma
      ...
    - lib
      ...
      - prisma/lib.prisma
      ...

In the app/prisma/schema.file you have standard generator, datasource and model called Post that you have manually created.
In the lib/prisma/lib.prisma file there is just one model called Car.

When you run npx prisma-monorepo generate you get the following contend of schema.prisma file:

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

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model Post {
  id        String  @id @default(uuid())
  title     String
  content   String
  published Boolean @default(false)
}

model Car {
  // @@source("../../packages/lib/prisma/schema.prisma")
  id        Int      @id @default(autoincrement())
  make      String
  model     String
  year      Int
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

Note the comment in Car model with attribute @@source. These is telling Prisma Monorepo to regenerate the model when generating next time and gives you a visual hint where it came from.

Do not edit models marked with @@souce attribute! They will be regenerated when generating next time! The rest of the file is safe to be edited as you wish.
For example you can add a relation to Car on the Post model like this:

model Post {
  id        String  @id @default(uuid())
  ...
  carId     Int
  car       Car     @relation(fields: [carId], references: [id])
}

Now when you run npx prisma-monorepo format or regenerate with npx prisma-monorepo generate it will add the counterpart field to the Car model.
(Or in Visual Studio Code with a Prisma extension you can just save the file and it will do the same)

Installation

$ npm i -D prisma-monorepo

Initialize the Prisma Monorepo:

$ npx prisma-monorepo init

It creates a prisma-monorepo.json file:

{
  "inputs": [],
  "output": ""
}

The content is pretty obvious. inputs is the array of relative paths to merged prisma files, output is the relative path to the root schema.prisma file.
In our case it would be:

{
  "inputs": ["../lib/prisma/lib.prisma"],
  "output": "./prisma/schema.prisma"
}

Usage

At first generat the schema.prisma with Prisma as usual.

Create the files with entities you want to merge and add relative paths to them into the prisma-monorepo.json file in the root of the app.

To merge files run:

$npx prisma-monorepo generate

To format root schema file:

$ npx prisma-monorepo format

Warranty

There is no warranty. Usage is at your own risk.