1- class Validate {
2- /**
3- * @example
4- * const object = { foo: { bar: { message: 'Hello!' } } }
5- * const isValid = Validate.isValid(object, [['foo'], ['foo.bar.message']])
6- * console.log(isValid) // returns true
7- *
8- * @example
9- * const object = { foo: { bar: { message: 'Hello!' } } }
10- * const isValid = Validate.isValid(object, [['foo.bar.message', 'Wrong!']])
11- * console.log(isValid) // returns false
12- *
13- * @param {object } object Accepts an object schema.
14- * @param {string[] } fields Accepts string array. It is used to loop provided object and validate fields.
15- */
16- static isValid ( object , fields ) {
17- const hasFields = fields && Array . isArray ( fields ) && fields . length > 0
18- const hasObject =
19- object && typeof object === 'object' && Object . keys ( object ) . length > 0
20- if ( ! hasFields || ! hasObject ) return false
1+ import { IValidate , IObject , IFields } from './validate.types'
2+
3+ export default class Validate implements IValidate {
4+ isValid ( object : IObject , fields : IFields ) : boolean {
5+ if ( ! this . isValidProps ( object , fields ) ) return false
216
227 return fields . every ( ( [ field , value ] ) => {
238 const splitedFields = field . split ( '.' )
@@ -29,7 +14,7 @@ class Validate {
2914 const existsFieldInObject = splicedField in object
3015
3116 if ( existsFieldInObject && existsMoreFields ) {
32- return Validate . isValid ( object [ splicedField ] , [ [ joinedFields , value ] ] )
17+ return this . isValid ( object [ splicedField ] , [ [ joinedFields , value ] ] )
3318 }
3419
3520 const isNecessaryToCompareValues = ! existsMoreFields && existsValue
@@ -38,6 +23,11 @@ class Validate {
3823 return existsFieldInObject && ! existsMoreFields
3924 } )
4025 }
41- }
4226
43- module . exports = Validate
27+ private isValidProps ( object : IObject , fields : IFields ) {
28+ const hasFields = fields && Array . isArray ( fields ) && fields . length > 0
29+ const hasObject =
30+ object && typeof object === 'object' && Object . keys ( object ) . length > 0
31+ return hasObject && hasFields
32+ }
33+ }
0 commit comments