qgenutils
Version:
A security-first Node.js utility library providing authentication, HTTP operations, URL processing, validation, datetime formatting, and template rendering. Designed as a lightweight alternative to heavy npm packages with comprehensive error handling and
88 lines (79 loc) • 3.09 kB
JavaScript
/**
* Validate Required Text Fields with Optional Minimum Length
*
* RATIONALE: Form validation requires consistent handling of required fields
* with appropriate length validation. This function provides standardized
* validation for text inputs with customizable minimum length requirements.
*
* IMPLEMENTATION STRATEGY:
* - Sanitize input to remove potentially dangerous characters
* - Check for presence and non-empty values after sanitization
* - Support configurable minimum length requirements
* - Provide descriptive error messages with field names
* - Log validation attempts for debugging and monitoring
*
* VALIDATION RULES:
* - Field must be present (not null/undefined)
* - Field must be a string type
* - Field must have content after sanitization and trimming
* - Field must meet minimum length requirement if specified
* - Length is measured after trimming whitespace
*
* ERROR MESSAGE PATTERNS:
* - Missing field: "{fieldName} is required"
* - Too short: "{fieldName} must be at least {N} character(s) long"
* - Grammatically correct pluralization for length requirements
*
* @param {string} value - Value to validate
* @param {string} fieldName - Human-readable field name for error messages
* @param {number} minLength - Minimum required length (default: 1)
* @returns {string} Empty string if valid, descriptive error message if invalid
* @throws Never throws - returns error message on validation failure
*/
const { qerrors } = require('qerrors');
const sanitizeString = require('../utilities/string/sanitizeString');
const isValidString = require('./isValidString');
function validateRequired(value, fieldName, minLength = 1) {
if (!isValidString(value)) {
const errorMsg = `${fieldName} is required`;
qerrors(new Error(`Required field validation failed - missing or invalid input`), `validateRequired`, {
value,
fieldName,
minLength,
inputType: typeof value,
errorMsg
});
return errorMsg;
}
const sanitizedValue = sanitizeString(value);
if (!sanitizedValue.trim()) {
const errorMsg = `${fieldName} is required`;
qerrors(new Error(`Required field validation failed - empty after sanitization`), `validateRequired`, {
originalValue: value,
sanitizedValue,
fieldName,
minLength,
errorMsg
});
return errorMsg;
}
if (sanitizedValue.trim().length < minLength) {
const errorMsg = `${fieldName} must be at least ${minLength} character${minLength === 1 ? `` : `s`} long`;
qerrors(new Error(`Required field validation failed - insufficient length`), `validateRequired`, {
sanitizedValue,
fieldName,
actualLength: sanitizedValue.trim().length,
minLength,
errorMsg
});
return errorMsg;
}
qerrors(new Error(`Required field validation succeeded`), `validateRequired`, {
sanitizedValue,
fieldName,
actualLength: sanitizedValue.trim().length,
minLength
});
return ""; // Empty string indicates successful validation
}
module.exports = validateRequired;