1- import { isNil , isNumber , isString , isArray } from "lodash" ;
1+ import { defaults , isNil , isNumber , isString , isArray , isFunction } from "lodash" ;
22import fecha from "fecha" ;
33
4- function checkEmpty ( value , required ) {
4+ function checkEmpty ( value , required , messages ) {
55 if ( isNil ( value ) || value === "" ) {
66 if ( required )
7- return [ msg ( resources . fieldIsRequired ) ] ;
7+ return [ msg ( messages . fieldIsRequired ) ] ;
88 else
99 return [ ] ;
1010 }
@@ -54,139 +54,139 @@ module.exports = {
5454
5555 resources,
5656
57- required ( value , field ) {
58- return checkEmpty ( value , field . required ) ;
57+ required ( value , field , messages = resources ) {
58+ return checkEmpty ( value , field . required , messages ) ;
5959 } ,
6060
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 ;
6363
6464 let err = [ ] ;
6565 if ( isNumber ( value ) ) {
6666 if ( ! isNil ( field . min ) && value < field . min )
67- err . push ( msg ( resources . numberTooSmall , field . min ) ) ;
67+ err . push ( msg ( messages . numberTooSmall , field . min ) ) ;
6868
6969 if ( ! isNil ( field . max ) && value > field . max )
70- err . push ( msg ( resources . numberTooBig , field . max ) ) ;
70+ err . push ( msg ( messages . numberTooBig , field . max ) ) ;
7171
7272 } else
73- err . push ( msg ( resources . invalidNumber ) ) ;
73+ err . push ( msg ( messages . invalidNumber ) ) ;
7474
7575 return err ;
7676 } ,
7777
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 ;
8080
8181 if ( ! ( Number ( value ) === value && value % 1 === 0 ) )
82- return [ msg ( resources . invalidNumber ) ] ;
82+ return [ msg ( messages . invalidNumber ) ] ;
8383 } ,
8484
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 ;
8787
8888 if ( ! isNumber ( value ) || isNaN ( value ) )
89- return [ msg ( resources . invalidNumber ) ] ;
89+ return [ msg ( messages . invalidNumber ) ] ;
9090 } ,
9191
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 ;
9494
9595 let err = [ ] ;
9696 if ( isString ( value ) ) {
9797 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 ) ) ;
9999
100100 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 ) ) ;
102102
103103 } else
104- err . push ( msg ( resources . thisNotText ) ) ;
104+ err . push ( msg ( messages . thisNotText ) ) ;
105105
106106 return err ;
107107 } ,
108108
109- array ( value , field ) {
109+ array ( value , field , messages = resources ) {
110110 if ( field . required ) {
111111
112112 if ( ! isArray ( value ) )
113- return [ msg ( resources . thisNotArray ) ] ;
113+ return [ msg ( messages . thisNotArray ) ] ;
114114
115115 if ( value . length == 0 )
116- return [ msg ( resources . fieldIsRequired ) ] ;
116+ return [ msg ( messages . fieldIsRequired ) ] ;
117117 }
118118
119119 if ( ! isNil ( value ) ) {
120120 if ( ! isNil ( field . min ) )
121121 if ( value . length < field . min )
122- return [ msg ( resources . selectMinItems , field . min ) ] ;
122+ return [ msg ( messages . selectMinItems , field . min ) ] ;
123123
124124 if ( ! isNil ( field . max ) )
125125 if ( value . length > field . max )
126- return [ msg ( resources . selectMaxItems , field . max ) ] ;
126+ return [ msg ( messages . selectMaxItems , field . max ) ] ;
127127 }
128128 } ,
129129
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 ;
132132
133133 let m = new Date ( value ) ;
134134 if ( ! m )
135- return [ msg ( resources . invalidDate ) ] ;
135+ return [ msg ( messages . invalidDate ) ] ;
136136
137137 let err = [ ] ;
138138
139139 if ( ! isNil ( field . min ) ) {
140140 let min = new Date ( field . min ) ;
141141 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 ) ) ) ;
143143 }
144144
145145 if ( ! isNil ( field . max ) ) {
146146 let max = new Date ( field . max ) ;
147147 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 ) ) ) ;
149149 }
150150
151151 return err ;
152152 } ,
153153
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 ;
156156
157157 if ( ! isNil ( field . pattern ) ) {
158158 let re = new RegExp ( field . pattern ) ;
159159 if ( ! re . test ( value ) )
160- return [ msg ( resources . invalidFormat ) ] ;
160+ return [ msg ( messages . invalidFormat ) ] ;
161161 }
162162 } ,
163163
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 ;
166166
167167 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 , } ) ) $ / ;
168168 if ( ! re . test ( value ) )
169- return [ msg ( resources . invalidEmail ) ] ;
169+ return [ msg ( messages . invalidEmail ) ] ;
170170 } ,
171171
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 ;
174174
175175 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;
176176 if ( ! re . test ( value ) )
177- return [ msg ( resources . invalidURL ) ] ;
177+ return [ msg ( messages . invalidURL ) ] ;
178178 } ,
179179
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 ;
182182
183183 /* From validator.js code
184184 https://github.com/chriso/validator.js/blob/master/src/lib/isCreditCard.js
185185 */
186186 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 } ) $ / ;
187187 const sanitized = value . replace ( / [ ^ 0 - 9 ] + / g, "" ) ;
188188 if ( ! creditCard . test ( sanitized ) ) {
189- return [ msg ( resources . invalidCard ) ] ;
189+ return [ msg ( messages . invalidCard ) ] ;
190190 }
191191 let sum = 0 ;
192192 let digit ;
@@ -209,22 +209,32 @@ module.exports = {
209209 }
210210
211211 if ( ! ( ( sum % 10 ) === 0 ? sanitized : false ) )
212- return [ msg ( resources . invalidCardNumber ) ] ;
212+ return [ msg ( messages . invalidCardNumber ) ] ;
213213 } ,
214214
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 ;
217217
218218 let re = / ^ [ a - z A - Z ] * $ / ;
219219 if ( ! re . test ( value ) )
220- return [ msg ( resources . invalidTextContainNumber ) ] ;
220+ return [ msg ( messages . invalidTextContainNumber ) ] ;
221221 } ,
222222
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 ;
225225
226226 let re = / ^ [ a - z A - Z 0 - 9 ] * $ / ;
227227 if ( ! re . test ( value ) )
228- return [ msg ( resources . invalidTextContainSpec ) ] ;
228+ return [ msg ( messages . invalidTextContainSpec ) ] ;
229229 }
230230} ;
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