Skip to content

ealexandros/prisma-name-mapper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

7 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🧭 Prisma Name Mapper 🧭


A custom Prisma generator that creates a TypeScript mapping of your model and field names to their database-level names. Stop guessing and start knowing exactly what your database columns are called.

πŸ€” What is this?

When you use Prisma, you often define your models in camelCase and your database tables and columns in snake_case using @@map and @map. This is great for your code, but what happens when you need to write a raw SQL query, create a migration script, or build a data utility? You end up guessing the database names or constantly checking your schema.prisma file.

Prisma Name Mapper solves this by automatically generating a TypeScript object that maps your Prisma model and field names to their corresponding database names.

πŸš€ Getting Started

1. Installation

Install the package as a development dependency in your project.

# Using npm
$ npm install -D prisma-name-mapper

# Using pnpm
$ pnpm add -D prisma-name-mapper

# Using bun
$ bun add -d prisma-name-mapper

2. Configuration

In your schema.prisma file, add the dbnames generator:

// schema.prisma

generator dbnames {
  provider = "prisma-name-mapper"
  // (Required) Define a custom output path.
  output = "../generated/mapper.ts"
}

model User {
  // ... your models
}

3. Generate the Map

Run the prisma generate command. The mapper file will be created at your specified output path.

$ bunx prisma generate

πŸ“¦ Example Output

Given a Prisma schema like this:

// schema.prisma

model User {
  id        String   @id @default(cuid()) @map("user_id")
  fullName  String   @map("full_name")
  createdAt DateTime @map("created_at")

  @@map("users")
}

This generator will create the following file, giving you type-safe access to your database names:

// πŸ”΄ AUTO-GENERATED FILE β€” DO NOT EDIT! πŸ”΄
//
// This file is automatically generated by prisma-name-mapper.
// Do not edit this file directly.

export const PrismaNameMapper = {
  User: {
    tableName: "user",
    schema: "public",
    fields: {
      id: "user_id",
      fullName: "full_name",
      createdAt: "created_at",
    },
  },
} as const;

✨ Why Use It?

This utility becomes incredibly useful in a variety of scenarios:

  • Raw SQL Queries: Write type-safe raw SQL queries without hardcoding table or column names.
import { PrismaNameMapper } from "@/prisma/generated/mapper";
import { prisma } from "@/lib/prisma/client";

const userId = "some-user-id";
const userTable = Prisma.raw(PrismaNameMapper.User.tableName);
const userIdCol = Prisma.raw(PrismaNameMapper.User.fields.id);

const query = Prisma.sql`
  SELECT * FROM ${userTable} WHERE ${userIdCol} = $1
`;
const users = await prisma.$queryRaw(query userId);
  • Database Utilities & Seeding: Build scripts for migrations, seeding, or data manipulation with confidence.
// A script to count users

const userTable = PrismaNameMapper.User.tableName;
console.log(`There are ${count} rows in the ${userTable} table.`);
  • Logging & Auditing: Create detailed logs that reference the exact database columns being modified.

  • Dynamic APIs: Build dynamic API endpoints or data services that need to know about the underlying database schema.

🀝 Contributing

Contributions are welcome! If you have a feature request, bug report, or want to improve the code, please open an issue or submit a pull request.

πŸ“œ License

This project is licensed under the MIT License. See the LICENSE file for details.

Made with ❀️ – Built for the Community 🀲

About

🧭 A Prisma generator that outputs a TypeScript map of model and field names to their database names

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published