prisma-name-mapper
v1.0.2
Published
A Prisma generator that outputs a TypeScript map of model and field names to their database names.
Maintainers
Readme
🤔 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-mapper2. 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: "users",
schema: null,
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 🤲
