altheia-async-data-validator
Version:
A very simple, fast and customizable async data validator
150 lines (149 loc) • 3.65 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.TypeNumber = exports.messages = void 0;
const base_1 = require("./base");
exports.messages = {
'number.typeof': (name) => `${name} must be a valid number`,
'number.min': (name, args) => `${name} must be at least ${args.min}`,
'number.max': (name, args) => `${name} must be less than or equal to ${args.max}`,
'number.integer': (name) => `${name} must be an integer`,
'number.unsigned': (name) => `${name} must be an unsigned number`,
'number.positive': (name) => `${name} must be a positive number`,
'number.negative': (name) => `${name} must be a negative number`,
'number.in': (name, args) => `${name} must be one of [${args.obj}]`,
'number.not': (name) => `${name} contains forbidden value`,
};
/**
* Number class
*/
class TypeNumber extends base_1.TypeBase {
/**
* Constructor
*/
constructor() {
super();
this.name = 'number';
this.typeof();
}
/**
* Try to cast value
*
* @param {mixed} value
* @return {Number|mixed}
*/
_cast(value) {
if (typeof value === 'string') {
return parseFloat(value);
}
return value;
}
/**
* Test to validate the type of the value
*
* @return {this}
*/
typeof() {
this.test('typeof', (val) => {
return typeof val === 'number' && !isNaN(val) && isFinite(val);
});
return this;
}
/**
* Force a number to be equal or more to the value passed.
*
* @param {number} min
* @return {this}
*/
min(min) {
this.test('min', (num) => {
return num >= min;
}, { min });
return this;
}
/**
* Force a number to be equal or less to the value passed.
*
* @param {number} max
* @return {this}
*/
max(max) {
this.test('max', (num) => {
return num <= max;
}, { max });
return this;
}
/**
* Force a number to be an integer.
*
* @return {this}
*/
integer() {
this.test('integer', (num) => {
return Number.isSafeInteger(num) === true;
});
return this;
}
/**
* Force a number to be unsigned.
*
* @return {this}
*/
unsigned() {
this.test('unsigned', (num) => {
return num >= 0;
});
return this;
}
/**
* Force a number to be greater than 0.
*
* @return {this}
*/
positive() {
this.test('positive', (num) => {
return num > 0;
});
return this;
}
/**
* Force a number to be lesser than 0.
*
* @return {this}
*/
negative() {
this.test('negative', (num) => {
return num < 0;
});
return this;
}
/**
* Force a number to be equal to one of the value passed in the set.
*
* @param {...number} obj
* @return {this}
*/
in(...obj) {
this.test('in', (num) => {
return obj.includes(num) === true;
}, { obj });
return this;
}
/**
* Force a number to be different to all of the value passed in the set.
*
* @param {...number} obj
* @return {this}
*/
not(...obj) {
this.test('not', (num) => {
return obj.includes(num) === false;
}, { obj });
return this;
}
}
exports.TypeNumber = TypeNumber;
const def = {
Class: TypeNumber,
messages: exports.messages,
};
exports.default = def;
;