1
- import { isNil , isNumber , isString , isArray } from "lodash" ;
1
+ import { defaults , isNil , isNumber , isString , isArray , isFunction } from "lodash" ;
2
2
import fecha from "fecha" ;
3
3
4
- function checkEmpty ( value , required ) {
4
+ function checkEmpty ( value , required , messages ) {
5
5
if ( isNil ( value ) || value === "" ) {
6
6
if ( required )
7
- return [ msg ( resources . fieldIsRequired ) ] ;
7
+ return [ msg ( messages . fieldIsRequired ) ] ;
8
8
else
9
9
return [ ] ;
10
10
}
@@ -54,139 +54,139 @@ module.exports = {
54
54
55
55
resources,
56
56
57
- required ( value , field ) {
58
- return checkEmpty ( value , field . required ) ;
57
+ required ( value , field , messages = resources ) {
58
+ return checkEmpty ( value , field . required , messages ) ;
59
59
} ,
60
60
61
- number ( value , field ) {
62
- let res = checkEmpty ( value , field . required ) ; if ( res != null ) return res ;
61
+ number ( value , field , messages = resources ) {
62
+ let res = checkEmpty ( value , field . required , messages ) ; if ( res != null ) return res ;
63
63
64
64
let err = [ ] ;
65
65
if ( isNumber ( value ) ) {
66
66
if ( ! isNil ( field . min ) && value < field . min )
67
- err . push ( msg ( resources . numberTooSmall , field . min ) ) ;
67
+ err . push ( msg ( messages . numberTooSmall , field . min ) ) ;
68
68
69
69
if ( ! isNil ( field . max ) && value > field . max )
70
- err . push ( msg ( resources . numberTooBig , field . max ) ) ;
70
+ err . push ( msg ( messages . numberTooBig , field . max ) ) ;
71
71
72
72
} else
73
- err . push ( msg ( resources . invalidNumber ) ) ;
73
+ err . push ( msg ( messages . invalidNumber ) ) ;
74
74
75
75
return err ;
76
76
} ,
77
77
78
- integer ( value , field ) {
79
- let res = checkEmpty ( value , field . required ) ; if ( res != null ) return res ;
78
+ integer ( value , field , messages = resources ) {
79
+ let res = checkEmpty ( value , field . required , messages ) ; if ( res != null ) return res ;
80
80
81
81
if ( ! ( Number ( value ) === value && value % 1 === 0 ) )
82
- return [ msg ( resources . invalidNumber ) ] ;
82
+ return [ msg ( messages . invalidNumber ) ] ;
83
83
} ,
84
84
85
- double ( value , field ) {
86
- let res = checkEmpty ( value , field . required ) ; if ( res != null ) return res ;
85
+ double ( value , field , messages = resources ) {
86
+ let res = checkEmpty ( value , field . required , messages ) ; if ( res != null ) return res ;
87
87
88
88
if ( ! isNumber ( value ) || isNaN ( value ) )
89
- return [ msg ( resources . invalidNumber ) ] ;
89
+ return [ msg ( messages . invalidNumber ) ] ;
90
90
} ,
91
91
92
- string ( value , field ) {
93
- let res = checkEmpty ( value , field . required ) ; if ( res != null ) return res ;
92
+ string ( value , field , messages = resources ) {
93
+ let res = checkEmpty ( value , field . required , messages ) ; if ( res != null ) return res ;
94
94
95
95
let err = [ ] ;
96
96
if ( isString ( value ) ) {
97
97
if ( ! isNil ( field . min ) && value . length < field . min )
98
- err . push ( msg ( resources . textTooSmall , value . length , field . min ) ) ;
98
+ err . push ( msg ( messages . textTooSmall , value . length , field . min ) ) ;
99
99
100
100
if ( ! isNil ( field . max ) && value . length > field . max )
101
- err . push ( msg ( resources . textTooBig , value . length , field . max ) ) ;
101
+ err . push ( msg ( messages . textTooBig , value . length , field . max ) ) ;
102
102
103
103
} else
104
- err . push ( msg ( resources . thisNotText ) ) ;
104
+ err . push ( msg ( messages . thisNotText ) ) ;
105
105
106
106
return err ;
107
107
} ,
108
108
109
- array ( value , field ) {
109
+ array ( value , field , messages = resources ) {
110
110
if ( field . required ) {
111
111
112
112
if ( ! isArray ( value ) )
113
- return [ msg ( resources . thisNotArray ) ] ;
113
+ return [ msg ( messages . thisNotArray ) ] ;
114
114
115
115
if ( value . length == 0 )
116
- return [ msg ( resources . fieldIsRequired ) ] ;
116
+ return [ msg ( messages . fieldIsRequired ) ] ;
117
117
}
118
118
119
119
if ( ! isNil ( value ) ) {
120
120
if ( ! isNil ( field . min ) )
121
121
if ( value . length < field . min )
122
- return [ msg ( resources . selectMinItems , field . min ) ] ;
122
+ return [ msg ( messages . selectMinItems , field . min ) ] ;
123
123
124
124
if ( ! isNil ( field . max ) )
125
125
if ( value . length > field . max )
126
- return [ msg ( resources . selectMaxItems , field . max ) ] ;
126
+ return [ msg ( messages . selectMaxItems , field . max ) ] ;
127
127
}
128
128
} ,
129
129
130
- date ( value , field ) {
131
- let res = checkEmpty ( value , field . required ) ; if ( res != null ) return res ;
130
+ date ( value , field , messages = resources ) {
131
+ let res = checkEmpty ( value , field . required , messages ) ; if ( res != null ) return res ;
132
132
133
133
let m = new Date ( value ) ;
134
134
if ( ! m )
135
- return [ msg ( resources . invalidDate ) ] ;
135
+ return [ msg ( messages . invalidDate ) ] ;
136
136
137
137
let err = [ ] ;
138
138
139
139
if ( ! isNil ( field . min ) ) {
140
140
let min = new Date ( field . min ) ;
141
141
if ( m . valueOf ( ) < min . valueOf ( ) )
142
- err . push ( msg ( resources . dateIsEarly , fecha . format ( m ) , fecha . format ( min ) ) ) ;
142
+ err . push ( msg ( messages . dateIsEarly , fecha . format ( m ) , fecha . format ( min ) ) ) ;
143
143
}
144
144
145
145
if ( ! isNil ( field . max ) ) {
146
146
let max = new Date ( field . max ) ;
147
147
if ( m . valueOf ( ) > max . valueOf ( ) )
148
- err . push ( msg ( resources . dateIsLate , fecha . format ( m ) , fecha . format ( max ) ) ) ;
148
+ err . push ( msg ( messages . dateIsLate , fecha . format ( m ) , fecha . format ( max ) ) ) ;
149
149
}
150
150
151
151
return err ;
152
152
} ,
153
153
154
- regexp ( value , field ) {
155
- let res = checkEmpty ( value , field . required ) ; if ( res != null ) return res ;
154
+ regexp ( value , field , messages = resources ) {
155
+ let res = checkEmpty ( value , field . required , messages ) ; if ( res != null ) return res ;
156
156
157
157
if ( ! isNil ( field . pattern ) ) {
158
158
let re = new RegExp ( field . pattern ) ;
159
159
if ( ! re . test ( value ) )
160
- return [ msg ( resources . invalidFormat ) ] ;
160
+ return [ msg ( messages . invalidFormat ) ] ;
161
161
}
162
162
} ,
163
163
164
- email ( value , field ) {
165
- let res = checkEmpty ( value , field . required ) ; if ( res != null ) return res ;
164
+ email ( value , field , messages = resources ) {
165
+ let res = checkEmpty ( value , field . required , messages ) ; if ( res != null ) return res ;
166
166
167
167
let re = / ^ ( ( [ ^ < > ( ) \[ \] \\ . , ; : \s @ " ] + ( \. [ ^ < > ( ) \[ \] \\ . , ; : \s @ " ] + ) * ) | ( " .+ " ) ) @ ( ( \[ [ 0 - 9 ] { 1 , 3 } \. [ 0 - 9 ] { 1 , 3 } \. [ 0 - 9 ] { 1 , 3 } \. [ 0 - 9 ] { 1 , 3 } ] ) | ( ( [ a - z A - Z \- 0 - 9 ] + \. ) + [ a - z A - Z ] { 2 , } ) ) $ / ;
168
168
if ( ! re . test ( value ) )
169
- return [ msg ( resources . invalidEmail ) ] ;
169
+ return [ msg ( messages . invalidEmail ) ] ;
170
170
} ,
171
171
172
- url ( value , field ) {
173
- let res = checkEmpty ( value , field . required ) ; if ( res != null ) return res ;
172
+ url ( value , field , messages = resources ) {
173
+ let res = checkEmpty ( value , field . required , messages ) ; if ( res != null ) return res ;
174
174
175
175
let re = / h t t p s ? : \/ \/ ( w w w \. ) ? [ - a - z A - Z 0 - 9 @ : % . _ \+ ~ # = ] { 2 , 256 } \. [ a - z ] { 2 , 4 } \b ( [ - a - z A - Z 0 - 9 @ : % _ \+ . ~ # ? & / / = ] * ) / g;
176
176
if ( ! re . test ( value ) )
177
- return [ msg ( resources . invalidURL ) ] ;
177
+ return [ msg ( messages . invalidURL ) ] ;
178
178
} ,
179
179
180
- creditCard ( value , field ) {
181
- let res = checkEmpty ( value , field . required ) ; if ( res != null ) return res ;
180
+ creditCard ( value , field , messages = resources ) {
181
+ let res = checkEmpty ( value , field . required , messages ) ; if ( res != null ) return res ;
182
182
183
183
/* From validator.js code
184
184
https://github.com/chriso/validator.js/blob/master/src/lib/isCreditCard.js
185
185
*/
186
186
const creditCard = / ^ (?: 4 [ 0 - 9 ] { 12 } (?: [ 0 - 9 ] { 3 } ) ? | 5 [ 1 - 5 ] [ 0 - 9 ] { 14 } | 6 (?: 0 1 1 | 5 [ 0 - 9 ] [ 0 - 9 ] ) [ 0 - 9 ] { 12 } | 3 [ 4 7 ] [ 0 - 9 ] { 13 } | 3 (?: 0 [ 0 - 5 ] | [ 6 8 ] [ 0 - 9 ] ) [ 0 - 9 ] { 11 } | (?: 2 1 3 1 | 1 8 0 0 | 3 5 \d { 3 } ) \d { 11 } ) $ / ;
187
187
const sanitized = value . replace ( / [ ^ 0 - 9 ] + / g, "" ) ;
188
188
if ( ! creditCard . test ( sanitized ) ) {
189
- return [ msg ( resources . invalidCard ) ] ;
189
+ return [ msg ( messages . invalidCard ) ] ;
190
190
}
191
191
let sum = 0 ;
192
192
let digit ;
@@ -209,22 +209,32 @@ module.exports = {
209
209
}
210
210
211
211
if ( ! ( ( sum % 10 ) === 0 ? sanitized : false ) )
212
- return [ msg ( resources . invalidCardNumber ) ] ;
212
+ return [ msg ( messages . invalidCardNumber ) ] ;
213
213
} ,
214
214
215
- alpha ( value , field ) {
216
- let res = checkEmpty ( value , field . required ) ; if ( res != null ) return res ;
215
+ alpha ( value , field , messages = resources ) {
216
+ let res = checkEmpty ( value , field . required , messages ) ; if ( res != null ) return res ;
217
217
218
218
let re = / ^ [ a - z A - Z ] * $ / ;
219
219
if ( ! re . test ( value ) )
220
- return [ msg ( resources . invalidTextContainNumber ) ] ;
220
+ return [ msg ( messages . invalidTextContainNumber ) ] ;
221
221
} ,
222
222
223
- alphaNumeric ( value , field ) {
224
- let res = checkEmpty ( value , field . required ) ; if ( res != null ) return res ;
223
+ alphaNumeric ( value , field , messages = resources ) {
224
+ let res = checkEmpty ( value , field . required , messages ) ; if ( res != null ) return res ;
225
225
226
226
let re = / ^ [ a - z A - Z 0 - 9 ] * $ / ;
227
227
if ( ! re . test ( value ) )
228
- return [ msg ( resources . invalidTextContainSpec ) ] ;
228
+ return [ msg ( messages . invalidTextContainSpec ) ] ;
229
229
}
230
230
} ;
231
+
232
+ Object . keys ( module . exports ) . forEach ( name => {
233
+ const fn = module . exports [ name ] ;
234
+ if ( isFunction ( fn ) ) {
235
+ fn . locale = ( customMessages ) => {
236
+ const messages = defaults ( customMessages , resources ) ;
237
+ return ( value , field ) => fn ( value , field , messages ) ;
238
+ } ;
239
+ }
240
+ } ) ;
0 commit comments