aigis
v0.1.1
Published
Simple and Powerful module for strict data control
Downloads
11
Maintainers
Readme
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)|
//_ Validation error: structure
{
"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)); //_Default: GET -> POST or PUT or ... etc
//objApp.use($sanitize.mid(appModels, "POST")); //_Only: POST
//objApp.use($sanitize.mid(appModels, ["GET", "POST", "PUT"])); //_Only: GET, POST, PUT
//-------------------]>
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");
//_ GET: http://127.0.0.1:3000/?model=user&scenario=update&data=%7B%22id%22%3A%226d%22%2C%22name%22%3A%22DT%22%7D
//_ POST: {"model":"user", "data": {id: "6d", name: "DT", pswd: "potato"}}
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);
//_ $typenize:
// { name: ' XX + ', pts: -60, data: { login: '', password: '', more: { someData: '' } } }
//_ $sanitize:
// { name: 'XX', pts: 30, data: { login: '', password: '', more: { someData: '' } } }
//_ $validate: false
//-----------------------------------------------------
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"}, //_ #1
//"pswdCheck": {"use": "equal", "value": "/\\w+/g"}, //_ #2
"status": "?string",
"pts": "integer"
},
data = {"name": "DT", "pts": "32", "pswd": "/\\s+/g", "pswdCheck": /\s+/g}; //_ #1
//data = {"name": "DT", "pts": "32", "pswd": "", "pswdCheck": /\w+/g}; //_ #2
console.log("1#", $validate(schema, data));
console.log("2#", $validate(schema, data, {"errors": true}));
3# of the fundamental modules
License
MIT