@shanewas/form-validation
v1.3.1
Published
A powerful and flexible validation engine for forms with support for complex rules, dependencies, and custom validations.
Downloads
113
Maintainers
Readme
@shanewas/form-validation
A flexible validation engine for forms with support for complex rules, dependencies, and custom validations.
Features
- Multiple validation types out of the box
- Complex field dependencies
- Type checking and length validation
- Custom validation functions
- Flexible rule configuration
- Priority-based validation
- Detailed error reporting
- Works in both Node.js and browsers
Installation
npm install @shanewas/form-validation
Quick Start
import { ValidationController } from '@shanewas/form-validation';
// Initialize the validator
const validator = new ValidationController();
// Your form data
const formData = {
name: { fieldId: "name", value: "john" },
age: { fieldId: "age", value: 18 },
email: { fieldId: "email", value: "[email protected]" }
};
// Define validation rules
const rules = [{
ruleId: "userValidation",
conditions: [{
fieldId: "name",
type: "REQUIRED",
errorMessage: "Name is required"
}, {
fieldId: "age",
type: "COMPARISON",
operator: "GREATER_THAN",
value: 17,
errorMessage: "Must be 18 or older"
}]
}];
// Validate
try {
const result = await validator.validateForm(formData, rules);
console.log(result);
} catch (error) {
console.error('Validation failed:', error);
}
Validation Types
REQUIRED
: Ensures field has a valueCOMPARISON
: Compare values using operatorsDEPENDENCY
: Field validation based on other fieldsTYPE_CHECK
: Validate data typesLENGTH_CHECK
: Check string lengthsEMPTY_CHECK
: Validate empty/non-emptyREGEX
: Pattern matchingCUSTOM
: Custom validation functions
Rule Structure
{
rules: [{
ruleId: string,
conditions: [{
pdfId: string,
fieldId: string,
type: string,
operator: string,
value: any,
expectedType: string,
minLength: number,
maxLength: number,
dependentFieldId: string,
dependentType: string,
dependentOperator: string,
dependentValue: any,
errorMessage: string,
description: string,
documentation: string
}]
}]
}
Operators
EQUALS
NOT_EQUALS
GREATER_THAN
LESS_THAN
GREATER_THAN_OR_EQUAL
LESS_THAN_OR_EQUAL
CONTAINS
STARTS_WITH
ENDS_WITH
BETWEEN
EMPTY
NOT_EMPTY
Advanced Usage
Custom Validation
const rules = [{
ruleId: "customValidation",
conditions: [{
fieldId: "password",
type: "CUSTOM",
customFunction: async (value, formData) => {
// Your custom validation logic
return value.length < 8 ? "Password must be at least 8 characters" : null;
}
}]
}];
Dependent Fields
const rules = [{
ruleId: "dependencyCheck",
conditions: [{
fieldId: "state",
type: "DEPENDENCY",
dependentFieldId: "country",
dependentOperator: "EQUALS",
dependentValue: "USA",
errorMessage: "State is required for USA"
}]
}];
Type Checking
const rules = [{
ruleId: "typeValidation",
conditions: [{
fieldId: "age",
type: "TYPE_CHECK",
expectedType: "number",
errorMessage: "Age must be a number"
}]
}];
Validation Result
{
hasErrors: boolean,
errorCount: number,
details: {
[fieldId]: [{
message: string,
type: string,
details: object
}]
},
summary: [{
type: 'error',
fieldId: string,
message: string
}]
}
Requirements
- Node.js >= 16.0.0
- ES Modules support
Contributing
We welcome contributions! Please see our Contributing Guidelines for details.
License
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
Support
Acknowledgments
Special thanks to all contributors who help make this project better!