ForgJs is a JavaScript lightweight object validator. Go check the Quick start section and start coding with love ❤️
Install it via npm by running npm i @cesium133/forgjs
const { Validator, Rule } = require('@cesium133/forgjs');
const vComplexe = new Validator({
age: new Rule({ type: 'int', min: 18, max: 99 }),
dateOfBirth: new Rule({ type: 'date' }),
array: new Rule({ type: 'array', of: new Rule({ type: 'string' }) }),
});
vComplexe.test({
age: 26,
dateOfBirth: new Date(1995, 10, 3),
array: ['1'],
}); /// returns true
You can get custom error messages by doing this:
const vComplexe = new Validator({
age: new Rule({
type: 'int', min: 18, max: 99,
}, 'age must be integer and between 18 and 99'),
dateOfBirth: new Rule({ type: 'date' }, 'date must be a date'),
});
vComplexe.getErrors({
age: 16,
dateOfBirth: 123,
}); // ['age must be integer and between 18 and 99', 'date must be a date']
A Rule
object validates a single value, it can be used like this:
const { Validator, Rule } = require('@cesium133/forgjs');
const floatRule = new Rule({
type: 'float',
min: 100,
}, null);
floatRule.test(2.001); /// returns true;
The only required value is type
!
You can make a rule by simply passing a string if you only need to check the type :
new Rule("int");
- min (int)
- max (int)
- equal (int)
- minLength (int)
- maxLength (int)
- equal (int)
- match: (regex)
- notEmpty (bool)
- after (date)
- before (date)
- between (Array of dates like this [date, date])
- equal (date)
- min (Number)
- max (Number)
- equal (float)
- of (Rule or Validator object)
- notEmpty (bool)
- length (int)
The of
rule checks every element of the array against the rule.
- result
To explain result, what's better than an example:
const { Validator, Rule } = require('@cesium133/forgjs');
function someFunctionThatReturnsAnInt(int) {
return int * 5;
}
const functionTest = new Rule({
type: 'function',
result: {
of: 5,
toBe: new Rule('int'),
},
}, null);
functionTest.test(someFunctionThatReturnsAnInt); /// returns true;
You can check for multiple types with OR
or AND
operators like this:
const intRule = new Rule({
type: 'int|float|number',
}, null);
intRule.test(2) // returns true
This means the test should verify the int
, float
or number
rule
const intRule = new Rule({
type: 'int&number',
}, null);
intRule.test(2.1); // returns false
The result doesn't match the int
rule
Every type has these properties:
- optional
- custom
If optional is set to true
the element is optional and an undefined
value is considered correct.
Example:
const { Validator, Rule } = require('@cesium133/forgjs');
const intRule = new Rule({
type: 'int',
optional: true,
}, null);
intRule.test(); // returns true
Custom allows you to write your own rule, an example is better than a long explanation:
const { Validator, Rule } = require('@cesium133/forgjs');
function isCorrectAge(age, object) {
if (age === Math.floor((new Date() - object.dateOfBirth) / 1000 / 60 / 60 / 24 / 30 / 12)) {
return true;
}
return false;
}
const vComplexe = new Validator({
age: new Rule({
type: 'int', min: 18, max: 99, custom: isCorrectAge,
}),
dateOfBirth: new Rule({ type: 'date' }),
});
vComplexe.test({
age: 23,
dateOfBirth: new Date(1995, 10, 3),
array: ['1'],
}); // returns true
Creating a new type is done using the Rule class like this:
const { Validator, Rule } = require('@cesium133/forgjs');
Rule.addCustom('customInteger', {
min: (val, min) => val - min > 0,
max: (val, max) => val - max < 0,
equal: (val, equal) => val === equal,
type: val => Number.isInteger(val) && val > 0 && val < 100,
});
const customInteger = new Rule({
type: 'customInteger',
min: 10,
}, null);
customInteger.test(11) // returns true
customInteger.test(200) // returns false
- Add function type
- Add error managment
- Add multiple types possible
- Add multiple custom functions
- Add oneOf to primitif types
- Add twitter bot for releases
Folow me on twitter at @forg_js