UNPKG

prisma-error-formatter

Version:

A flexible and customizable Prisma error formatter to simplify and unify error handling in Prisma Client applications.

183 lines (129 loc) 5.16 kB
# prisma-error-formatter [![npm version](https://img.shields.io/npm/v/prisma-error-formatter.svg)](https://www.npmjs.com/package/prisma-error-formatter) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) A flexible and customizable **Prisma** error formatter to simplify and unify error handling in Prisma Client applications. Easily transform Prisma errors into user-friendly, consistent error messages for your APIs or UI. --- ## Features - Formats common Prisma Client errors like unique constraint violations, foreign key errors, validation errors, and initialization errors. - Supports custom error formatting via a callback function. - Works with Prisma Client’s error classes: - `PrismaClientKnownRequestError` - `PrismaClientValidationError` - `PrismaClientInitializationError` - `PrismaClientRustPanicError` - Returns structured error messages with clear `path` and `message` fields. - Written in TypeScript with full typings. --- ## Installation ```bash npm install prisma-error-formatter @prisma/client ``` --- ## Basic Usage ```ts import { PrismaClient } from "@prisma/client"; import { PrismaExceptionFormatter } from "prisma-error-formatter"; const prisma = new PrismaClient(); const formatter = new PrismaExceptionFormatter(); async function createUser(email: string) { try { await prisma.user.create({ data: { email } }); } catch (error) { const formattedErrors = formatter.formatError(error); console.error(formattedErrors); /* Example output: [ { path: "email", message: "A record with this email already exists." } ] */ } } ``` --- ## Using a Custom Formatter You can provide your own formatting logic by passing a `format` function when creating the formatter instance: ```ts import { PrismaExceptionFormatter, ErrorMessage } from "prisma-error-formatter"; const formatter = new PrismaExceptionFormatter({ format: ({ type, error, defaults }) => { // Add extra info or change messages based on error type if (type === "known" && error.code === "P2002") { return [ { path: defaults[0].path, message: `Custom: Duplicate value found for ${defaults[0].path}`, }, ]; } // Fallback to default formatting return defaults; }, }); ``` --- ## API ### `new PrismaExceptionFormatter(options?: { format?: FormatFunction })` Creates a new formatter instance. - `options.format` - Optional custom format function. Receives an object with: - `type`: The error type (`known`, `validation`, `initialization`, `panic`, `unknown`) - `error`: The original error object - `defaults`: The default formatted error messages (array of `{ path, message }`) Returns formatted errors as an array. ### Methods - `formatError(exception: any): ErrorMessage[]` Automatically detects the Prisma error type and returns formatted messages. - `formatPrismaError(exception: PrismaClientKnownRequestError): ErrorMessage[]` Formats known Prisma client errors. - `formatQueryError(exception: PrismaClientValidationError | PrismaClientRustPanicError): ErrorMessage[]` Formats validation or panic errors. - `formatInitializationError(exception: PrismaClientInitializationError): ErrorMessage[]` Formats database initialization errors. - `formatUnknownError(exception: any): ErrorMessage[]` Formats unknown errors. --- ## Supported Prisma Error Codes (Known Errors) - `P2002` - Unique constraint violation - `P2003` - Foreign key constraint failure - `P2005`, `P2006` - Invalid value errors - `P2025` - Record not found --- ## License MIT © Nurul Islam Rimon --- ## Contribution Contributions, issues, and feature requests are welcome! Feel free to check [project page](https://github.com/nurulislamrimon/prisma-error-formatter) [issues page](https://github.com/nurulislamrimon/prisma-error-formatter/issues) --- ## Related - [Prisma Client](https://www.prisma.io/docs/concepts/components/prisma-client) - [Prisma Error Codes](https://www.prisma.io/docs/reference/api-reference/error-reference) --- _Built with ❤️ by Nurul Islam Rimon_ --- ### 🛠️ Open Source Contribution This project is open to all contributors! Whether you're fixing bugs, improving documentation, adding new formatters, or suggesting ideas your contribution is highly appreciated. #### How to Contribute 1. **Fork** this repository 2. Create your **feature branch**: ```bash git checkout -b feat/my-awesome-feature ``` 3. **Commit your changes**: ```bash git commit -m "feat: add my awesome feature" ``` 4. **Push to the branch**: ```bash git push origin feat/my-awesome-feature ``` 5. **Open a pull request** ### 🙌 Contributions Welcome! - 📖 Improve the documentation - 🧪 Add unit tests - 🔍 Add support for more Prisma error codes - 💡 Propose new formatting strategies or ideas