Strickland is a JavaScript validation framework with a focus on extensibility and composability. It is built with pure, universal JavaScript and while it works well with React, Redux, and other UI libraries, Strickland is not coupled to any other library or application type.
Strickland is a unique and robust approach to building validation into your application.
Strickland focuses not on being a bloated collection of validators, but instead on enabling you to create your application’s collection of validators and compose them together easily.
In any validation implementation, there are three separate concerns that you must address, regardless of the libraries used.
The most robust, flexible, and maintainable validation implementations keep these three concerns separated. Validation rules should not be coupled to the validation triggers or how the results will be presented. Validation triggers should not be coupled in any way to the validation rules or how the results will be presented. And the presentation of validation results should not be coupled to how validation was triggered or what the rules were.
With this separation of concerns in mind, Strickland strives to:
To address the core concepts above, there are three core concepts you need to know with Strickland:
Strickland validators are pure functions that accept values and return validation results. Here is an extremely simple validator that validates that the value supplied is the letter ‘A’, returning the validation result as a boolean.
function letterA(value) {
return (value === 'A');
}
Strickland’s default export is a validate
function that accepts a validator function and the value to validate against the validator; it returns the validation result.
import validate from 'strickland';
function letterA(value) {
return (value === 'A');
}
const result = validate(letterA, 'B');
Strickland normalizes validation results to always be objects with isValid
and value
properties.
If the validator returns a falsy value, then isValid
will be false
. If the validator returns true
, then isValid
will be true
. If the validator returns an object, the truthiness of its isValid
property will be used on the result’s isValid
property.
The value
on the validation result will always be the value that was validated.
import validate from 'strickland';
function letterA(value) {
// We can return a validation result as a boolean
return (value === 'A');
// Or as an object
// return {
// isValid: (value === 'A')
// };
}
const result = validate(letterA, 'B');
// Either way, the result will match:
//
// result = {
// isValid: false,
// value: 'B'
// }
MIT