-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfva.js
116 lines (100 loc) · 3 KB
/
fva.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
106
107
108
109
110
111
112
113
114
115
116
const validate = (data, rules, messages = {}) => {
let result = true
let globalErrors = []
Object.keys(data).map(key => {
let response = checkRule(key, data[key], rules[key], messages[key])
if (!response.success) {
result = false
response.errors.map(err => globalErrors.push(err))
}
})
return new Promise((resolve, reject) => {
if (result)
resolve(JSON.stringify({
message: "Data is valid.",
errors: globalErrors
}, null, 2))
else
reject(JSON.stringify({
message: "Data is invalid.",
errors: globalErrors
}, null, 2))
})
}
const checkRule = (keyReference, value, rules, customErrorMessages) => {
let invalid = 0
let errors = [];
if (rules == undefined) {
errors.push(`${keyReference}: Undefined rules.`)
return {
success: false,
errors
}
}
rules = rules || {
required: false,
min: 0,
max: undefined,
email: false,
number: false,
containsIgnoreCase: value[0]
}
customErrorMessages = customErrorMessages || {
required: keyReference + ": This field is required.",
min: keyReference + ": You have to insert at least " + rules.min + " characteres.",
max: keyReference + ": Limit of " + rules.max + " chars reached.",
email: keyReference + ": Invalid email.",
number: keyReference + ": This field accepts only numbers.",
containsIgnoreCase: keyReference + ": It must include <u>" + rules.containsIgnoreCase + "</u>."
}
if ("number" in rules) {
(rules.number && isNaN(value)) ?
(invalid++,
errors.push(customErrorMessages.number)) :
null
}
if ("required" in rules) {
rules.required && value.length === 0 ?
(invalid++,
errors.push(customErrorMessages.required)) :
null
}
if ("min" in rules) {
value.length >= rules.min ?
null :
(invalid++,
errors.push(customErrorMessages.min))
}
if ("max" in rules) {
value.length <= rules.max ?
null :
(invalid++,
errors.push(customErrorMessages.max))
}
if ("containsIgnoreCase" in rules) {
value.toLowerCase().includes(rules.containsIgnoreCase.toLowerCase()) ?
null :
(invalid++,
errors.push(customErrorMessages.containsIgnoreCase))
}
if ("email" in rules) {
/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value) ?
null :
(invalid++,
errors.push(customErrorMessages.email))
}
//invalid: number of times the value is invalid
if (invalid == 0)
return {
success: true,
errors
}
else
return {
success: false,
errors
}
}
module.exports = {
validate
}