@shanewas/form-validation

1.3.1 • Public • Published

@shanewas/form-validation

npm version License: GPL v3 Node.js Version

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: "john@example.com" }
};

// 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 value
  • COMPARISON: Compare values using operators
  • DEPENDENCY: Field validation based on other fields
  • TYPE_CHECK: Validate data types
  • LENGTH_CHECK: Check string lengths
  • EMPTY_CHECK: Validate empty/non-empty
  • REGEX: Pattern matching
  • CUSTOM: 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!

Package Sidebar

Install

npm i @shanewas/form-validation

Weekly Downloads

113

Version

1.3.1

License

GPL-3.0

Unpacked Size

72.1 kB

Total Files

22

Last publish

Collaborators

  • shanewas