-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
105 lines (88 loc) · 2.5 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
"use strict";
const condition = {
GREATER_THAN: '>',
LESS_THAN: '<',
GREATER_THAN_EQUAL: '>=',
LESS_THAN_EQUAL: '<=',
EQUAL: '===',
NOT_EQUAL: '!==',
MAX: 'max',
MIN: 'min'
}
function compare(post, operator, value) {
switch (operator) {
case condition.GREATER_THAN:
return post > value
case condition.LESS_THAN:
return post < value
case condition.GREATER_THAN_EQUAL:
return post >= value
case condition.LESS_THAN_EQUAL:
return post <= value
case condition.EQUAL:
return post === value
case condition.NOT_EQUAL:
return post !== value
case condition.MAX:
return post <= value
case condition.MIN:
return post >= value
}
}
function typeControlSwitch(value, rule) {
if (Array.isArray(rule)) {
return ruleIsArray(value, rule);
}else if (typeof rule === "object") {
return ruleIsObject(value, rule);
}else {
return false;
}
}
function ruleIsObject (value, rule) {
if(rule.value){
if(rule.condition){
if (compare(value, rule.condition, rule.value)) {
return returnResult(rule['trueResult'], true)
}
}else if(rule.regex){
if(rule.regex.test(value)){
return returnResult(rule['trueResult'], true)
}
}
}
return returnResult(rule['falseResult'], false)
}
function ruleIsArray(value, rule) {
for (let i = 0; i < rule.length; i++) {
const innerRule = rule[i];
if(innerRule.value === undefined) continue;
const result = typeControlSwitch(value, innerRule);
if(!result){
continue;
}
if(result === innerRule['falseResult']){
continue;
}
return returnResult(innerRule.trueResult, true);
}
return false;
}
function returnResult(result, defualtResult) {
return result ? result : defualtResult;
}
function objectValidator(values, rules) {
const results = Object.keys(values).map(valueKey => {
const rule = rules[valueKey];
if(rule) {
return {key: valueKey, value:typeControlSwitch(values[valueKey], rule)}
}else {
return {key: valueKey, value: false};
}
})
for (let i = 0; i < results.length; i++) {
values[results[i].key] = results[i].value;
}
return values;
};
export default objectValidator;
export {condition};