UNPKG

prisma-error-formatter

Version:

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

293 lines (292 loc) 8.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parsePrismaError = parsePrismaError; const library_1 = require("@prisma/client/runtime/library"); function parsePrismaError(exception) { if (exception instanceof library_1.PrismaClientKnownRequestError) { return parseKnownRequestError(exception); } if (exception instanceof library_1.PrismaClientValidationError) { return parseValidationError(exception); } if (exception instanceof library_1.PrismaClientInitializationError) { return parseInitializationError(exception); } return []; } function parseKnownRequestError(exception) { const code = exception.code; const meta = exception.meta; switch (code) { case "P2002": { const target = Array.isArray(meta === null || meta === void 0 ? void 0 : meta.target) ? meta.target[0] : (meta === null || meta === void 0 ? void 0 : meta.target) || "field"; return [ { path: target, message: "Unique constraint failed", }, ]; } case "P2025": { return [ { path: (meta === null || meta === void 0 ? void 0 : meta.model_name) || "record", message: "Record not found", }, ]; } case "P2003": { return [ { path: (meta === null || meta === void 0 ? void 0 : meta.field_name) || "relation", message: "Foreign key constraint failed", }, ]; } case "P2000": { return [ { path: (meta === null || meta === void 0 ? void 0 : meta.field_name) || "field", message: `Value too long for column ${meta === null || meta === void 0 ? void 0 : meta.field_name}`, }, ]; } case "P2001": { return [ { path: (meta === null || meta === void 0 ? void 0 : meta.field_name) || "record", message: "Record does not exist", }, ]; } case "P2004": { return [ { path: "database", message: "A constraint failed on the database", }, ]; } case "P2005": { return [ { path: (meta === null || meta === void 0 ? void 0 : meta.field_name) || "field", message: `Invalid value for field ${meta === null || meta === void 0 ? void 0 : meta.field_name}`, }, ]; } case "P2006": { return [ { path: (meta === null || meta === void 0 ? void 0 : meta.field_name) || "field", message: `Invalid value for field ${meta === null || meta === void 0 ? void 0 : meta.field_name}`, }, ]; } case "P2007": { return [ { path: "database", message: "Database error", }, ]; } case "P2008": { return [ { path: "query", message: "Failed to parse query", }, ]; } case "P2009": { return [ { path: "query", message: "Failed to validate query", }, ]; } case "P2010": { return [ { path: "query", message: "Raw query failed", }, ]; } case "P2011": { return [ { path: "database", message: "Null constraint violation", }, ]; } case "P2012": { return [ { path: "database", message: "Missing a required value", }, ]; } case "P2013": { return [ { path: "relation", message: "Missing the required relation", }, ]; } case "P2014": { return [ { path: "relation", message: "Relation would be violated", }, ]; } case "P2015": { return [ { path: "query", message: "Related record not found", }, ]; } case "P2016": { return [ { path: "query", message: "Query interpretation error", }, ]; } case "P2017": { return [ { path: "relation", message: "Records are not connected", }, ]; } case "P2018": { return [ { path: "relation", message: "Required connected records not found", }, ]; } case "P2019": { return [ { path: "input", message: "Input error", }, ]; } case "P2020": { return [ { path: "value", message: "Value out of range", }, ]; } case "P2021": { return [ { path: "table", message: `Table ${meta === null || meta === void 0 ? void 0 : meta.table} does not exist in the current database`, }, ]; } case "P2022": { return [ { path: "column", message: `Column ${meta === null || meta === void 0 ? void 0 : meta.column} does not exist`, }, ]; } case "P2023": { return [ { path: "database", message: "Database schema inconsistent", }, ]; } case "P2024": { return [ { path: "database", message: "Timed out fetching a new connection from the connection pool", }, ]; } case "P2025": { return [ { path: (meta === null || meta === void 0 ? void 0 : meta.model_name) || "record", message: "Record not found", }, ]; } case "P2026": { return [ { path: "database", message: "Current provider does not support this feature", }, ]; } case "P2027": { return [ { path: "database", message: "Multiple database errors", }, ]; } default: { return [ { path: "database", message: exception.message || "Database error occurred", }, ]; } } } function parseValidationError(exception) { const message = exception.message; const match = message.match(/Argument `(\w+)` is missing/); if (match) { const field = match[1]; return [ { path: field, message: `Argument \`${field}\` is missing`, }, ]; } return [ { path: "query", message: message || "Invalid query", }, ]; } function parseInitializationError(_exception) { return [ { path: "database", message: "Failed to connect to the database", }, ]; }