UNPKG

joi-schema-validator

Version:

A world-class Joi validation error formatter for structured, user-friendly error handling.

100 lines 4.12 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.validate = validate; exports.validateAsync = validateAsync; exports.validateMiddleware = validateMiddleware; const formatter_1 = require("./formatter"); const joiErrorMessages_1 = require("./joiErrorMessages"); /** * Merge custom error messages with default error messages. * Custom messages override defaults if provided. * * This supports: * - Global error message overrides. * - Field-level error message overrides (e.g., "name.string.min"). */ function mergeMessages(custom) { return custom ? Object.assign(Object.assign({}, joiErrorMessages_1.defaultErrorMessages), custom) : joiErrorMessages_1.defaultErrorMessages; } /** * validate * Synchronous validation function. * * Field-Level Error Message Overrides & Custom Error Formatting Options: * The error messages are formatted using the provided (or default) error messages. * You can supply field-specific messages in the custom messages object. For instance: * { 'name.string.min': 'Name must have at least {#limit} characters.' } * * @param schema - Joi schema definition. * @param input - Data to validate. * @param options - Optional Joi validation options. * @param messages - Custom error message overrides. * @returns ValidationResult<T> */ function validate(schema, input, messages, options) { const mergedMessages = mergeMessages(messages); const { error, value } = schema.validate(input, Object.assign(Object.assign({}, options), { abortEarly: false })); return { value, error: error ? (0, formatter_1.formatError)(error, mergedMessages) : null }; } /** * validateAsync * Async Validation Support: * Handles asynchronous Joi validation, which is useful when validations involve async operations, * such as database lookups or external API calls. * * @param schema - Joi schema definition. * @param input - Data to validate. * @param options - Optional Joi validation options. * @param messages - Custom error message overrides. * @returns Promise resolving to ValidationResult<T> */ function validateAsync(schema, input, messages, options) { return __awaiter(this, void 0, void 0, function* () { const mergedMessages = mergeMessages(messages); try { const value = yield schema.validateAsync(input, Object.assign(Object.assign({}, options), { abortEarly: false })); return { value, error: null }; } catch (err) { const error = err || null; return { value: input, error: (0, formatter_1.formatError)(error, mergedMessages) }; } }); } /** * validateMiddleware * Express Middleware for Validation: * Returns an Express middleware that validates req.body against the provided schema. * If validation fails, it sends a 400 response with formatted errors. * * @param schema - Joi schema definition. * @param messages - Custom error message overrides. * @returns Express middleware function. */ function validateMiddleware(schema, messages) { const mergedMessages = mergeMessages(messages); return (req, res, next) => { const { error } = validate(schema, req.body, mergedMessages); if (error) { return res.status(400).json({ success: false, errors: error }); } next(); }; } //# sourceMappingURL=index.js.map