Comparing version 0.0.5 to 0.0.6
400
index.js
@@ -5,3 +5,3 @@ //----------------------------------------------------- | ||
// Site: 666.io | ||
// Version: 0.00.005 | ||
// Version: 0.00.006 | ||
// | ||
@@ -15,2 +15,5 @@ //----------------------------------------------------- | ||
var customTypesStore = {}, | ||
customRulesStore = {}; | ||
var gVPhones = { | ||
@@ -29,265 +32,244 @@ "ru-RU": /^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/, | ||
var gVMethods = { | ||
"null": function(input) { | ||
return input === null; | ||
}, | ||
function validation(use, input, options) { | ||
switch(use) { | ||
case "null": | ||
return input === null; | ||
"nan": function(input) { | ||
return typeof(input) === "number" && isNaN(input); | ||
}, | ||
case "nan": | ||
return typeof(input) === "number" && isNaN(input); | ||
"finite": function(input) { | ||
return typeof(input) === "number" && isFinite(input); | ||
}, | ||
case "finite": | ||
return typeof(input) === "number" && isFinite(input); | ||
//-----------------------]> | ||
//-----------------------]> | ||
"boolean": function(input) { | ||
return typeof(input) === "boolean"; | ||
}, | ||
case "boolean": | ||
return typeof(input) === "boolean"; | ||
"string": function(input, options) { | ||
if(typeof(input) !== "string") | ||
return false; | ||
case "string": | ||
if(typeof(input) !== "string") | ||
return false; | ||
if( | ||
(typeof(options.enum) !== "undefined" && options.enum.indexOf(input) === -1) || | ||
(typeof(options.pattern) !== "undefined" && !options.pattern.test(input)) || | ||
(typeof(options.min) !== "undefined" && input.length < options.min) || | ||
(typeof(options.max) !== "undefined" && input.length > options.max) | ||
) | ||
return false; | ||
if( | ||
(typeof(options.enum) !== "undefined" && options.enum.indexOf(input) === -1) || | ||
(typeof(options.pattern) !== "undefined" && !options.pattern.test(input)) || | ||
(typeof(options.min) !== "undefined" && input.length < options.min) || | ||
(typeof(options.max) !== "undefined" && input.length > options.max) | ||
) | ||
return false; | ||
return true; | ||
}, | ||
return true; | ||
"integer": function(input, options) { | ||
if(typeof(input) !== "number" || isNaN(input)) | ||
return false; | ||
case "integer": | ||
if(typeof(input) !== "number" || isNaN(input)) | ||
return false; | ||
if( | ||
(input !== parseInt(input, 10)) || | ||
(typeof(options.enum) !== "undefined" && options.enum.indexOf(input) === -1) || | ||
(typeof(options.min) !== "undefined" && input < options.min) || | ||
(typeof(options.max) !== "undefined" && input > options.max) | ||
) | ||
return false; | ||
if( | ||
(input !== parseInt(input, 10)) || | ||
(typeof(options.enum) !== "undefined" && options.enum.indexOf(input) === -1) || | ||
(typeof(options.min) !== "undefined" && input < options.min) || | ||
(typeof(options.max) !== "undefined" && input > options.max) | ||
) | ||
return false; | ||
return true; | ||
}, | ||
return true; | ||
"float": function(input, options) { | ||
if(typeof(input) !== "number" || isNaN(input)) | ||
return false; | ||
case "float": | ||
if(typeof(input) !== "number" || isNaN(input)) | ||
return false; | ||
if( | ||
(typeof(options.enum) !== "undefined" && options.enum.indexOf(input) === -1) || | ||
(typeof(options.min) !== "undefined" && input < options.min) || | ||
(typeof(options.max) !== "undefined" && input > options.max) | ||
) | ||
return false; | ||
if( | ||
(typeof(options.enum) !== "undefined" && options.enum.indexOf(input) === -1) || | ||
(typeof(options.min) !== "undefined" && input < options.min) || | ||
(typeof(options.max) !== "undefined" && input > options.max) | ||
) | ||
return false; | ||
return true; | ||
}, | ||
return true; | ||
"date": function(input) { | ||
if(!input || !(input instanceof(Date)) || !input.getTime()) | ||
return false; | ||
case "date": | ||
if(!input || !(input instanceof(Date)) || !input.getTime()) | ||
return false; | ||
return true; | ||
}, | ||
return true; | ||
"hashTable": function(input) { | ||
if(Array.isArray(input) || !input) | ||
case "hashTable": | ||
if(Array.isArray(input) || !input) | ||
return false; | ||
if(typeof(input) === "object") | ||
return true; | ||
return false; | ||
if(typeof(input) === "object") | ||
return true; | ||
case "array": | ||
if(!Array.isArray(input)) | ||
return false; | ||
return false; | ||
}, | ||
if( | ||
(typeof(options.min) !== "undefined" && input.length < options.min) || | ||
(typeof(options.max) !== "undefined" && input.length > options.max) | ||
) | ||
return false; | ||
"array": function(input, options) { | ||
if(!Array.isArray(input)) | ||
return false; | ||
return true; | ||
if( | ||
(typeof(options.min) !== "undefined" && input.length < options.min) || | ||
(typeof(options.max) !== "undefined" && input.length > options.max) | ||
) | ||
return false; | ||
case "json": | ||
if(typeof(input) !== "object") | ||
return false; | ||
return true; | ||
}, | ||
return true; | ||
"json": function(input) { | ||
if(typeof(input) !== "object") | ||
return false; | ||
//-----------------------]> | ||
return true; | ||
}, | ||
case "required": | ||
return !( | ||
input === null || typeof(input) === "undefined" || | ||
(typeof(input) === "number" && input !== input) || | ||
(typeof(input) === "string" && !input.length) || | ||
(input instanceof(Date) && !input.getTime()) | ||
); | ||
//-----------------------]> | ||
case "notEmpty": | ||
return typeof(input) === "string" && !input.match(/^[\s\t\r\n]*$/); | ||
"required": function(input) { | ||
return !( | ||
input === null || typeof(input) === "undefined" || | ||
(typeof(input) === "number" && input !== input) || | ||
(typeof(input) === "string" && !input.length) || | ||
(input instanceof(Date) && !input.getTime()) | ||
); | ||
}, | ||
case "lowercase": | ||
return typeof(input) === "string" && input === input.toLowerCase() | ||
"notEmpty": function(input) { | ||
if(typeof(input) === "string" && input.match(/^[\s\t\r\n]*$/)) | ||
return false; | ||
case "uppercase": | ||
return typeof(input) === "string" && input === input.toUpperCase() | ||
return gVMethods.required(input); | ||
}, | ||
//-----------------------]> | ||
"lowercase": function(input) { | ||
return typeof(input) === "string" && input === input.toLowerCase() | ||
}, | ||
case "alphanumeric": | ||
return typeof(input) === "string" && !!input.match(/^[a-zA-Z0-9]+$/); | ||
"uppercase": function(input) { | ||
return typeof(input) === "string" && input === input.toUpperCase() | ||
}, | ||
case "alpha": | ||
return typeof(input) === "string" && !!input.match(/^[a-zA-Z]+$/); | ||
//-----------------------]> | ||
case "numeric": | ||
return typeof(input) === "string" && !!input.match(/^[0-9]+$/); | ||
"alphanumeric": function(input) { | ||
return typeof(input) === "string" && !!input.match(/^[a-zA-Z0-9]+$/); | ||
}, | ||
case "hexadecimal": | ||
return typeof(input) === "string" && !!input.match(/^[0-9a-fA-F]+$/); | ||
"alpha": function(input) { | ||
return typeof(input) === "string" && !!input.match(/^[a-zA-Z]+$/); | ||
}, | ||
case "email": | ||
return typeof(input) == "string" && !!input.match(/^(?:[\w\!\#\$\%\&\"\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\"\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/); | ||
"numeric": function(input) { | ||
return typeof(input) === "string" && !!input.match(/^[0-9]+$/); | ||
}, | ||
case "url": | ||
return typeof(input) === "string" && !!input.match(/^(?!mailto:)(?:(?:https?|ftp|ssh|ws|gopher|news|telnet|ldap):\/\/)?(?:\S+(?::\S*)?@)?(?:(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))|localhost)(?::\d{2,5})?(?:\/[^\s]*)?$/i); | ||
"hexadecimal": function(input) { | ||
return typeof(input) === "string" && !!input.match(/^[0-9a-fA-F]+$/); | ||
}, | ||
case "mongoId": | ||
return typeof(input) === "string" && !!input.match(/^[0-9a-fA-F]{24}$/); | ||
"email": function(input) { | ||
return typeof(input) == "string" && !!input.match(/^(?:[\w\!\#\$\%\&\"\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\"\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/); | ||
}, | ||
//-----------------------]> | ||
"url": function(input) { | ||
return typeof(input) === "string" && !!input.match(/^(?!mailto:)(?:(?:https?|ftp|ssh|ws|gopher|news|telnet|ldap):\/\/)?(?:\S+(?::\S*)?@)?(?:(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))|localhost)(?::\d{2,5})?(?:\/[^\s]*)?$/i); | ||
}, | ||
case "hexColor": | ||
if(typeof(input) !== "string") | ||
return false; | ||
"mongoId": function(input) { | ||
return typeof(input) === "string" && !!input.match(/^[0-9a-fA-F]{24}$/); | ||
}, | ||
return !!input.match(options.strict ? /^#[0-9A-F]{6}$/i : /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i); | ||
//-----------------------]> | ||
case "creditcard": | ||
if(typeof(input) !== "string") | ||
return false; | ||
"hexColor": function(input, options) { | ||
if(typeof(input) !== "string") | ||
return false; | ||
input = input.replace(/[^0-9]+/g, ""); | ||
return !!input.match(options.strict ? /^#[0-9A-F]{6}$/i : /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i); | ||
}, | ||
if(!input || !input.match(/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/)) | ||
return false; | ||
"creditcard": function(input) { | ||
if(typeof(input) !== "string") | ||
return false; | ||
var sum = 0, shouldDouble = false; | ||
var digit, tmpNum; | ||
input = input.replace(/[^0-9]+/g, ""); | ||
for(var i = input.length - 1; i >= 0; i--) { | ||
digit = input.substring(i, (i + 1)); | ||
tmpNum = parseInt(digit, 10); | ||
if(!input || !input.match(/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/)) | ||
return false; | ||
if(shouldDouble) { | ||
tmpNum *= 2; | ||
sum += (tmpNum >= 10) ? ((tmpNum % 10) + 1) : tmpNum; | ||
} else | ||
sum += tmpNum; | ||
var sum = 0, shouldDouble = false; | ||
var digit, tmpNum; | ||
shouldDouble = !shouldDouble; | ||
} | ||
for(var i = input.length - 1; i >= 0; i--) { | ||
digit = input.substring(i, (i + 1)); | ||
tmpNum = parseInt(digit, 10); | ||
return (sum % 10) === 0; | ||
if(shouldDouble) { | ||
tmpNum *= 2; | ||
sum += (tmpNum >= 10) ? ((tmpNum % 10) + 1) : tmpNum; | ||
} else | ||
sum += tmpNum; | ||
case "phone": | ||
if(!input || typeof(input) !== "string") | ||
return false; | ||
shouldDouble = !shouldDouble; | ||
} | ||
///---)> | ||
return (sum % 10) === 0; | ||
}, | ||
var rgPhone = gVPhones[options.locale || "ru-RU"]; | ||
"phone": function(input, options) { | ||
if(!input || typeof(input) !== "string") | ||
return false; | ||
return rgPhone && rgPhone.test(input); | ||
///---)> | ||
case "uuid": | ||
if(!input || typeof(input) !== "string") | ||
return false; | ||
var rgPhone = gVPhones[options.locale || "ru-RU"]; | ||
///---)> | ||
return rgPhone && rgPhone.test(input); | ||
}, | ||
var version = options.version, | ||
pattern; | ||
"uuid": function(input, options) { | ||
if(!input || typeof(input) !== "string") | ||
return false; | ||
if(version == 3 || version == "v3") | ||
pattern = /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i; | ||
else if(version == 4 || version == "v4") | ||
pattern = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i; | ||
else if(version == 5 || version == "v5") | ||
pattern = /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i; | ||
else | ||
pattern = /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i; | ||
///---)> | ||
return pattern.test(input); | ||
var version = options.version, | ||
pattern; | ||
case "ip": | ||
if(!input || typeof(input) !== "string") | ||
return false; | ||
if(version == 3 || version == "v3") | ||
pattern = /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i; | ||
else if(version == 4 || version == "v4") | ||
pattern = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i; | ||
else if(version == 5 || version == "v5") | ||
pattern = /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i; | ||
else | ||
pattern = /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i; | ||
///---)> | ||
return pattern.test(input); | ||
}, | ||
var version = options.version, | ||
ipV4 = function() { | ||
if((/^(\d?\d?\d)\.(\d?\d?\d)\.(\d?\d?\d)\.(\d?\d?\d)$/).test(input)) { | ||
var parts = input.split(".").sort(); | ||
// no need to check for < 0 as regex won't match in that case | ||
return !(parts[3] > 255); | ||
} | ||
}; | ||
"ip": function(input, options) { | ||
if(!input || typeof(input) !== "string") | ||
return false; | ||
///---)> | ||
///---)> | ||
if(!version && !ipV4() && !(/^::|^::1|^([a-fA-F0-9]{1,4}::?){1,7}([a-fA-F0-9]{1,4})$/).test(input)) | ||
return false; | ||
var version = options.version; | ||
if(version == 4 && !ipV4()) | ||
return false; | ||
function ipV4() { | ||
if((/^(\d?\d?\d)\.(\d?\d?\d)\.(\d?\d?\d)\.(\d?\d?\d)$/).test(input)) { | ||
var parts = input.split(".").sort(); | ||
// no need to check for < 0 as regex won't match in that case | ||
return !(parts[3] > 255); | ||
} | ||
} | ||
if(version == 6 && !(/^::|^::1|^([a-fA-F0-9]{1,4}::?){1,7}([a-fA-F0-9]{1,4})$/).test(input)) | ||
return false; | ||
///---)> | ||
return true; | ||
if(!version && !ipV4() && !(/^::|^::1|^([a-fA-F0-9]{1,4}::?){1,7}([a-fA-F0-9]{1,4})$/).test(input)) | ||
return false; | ||
case "ascii": | ||
return typeof(input) === "string" && (/^[\x00-\x7F]+$/).test(input); | ||
if(version == 4 && !ipV4()) | ||
return false; | ||
case "base64": | ||
return typeof(input) === "string" && (/^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{4})$/).test(input); | ||
if(version == 6 && !(/^::|^::1|^([a-fA-F0-9]{1,4}::?){1,7}([a-fA-F0-9]{1,4})$/).test(input)) | ||
return false; | ||
//------------------------]> | ||
return true; | ||
}, | ||
default: | ||
var func = customRulesStore[use]; | ||
"ascii": function(input) { | ||
return typeof(input) === "string" && (/^[\x00-\x7F]+$/).test(input); | ||
}, | ||
if(func) | ||
return func(input, options); | ||
"base64": function(input) { | ||
return typeof(input) === "string" && (/^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{4})$/).test(input); | ||
throw "[!] Validation | Unknown method.\n" + use + " : " + JSON.stringify(options); | ||
} | ||
}; | ||
} | ||
@@ -392,3 +374,8 @@ //-----------------------------]> | ||
default: | ||
throw "[!] Sanitizer | Unknown Type.\n" + type + " : " + JSON.stringify(options); | ||
var func = customTypesStore[type]; | ||
if(func) | ||
return func(input, options); | ||
throw "[!] Sanitizer | Unknown type.\n" + type + " : " + JSON.stringify(options); | ||
} | ||
@@ -497,4 +484,8 @@ } | ||
"type": function(name, func) { | ||
return wFuncStore(name, func, customTypesStore); | ||
}, | ||
"rule": function(name, func) { | ||
return wFuncStore(name, func, gVMethods); | ||
return wFuncStore(name, func, customRulesStore); | ||
}, | ||
@@ -583,8 +574,3 @@ | ||
var func = gVMethods[schema]; | ||
if(!func) | ||
throw "[!] Validation | not found method: " + schema; | ||
return func(data, options); | ||
return validation(schema, data, options); | ||
} | ||
@@ -628,8 +614,3 @@ | ||
var func = gVMethods[nameFunc]; | ||
if(!func) | ||
throw "[!] Validation | not found method: " + nameFunc; | ||
if(!func(fieldData, schemaData)) { | ||
if(!validation(nameFunc, fieldData, schemaData)) { | ||
if(optErrors) { | ||
@@ -648,5 +629,2 @@ result = result || []; | ||
} | ||
} | ||
@@ -653,0 +631,0 @@ |
{ | ||
"name": "aigis", | ||
"version": "0.0.5", | ||
"version": "0.0.6", | ||
"description": "Simple and Powerful module for strict validation", | ||
@@ -38,4 +38,4 @@ | ||
"_id": "aigis@0.0.5", | ||
"_id": "aigis@0.0.6", | ||
"_from": "aigis@" | ||
} |
@@ -125,2 +125,14 @@ `npm install aigis -g` | ||
console.log("+-------------------------+"); | ||
console.log("| V: Custom"); | ||
console.log("+-------------------------+"); | ||
$sanitize.type("testTypeDateEasy", function(input, options) { | ||
return new Date(input); | ||
}); | ||
console.log("0#", $sanitize("testTypeDateEasy", "Thu, 01 Jan 1970 00:00:00 GMT-0400")); | ||
console.log("1#", $sanitize("testTypeDateEasy", "---")); | ||
console.log("+-------------------------+"); | ||
console.log("| S: String"); | ||
@@ -145,5 +157,5 @@ console.log("+-------------------------+"); | ||
}, | ||
data = {"name": " DT+ ", "pts": "60"}; | ||
data = {"name": " DT+ ", "pts": "60", "delThisField": "data"}; | ||
console.log("1#", $sanitize(schema, data)); | ||
console.log("0#", $sanitize(schema, data)); | ||
@@ -160,3 +172,3 @@ | ||
console.log("1#", $validate("testRuleMax10", 50)); | ||
console.log("0#", $validate("testRuleMax10", 50)); | ||
console.log("1#", $validate("testRuleMax10", 8)); | ||
@@ -163,0 +175,0 @@ |
@@ -17,2 +17,14 @@ //----------------------------------------------------- | ||
console.log("+-------------------------+"); | ||
console.log("| V: Custom"); | ||
console.log("+-------------------------+"); | ||
$sanitize.type("testTypeDateEasy", function(input, options) { | ||
return new Date(input); | ||
}); | ||
console.log("0#", $sanitize("testTypeDateEasy", "Thu, 01 Jan 1970 00:00:00 GMT-0400")); | ||
console.log("1#", $sanitize("testTypeDateEasy", "---")); | ||
console.log("+-------------------------+"); | ||
console.log("| S: String"); | ||
@@ -39,3 +51,3 @@ console.log("+-------------------------+"); | ||
console.log("1#", $sanitize(schema, data)); | ||
console.log("0#", $sanitize(schema, data)); | ||
@@ -52,3 +64,3 @@ | ||
console.log("1#", $validate("testRuleMax10", 50)); | ||
console.log("0#", $validate("testRuleMax10", 50)); | ||
console.log("1#", $validate("testRuleMax10", 8)); | ||
@@ -55,0 +67,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
44981
219
832