UNPKG

jaune-util

Version:
146 lines (125 loc) 4.83 kB
###* * @file Source code for Validator. * @author Alvaro Juste ### "use strict" {UUID} = require './uuid' # coffeelint: disable=max_line_length RegExps = email : /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i, # .ignore time : /^(([0-9])|([0-1][0-9])|(2[0-3]))(:(([0-9])|([0-5][0-9]))){1,2}$/, defaultStandardDate : /^\d{4}-\d{1,2}-\d{1,2}$/ # coffeelint: enable=max_line_length ###* * @function Validates if input string is a UUID. * @param {*} input The input to validate. * @returns {Boolean} True when valid UUID. ### isUUID = (input) -> try if input.length in [32, 36] then UUID.parse input ###* * @function Checks if an email string is valid. * @param {*} input The input to validate. * @returns {Boolean} True when valid Email. ### isEmail = (input) -> RegExps.email.test input ###* * @function Checks if a string is empty and also trims. * @param {*} input The input to validate. * @returns {Boolean} True when empty string. ### isEmptyString = (input) -> typeof input is 'string' and input.trim().length is 0 ###* * @function Checks if a input is time. * @param {*} input The input to validate. * @returns {Boolean} True when valid time. ### isTime = (input) -> typeof input is 'string' and RegExps.time.test input ###* * @function Checks if a input is standard date. * @param {*} input The input to validate. * @returns {Boolean} True when valid standard date. ### isStandardDate = (input) -> typeof input is 'string' and RegExps.defaultStandardDate.test input ###* * @function Check if input is a string and length is correct. * @param {*} input Input to be validated * @param {Number} [maxLength] Max possible length. * @param {Object} [opts.canBeEmpty] When true string can be empty. * @returns {Boolean} The validation. ### checkStringLength = (input = '', maxLength, opts = {}) -> input ?= '' return no unless typeof input is 'string' opts.canBeEmpty = false unless typeof opts.canBeEmpty is 'boolean' input = input.trim() unless opts.dontTrim (opts.canBeEmpty is yes or input.length isnt 0) and input.length <= maxLength ###* * @function Checks if input is a number and if also if inside bounds. * @param {*} input Input to be validated * @param {Number} [min] Minimum possible value. * @param {Number} [max] Maximum possible value. * @return {Boolean} True when valid. ### isNumber = (input, min, max) -> min = min ? Number.MIN_VALUE unless min is 0 max = max ? Number.MAX_VALUE unless max is 0 typeof input is 'number' and not isNaN(input) and input >= min and input <= max ###* * @function Validates if it's a valid boolean convertible type. * @param {*} input Input * @returns {Boolean} True when convertible to boolean. ### isBoolean = (input) -> typeof input isnt 'undefined' ###* * @function Validates if it's a valid string. * @param {*} input Input * @param {Boolean} [canBeNull] True when input can be null. * @param {Boolean} [canBeUndefined] True when input can be undefined. * @returns {Boolean} True when valid string. ### isString = (input, canBeNull, canBeUndefined) -> typeof input is 'string' or canBeNull is yes and input is null or canBeUndefined is true and typeof input is 'undefined' ###* * @function Validates if it's a valid object. * @param {*} input Input * @param {Boolean} [canBeNull] True when input can be null. * @param {Boolean} [canBeUndefined] True when input can be undefined. * @returns {Boolean} True when valid object. ### isObject = (input, canBeNull, canBeUndefined) -> typeof input is 'object' or input is null and canBeNull is yes or typeof input is 'undefined' and canBeUndefined is yes ###* * @function Validates if it's a array * @param {*} input Input * @param {Boolean} [canBeEmpty] True when array can be empty * @returns {Boolean} True when valid array. ### isArray = (input, canBeEmpty) -> input instanceof Array and (input.length isnt 0 or canBeEmpty is yes) ###* * @function Validates if it's a valid function. * @param {*} input Input * @param {Number} [numberOfArguments] Number of arguments the function * must have. * @returns {Boolean} True when valid object. ### isFunction = (input, numberOfArguments) -> typeof input is 'function' and (not isNumber(numberOfArguments) or input.length is numberOfArguments) ###* * @function Validates if it's a valid date. * @param {*} input Input * @returns {Boolean} True when valid date. ### isDate = (input) -> (isNumber(input) or isString(input) or input instanceof Date) and not isNaN(new Date(input).getTime()) module.exports = Validator : { isUUID, isEmail, isEmptyString, isTime, isStandardDate, checkStringLength, isNumber, isBoolean, isString, isObject, isArray, isFunction, isDate}