validation-result

Wrapper for unified client-server communication with methods to simplify validation and error handling.

Usage no npm install needed!

<script type="module">
  import validationResult from 'https://cdn.skypack.dev/validation-result';
</script>

README

validation-result

Wrapper for unified client-server and function-function communication with methods to simplify validation and error handling.

function ValidationResult(data) {
    // Wrapped data
    this.data = data;
    // Validity flag
    this.isValid;
    // Lists of messages
    this.errors = [];
    this.warnings = [];
    this.messages = [];

    // ...validation functions...
}

Installation

npm install validation-result

Usage

Include validation-result in your file:

var ValidationResult = require('validation-result');

Then use it to wrap any object

var validation = new ValidationResult(data);

Basic functions and properties

// Check if data are valid
if (!validation.isValid) {
    // Data are not valid
}

// Add error to list of errors
// sets isValid to false
validation.addError(error);

// Add message to message list
validation.addMessage(message);

// Add warning to warnings list
validation.addWarning(warning);

// Append other validations
if (!validation.append(otherValidation)) {
    // Data are not valid
}

Validation functions

Each validation function returns its result. If the result is false, validation.addError(error) is called.

// Check if given property is number
validation.isNumber('path.to.property', error));

// Check if given property is lesser or equal than given value
validation.isLesserOrEqual('path.to.property', value, error));

// Check if given property is greater or equal than given value
validation.isGreaterOrEqual('path.to.property', value, error));

// Check if given property is equal to given value
validation.isEqual('path.to.property', value, error));

// Check if given expression is true
validation.isTrue(expression, error);

// Check if given property is not empty
validation.notEmpty('path.to.property', error));

// Check if given property is defined
validation.isDefined('path.to.property', error));

// Check if given property matches given regex
validation.matches('path.to.property', regex, error));

// Check if given property contains given value
validation.contains('path.to.property', value, error));

Example

// Require module
var ValidationResult = require('validation-result');

// Create example data
var user = {
    Name: "Bob",
    Age: 17,
    Local: {
        Password: "ucantgetme"
    }
}

// Wrap user in validation
var validation = new ValidationResult(user);

// Make validation controls
validation.notEmpty('Name', 'Name field is required');
validation.isGreaterOrEqual('Age', 18, 'You are too young');
validation.isDefined('Hobbies', 'Don\' you have a hobby?');

// Does it make sense to keep going?
if (!validation.isValid) {
    return validation;
}

// Nested validation to avoid access to undefined properties
// If we do not want to append error message, dont
if (validation.isDefined('Local')) {
    validation.notEmpty('Local.Password', 'Password field is required');
}

// Use your own checks
if (myMoodIsBlue) {
    validation.addError('You shall not pass');
}

// Return validation
return validation;

Testing

npm test