Skip to content
This repository has been archived by the owner on May 17, 2023. It is now read-only.

vslinko/strulidator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

strulidator

DEPRECATED! Please use vstack-validator.

Declarative validator for complex deep structures.

TODO

At current moment strulidator isn't ready for production. If you want to help me with release please read the first issue.

Reference

type Validator = (value: any) => boolean

type Constraint = (value: any) => ConstraintResult

type ConstraintResult = {
  valid: boolean,
  message: string | void,
  children: ConstraintResultMap | ConstraintResultArray | void
}

type ConstraintResultMap = {
  [key: string]: ConstraintResult
}

type ConstraintResultArray = Array<ConstraintResult>

Usage

const signInValidator = combineConstraints({
  keys: createObjectKeysConstraint({
    email: true,
    password: true,
    items: false,
  }),
  values: createObjectConstraint({
    email: combineConstraints({
      notNull,
      notEmpty,
      string,
      email,
    }),
    password: string,
    items: combineConstraints({
      notEmpty,
      array: createArrayConstraint(
        string
      )
    })
  })
})

print(signInValidator({
  email: 'vslinko@yahoo.com',
  password: '',
  items: ['']
}))
{ valid: true,
  message: null,
  children:
   { keys: { valid: true, message: null, children: null },
     values:
      { valid: true,
        message: null,
        children:
         { email:
            { valid: true,
              message: null,
              children:
               { notNull: { valid: true, message: null, children: null },
                 notEmpty: { valid: true, message: null, children: null },
                 string: { valid: true, message: null, children: null },
                 email: { valid: true, message: null, children: null } } },
           password: { valid: true, message: null, children: null },
           items:
            { valid: true,
              message: null,
              children:
               { notEmpty: { valid: true, message: null, children: null },
                 array:
                  { valid: true,
                    message: null,
                    children: [ { valid: true, message: null, children: null } ] } } } } } } }

Releases

No releases published

Packages

No packages published