npm install aigis -g
require("aigis");
$typenize({name: "string"}, {name: 13, skipThisField: "data"});
$sanitize({name: {type: "string", max: 2}}, {name: "Omnomnus", delThisField: "data"});
$validate("integer", "2");
$sanitize("array", [6.9, "name", "delThisElem"], {schema: ["integer", "string"]});
$validate("?email", undefined);
$sanitize.type("testTypeDate", function(input, options) { return new Date(input); });
$validate.rule("testRuleMax10", function(input, options) { return options.k * input < 10; });
$typenize("testTypeDate", "---");
$sanitize("testTypeDate", "Thu, 01 Jan 1970 00:00:00 GMT-0400");
$validate("testRuleMax10", 50, {k: 2});
$typenize("hashTable").format("{video}: {views}", {"video": "cats", "views": 100500});
$typenize("string").format("Date: {}", new Date());
$sanitize("array").format("Array: {2}, {1}, {0}", "[11, 12, 13]", {"max": 2})
var schUser = {"name": "string", "score": "integer"};
var tpzUser = $typenize(schUser),
snzUser = $sanitize(schUser),
vldUser = $validate(schUser);
var data = {"name": "DT", "score": 13.7, "someData": 9};
tpzUser(data);
tpzUser.format("My name: {name};\nMy score: {score};", data);
snzUser(data);
snzUser.format("My name: {name};\nMy score: {score};", data);
vldUser(data);
vldUser.format("vldUser: {}", data);
- Connect/Express middleware: +
- Schema-tree (hashTable, array): +
- Tests: +
- Examples: +
- Browser: +
~
?name
- Check an input only when the input exists (not undefined).type
-> use
<- rule
Module
Name | Desc | Args |
---|
| - | |
createInstance | Create new instance | ([isGlobal]) |
global | Set $typenize, $sanitize, $validate as Global Var (NodeJS) | (v [default: true]) |
| - | |
type | Set/Delete custom Type (Sanitize) | (name (String/HashTable), [func]) ~ func(input, options) |
rule | Set/Delete custom Rule (Validate) | (name (String/HashTable), [func]) ~ func(input, options) |
| - | |
typenize | - | (schema (String/HashTable), [data], [options]) |
sanitize | - | (schema (String/HashTable), [data], [options]) |
validate | - | (schema (String/HashTable), [data], [options]) |
Typenize, Sanitize, Validate options
Options | Desc | Val |
---|
| - | |
| ALL | |
scenario | - | - |
| - | |
| Validate | |
errors | Validate method returns null or an array of errors | true/false (def: false) |
{
"field": field,
"use": nameFunc,
"input": fieldData
}
Typenize
Type | Desc | Params/Options |
---|
| - | |
| ALL (If schema is a HashTable) | on |
custom | - | - |
boolean | true: "true", "on", "yes", "1" | - |
string | - | - |
integer | - | - |
float | - | - |
date | - | - |
hashTable | - | schema |
array | - | schema |
json | - | - |
Sanitize
Type | Desc | Params/Options |
---|
| - | |
| ALL (If schema is a HashTable) | on |
custom | - | - |
boolean | true: "true", "on", "yes", "1" | - |
string | - | default, enum, max, trim, ltrim, rtrim, escape, lowercase, uppercase, onlyDigits, onlyAlphanumeric, onlyWordchar |
integer | - | default, enum, min, max, abs |
float | - | default, enum, min, max, abs |
date | - | default, min, max |
hashTable | - | schema |
array | - | schema, max |
json | - | - |
String:
default (stop chain) -> enum (stop chain) -> only[Digits|Alphanumeric|Wordchar] -> [l|r]trim -> max -> [r]trim -> [uppercase|lowercase] -> escape
Number:
default (stop chain) -> enum (stop chain) -> abs -> min -> max
Validate
Rule | Desc | Params/Options |
---|
| - | |
| ALL (If schema is HashTable) | on |
null | - | - |
nan | - | - |
finite | If number and not: NaN, INFINITY | - |
| - | |
boolean | - | - |
string | - | min, max, enum, pattern |
integer | - | min, max, enum, divisibleBy |
float | - | min, max, enum, divisibleBy |
date | - | min, max |
hashTable | - | - |
array | - | min, max |
json | - | - |
| - | |
required | Not: null, undefined, length==0, NaN, Invalid Date | - |
equal | If the string matches the comparison | value, field (If schema is HashTable) |
notEmpty | If string not empty | - |
lowercase | If string is lowercase | - |
uppercase | If string is uppercase | - |
| - | |
wordchar | Alphanumeric characters including the underscore | - |
alphanumeric | If string is only letters and numbers | - |
alpha | If string is only letters | - |
numeric | If string is only numbers | - |
hexadecimal | - | - |
email | - | - |
url | mailto, http, https, ftp, ssh, ws, gopher, news, telnet, ldap | - |
mongoId | - | - |
| - | |
hexColor | - | strict (def: false) |
creditcard | Visa, MasterCard, American Express, Discover, Diners Club, and JCB card | - |
phone | ru-RU , zh-CN , en-ZA , en-AU , en-HK , fr-FR , pt-PT , el-GR | locale (def: "ru-RU") |
| - | |
uuid | - | version (def: 3,4,5) |
uuid.v3 | - | - |
uuid.v4 | - | - |
uuid.v5 | - | - |
| - | |
ip | This function simply check whether the address is a valid IPv4 or IPv6 address | version (def: 4,6) |
ip.v4 | - | - |
ip.v6 | - | - |
| - | |
ascii | - | - |
base64 | - | - |
Browser
Include: //raw.githack.com/Daeren/Aigis/master/index.js
Global var: $aigis
Middleware
require("aigis");
var rExpress = require("express");
var rBodyParser = require("body-parser");
var objApp = rExpress();
var appModels = {
"user": {
"id": "integer",
"name": "string",
"pswd": {"type": "string", "rule": "required", "on": ["update"]}
},
"task": {
"id": "integer"
}
};
objApp
.use(rBodyParser.urlencoded({"extended": false}))
.use(rBodyParser.json());
objApp.use($sanitize.mid(appModels));
objApp.all("/", function(req, res) {
if(!req.model)
return res.send("req.model: empty");
res.send(
JSON.stringify(req.model.data) +
" | name: " + req.model.name +
" | scenario: " + req.model.scenario +
" | validate: " + req.model.validate()
);
});
objApp.listen(3000, "127.0.0.1");
Examples
require("aigis");
var schema = {
"name": {
"type": "string",
"rule": "required",
"max": 3,
"trim": true
},
"status": "?string",
"pts": {
"use": "integer",
"max": 30,
"abs": true
},
"data": {
"type": "hashTable",
"schema": {
"login": "string",
"password": "string",
"more": {
"type": "hashTable",
"schema": {
"someData": "string"
}
}
}
}
},
data = {"name": " XX + ", "pts": "-60", "delThisField": "data"};
$typenize(schema, data);
$sanitize(schema, data);
$validate(schema, data);
console.log("+-------------------------+");
console.log("| S: String");
console.log("+-------------------------+");
console.log(JSON.stringify({
"T0": $sanitize("string", 10),
"T1": $sanitize("integer", "80", {"max": 50}),
"T2": $sanitize("array", "[1,2,3]", {"max": 2}),
"T3": $sanitize("integer", "50.5", {"enum": [10, 50]}),
"T4": $sanitize("integer", "60.5", {"enum": [10, 50]})
}, null, "\t"));
console.log("+-------------------------+");
console.log("| S: HashTable");
console.log("+-------------------------+");
var schema = {
"name": {"use": "string", "max": 2, "trim": true},
"status": "?string",
"pts": {"use": "integer", "max": 30}
},
data = {"name": " DT+ ", "pts": "60", "delThisField": "data"};
console.log("0#", $sanitize(schema, data));
console.log("+-------------------------+");
console.log("| V: HashTable");
console.log("+-------------------------+");
var schema = {
"name": "string",
"pswd": "string",
"pswdCheck": {"use": "equal", "field": "pswd"},
"status": "?string",
"pts": "integer"
},
data = {"name": "DT", "pts": "32", "pswd": "/\\s+/g", "pswdCheck": /\s+/g};
console.log("1#", $validate(schema, data));
console.log("2#", $validate(schema, data, {"errors": true}));
3# of the fundamental modules
2# lightject
License
MIT
@ Daeren Torn