UNPKG

altheia-async-data-validator

Version:

A very simple, fast and customizable async data validator

150 lines (149 loc) 3.65 kB
"use strict"; 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;