UNPKG

validify.js

Version:

Flexible validation framework

1 lines 11.7 kB
!function(a){if("object"==typeof exports)module.exports=a();else if("function"==typeof define&&define.amd)define(a);else{var b;"undefined"!=typeof window?b=window:"undefined"!=typeof global?b=global:"undefined"!=typeof self&&(b=self),b.validify=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b){b.exports=[{name:"present",aliases:["notNull"],description:"Determine if a value is present/not null",type:"mixed",args:[{name:"test",description:"The test for presence should match this (e.g. present==true)",type:"boolean","default":!0}],evaluate:function(a,b){return b?null!=a:null==a}},{name:"defined",description:"Determine if a value is defined (may still be null)",type:"mixed",evaluate:function(a){return void 0!==a}},{name:"empty",aliases:["blank"],description:"Determine if a value is empty/blank (includes null & undefined)",type:"mixed",evaluate:function(a){return null==a||""===(a+"").replace(/ /g,"")}},{name:"null",description:"Determine if a value is null",type:"mixed",evaluate:function(a){return null==a}},{name:"undefined",description:"Determine if a value is undefined",type:"mixed",evaluate:function(a){return void 0===a}},{name:"equals",aliases:["eq"],description:"Determine if a value is equal to the specified value. Equivalent to a simple === javascript comparison.",type:"mixed",args:[{name:"value",aliases:["val"],description:"The target value to match the provided value against",type:"mixed"}],evaluate:function(a,b){return a===b}},{name:"in",description:"Determine if a value is in the specified array",type:"mixed",args:[{name:"list",aliases:["array","val","value"],description:"The target list to lookup the value in",type:"mixed"}],evaluate:function(a,b){if(null==b||0===b.length)return!1;for(var c=0;c<b.length;c++)if(a===b[c])return!0;return!1}}]},{}],2:[function(a,b){!function(){var a="[a-z0-9\\u007F-\\uffff!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9\\u007F-\\uffff!#$%&'*+\\/=?^_`{|}~-]+)*",c="(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+",d="[a-z0-9](?:[a-z0-9-]*[a-z0-9])?";b.exports=[{name:"email",aliases:["isEmail"],description:"Determine if a value is a valid email address",type:"string",args:[{name:"tlds",description:"List of valid Top Level Domains",type:"[string]","default":[]}],evaluate:function(b,e){var f="^"+a+"@"+c;return f+=null!=e&&e.length>0?"("+e.join("|")+")":d,f+="$",null!=b.match(new RegExp(f))}}]}()},{}],3:[function(a,b,c){c.basic=a("./basic"),c.number=a("./number"),c.string=a("./string"),c.email=a("./email")},{"./basic":1,"./email":2,"./number":4,"./string":5}],4:[function(a,b){b.exports=[{name:"number",aliases:["isNumber"],description:"Determine if a value is a number",type:"mixed",evaluate:function(a){return"number"==typeof a}},{name:"integer",aliases:["int","isInt","isInteger"],description:"Determine if a value is an integer",type:"number",args:[{name:"radix",description:"The radix for the number to parse",type:"number","default":10}],evaluate:function(a,b){return!isNaN(a)&&parseInt(Number(a),b)===a&&""!==(a+"").replace(/ /g,"")}},{name:"float",aliases:["isFloat"],description:"Determine if a value is a float",type:"number",evaluate:function(a){return!isNaN(a)&&parseInt(Number(a),10)!==a&&""!==(a+"").replace(/ /g,"")}},{name:"between",aliases:["range","min","max","lessThan","greaterThan","lessThanOrEqualTo","greaterThanOrEqualTo"],description:"Determine if a numeric value is within the specified range",type:"number",failureMessages:{"default":{between:"The value '%{value}' is not %{name} %{min} and %{max} (inclusive %{inclusive})",range:"The value '%{value}' is not %{name} %{min} and %{max} (inclusive %{inclusive})",min:"The value '%{value}' is not %{name} %{min}",greaterThan:"The value '%{value}' is not %{name} %{min}",greaterThanOrEqualTo:"The value '%{value}' is not %{name} %{min}",max:"The value '%{value}' is not %{name} %{max}",lessThan:"The value '%{value}' is not %{name} %{max}",lessThanOrEqualTo:"The value '%{value}' is not %{name} %{max}"}},args:[{name:"min",aliases:["minimum"],description:"The number the value must be greater than or equal to",type:"number"},{name:"max",aliases:["maximum"],description:"The number the value must be less than or equal to",type:"number"},{name:"inclusive",description:"Whether or not the min & max are inclusive as valid values","default":!0,aliasDefaults:{greaterThan:!1,lessThan:!1},type:"boolean"}],evaluate:function(a,b,c,d){return(null==b||d&&a>=b||!d&&a>b)&&(null==c||d&&c>=a||!d&&c>a)}},{name:"odd",description:"Determine if a value is an odd integer",type:"number",evaluate:function(a){return!isNaN(a)&&null!=a&&a%2===1}},{name:"even",description:"Determine if a value is an even integer",type:"number",evaluate:function(a){return!isNaN(a)&&null!=a&&a%2===0}},{name:"multipleOf",description:"Determine if a value is a multiple of another integer",type:"number",args:[{name:"factor",description:"The number the value must be a multiple of",type:"number"}],evaluate:function(a,b){return!isNaN(a)&&a%b===0}},{name:"factor",description:"Determine if a value is a factor of another integer",type:"number",args:[{name:"multiple",description:"The number the value must be a factor of",type:"number"}],evaluate:function(a,b){return!isNaN(a)&&b%a===0}}]},{}],5:[function(a,b){b.exports=[{name:"length",aliases:["strlen"],description:"Ensure the length of the string is within range",type:"string",args:[{name:"length",aliases:["len"],description:"The length must be exactly this many characters long",type:"number"},{name:"min",description:"The length must be at least min characters long",type:"number"},{name:"max",description:"The length must be at least max characters long",type:"number"},{name:"inclusive",description:"Whether or not the min & max length are inclusive as valid values","default":!0,type:"boolean"}],evaluate:function(a,b,c,d,e){return null==a&&(a=""),null!=b&&(c=d=b,e=!0),(null==c||e&&a.toString().length>=c||!e&&a.toString().length>c)&&(null==d||e&&a.toString().length<=d||!e&&a.toString().length<d)}},{name:"matches",aliases:["format"],description:"Ensure the string matches the given pattern",type:"string",args:[{name:"pattern",aliases:["format"],description:"The pattern the string must match",type:"string"}],evaluate:function(a,b){return null==a&&(a=""),null==a.match(b)?!1:!0}}]},{}],6:[function(a,b){"use strict";!function(){function c(a){if(a){var b=a.toString().replace(l,""),c=b.slice(b.indexOf("(")+1,b.indexOf(")")).match(m);return null===c&&(c=[]),c}return[]}function d(){}function e(a){this.name=a.name,this.description=a.description,this.type=a.type,this.args=a.args,this.evaluate=a.evaluate,this.aliases=a.aliases,this.failureMessages=a.failureMessages}function f(a){try{var b=new e(a),c=a.name;if(o[c]=b,d.prototype[c]=function(){for(var a=[c],b=(arguments&&arguments.length>=1?arguments[0]:null,arguments&&arguments.length>=2?arguments[1]:null,0);b<arguments.length;b++)a.push(arguments[b]);return e.prototype.validate.apply(this,a)}.bind(b),a.aliases&&a.aliases.length>0)for(var f=0;f<a.aliases.length;f++){var g=a.aliases[f];o[g]=b,d.prototype[g]=function(){for(var a=[this.alias],b=(arguments&&arguments.length>=1?arguments[0]:null,arguments&&arguments.length>=2?arguments[1]:null,0);b<arguments.length;b++)a.push(arguments[b]);return e.prototype.validate.apply(this.validator,a)}.bind({validator:b,alias:g})}}catch(h){}}function g(a,b,c,d,e){if(e&&e.failures)if(b!==!1&&b&&b.length>0)for(var f=0;f<b.length;f++){var g=b[f];h(a,g,c,d,e)}else h(a,"default",c,d,e)}function h(a,b,c,d,e){var f;switch(b){case"invalidType":f="Validator %{name} failed for value '%{value}' due to invalid type '%{type}'";break;case"missingValue":f="Validator %{name} value missing";break;case"emptyValue":f="Validator %{name} value empty";break;default:f="Validator %{name} failed for value '%{value}'"}var g;if(e.failureMessages&&e.failureMessages[b]?g=e.failureMessages:a.failureMessages&&a.failureMessages[b]&&(g=a.failureMessages),g&&"string"==typeof g[b]?f=g[b]:g&&g[b]&&g[b][c]&&(f=g[b][c]),f=f.replace(new RegExp("%{value}","g"),d),f=f.replace(new RegExp("%{name}","g"),c),f=f.replace(new RegExp("%{type}","g"),typeof d),a.args)for(var h=0;h<a.args.length;h++){var i=a.args[h],j=i.default;e[i.name]&&(j=e[i.name]),f=f.replace(new RegExp("%{"+i.name+"}","g"),j)}if(Array.isArray(e.failures)){var k={};k.validatorName=c,k.code=b,k.message=f,e.failures.push(k)}}function i(a){for(var b=0;b<a.length;b++){var c=a[b];f(c)}}function j(a){return o[a]}function k(a,b,c){var d=0;null==c&&(c="and"),Array.isArray(b)||(b=[b]);for(var e=0;e<b.length;e++){var f=b[e];for(var g in f)if(f.hasOwnProperty(g)){var h,i=f[g];if(-1!==g.indexOf(".")&&(h=g.split("."),g=h.shift()),a.hasOwnProperty(g)&&Array.isArray(a[g])){for(var l=null!=h?h.join("."):"*",m=!0,o=0;o<a[g].length;o++){var p=a[g][o],q={};if(q[l]=i,k(p,q)===!1){m=!1;break}}m===!1&&d++}else for(var r in i)if(i.hasOwnProperty(r)){var s=i[r],t=n[r],u=j(r);if(null==t)throw new Error("Validator "+r+" not found");switch(typeof s){case"boolean":case"string":case"number":case"date":if(u.args&&u.args.length>0){var v=u.args[0].name,w={};w[v]=s,s=w}}if(!t("*"===g?a:a[g],s)){d++;break}}}}return 0===d&&("and"===c||"all"===c)||(0===d||d<b.length)&&("or"===c||"any"===c)||d===b.length-1&&("xor"===c||"one"===c)?!0:!1}var l=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,m=/([^\s,]+)/g;Function.prototype.bind=Function.prototype.bind||function(a){var b=this;return function(){return b.apply(a,arguments)}};var n;e.prototype.validate=function(a,b,d){var e,f;if(null==this.evaluate)throw new Error("no evaluate function found for "+a);var i=this.type?this.type:"mixed",j=d&&null!=d.failOnWrongType?d.failOnWrongType:this.failOnWrongType,k=d&&null!=d.failOnMissing?d.failOnMissing:this.failOnMissing,l=d&&null!=d.failOnEmpty?d.failOnEmpty:this.failOnEmpty,m=d&&null!=d.trimStrings?d.trimStrings:this.trimStrings;if(j&&typeof b!==i)return h(this,"invalidType",a,b,d),!1;if(k&&void 0===b)return h(this,"missingValue",a,b,d),!1;if(l&&(void 0===b||null===b||""===b||"object"==typeof b&&0===Object.keys(b).length||Array.isArray(b)&&0===b.length))return h(this,"emptyValue",a,b,d),!1;var o=[m&&"string"===i&&"string"==typeof b?b.trim():b],p=c(this.evaluate);for(e=1;e<p.length;e++){var q=p[e],r=d?d[q]:void 0;if("validify"===q)r=n;else if(this.args[e-1]){{var s=this.args[e-1],t=s?s.type:"undefined",u=s.failOnWrongType||j;s.failOnMissing||k,s.failOnEmpty||l,s.trimStrings||m}if(r&&u&&"mixed"!==t&&typeof r!==t){var v;if(!(v=t.match(/^\[([^\]]+)\]$/))||!Array.isArray(r))return!1;var w=v[1];if("mixed"!==w)for(f=0;f<r.length;f++)if(typeof r[f]!==w)return!1}var x=s.aliases;if(void 0===r&&x&&null!=d)for(f=0;f<x.length;f++)if(void 0!==d[x[f]]){r=d[x[f]];break}if(void 0===r&&null!=s&&null!=s.aliasDefaults&&null!=s.aliasDefaults[a]?r=s.aliasDefaults[a]:void 0===r&&s&&(r=s.default),k&&null==r)throw new Error("parameter '"+q+"' is missing");if(l&&(""===r||""!==(r+"").replace(/ /g,"")))throw new Error("parameter '"+q+"' is empty")}o.push(r)}var y=this.evaluate.apply(this,o);return y!==!0?(g(this,y,a,b,d),!1):y};var o={};d.prototype.registerValidator=f,d.prototype.registerValidators=i,d.prototype.getValidator=j,d.prototype.validate=k,d.prototype.Validator=e,n=new d;var p=a("./lib/validators");for(var q in p)if(p.hasOwnProperty(q)){var r=p[q];i(r)}b.exports=n}()},{"./lib/validators":3}]},{},[6])(6)});