1.1.5 ā€¢ Published 2 years ago

chain-validator-js v1.1.5

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

Status GitHub Issues GitHub Pull Requests License


šŸ“ Table of Contents

šŸ§ About

This tool is developed to write easy-to-read, write, reuse data validation. It provides intuitive chain syntax, implements all the npm validator.js package validators and sanitizers methods and can be extended by your own.

šŸ Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.

Installation

To install this library you can use npm or build it from sources.

Using npm:

npm install chain-validator-js --save

Code examples

Validate any data

Strings

validate(
    "validate me", 
    build().isString().contains("me")
).then(result => console.log(result));

Expected output

{
  "validated": "validate me",
  "errors": []
}

Arrays

validate(
  ["validate", "123"],
  build().isArray(
    build().isNumeric().withMessage("Given value is not type of numeric")
  )
).then((result) => console.log(JSON.stringify(result)));

Expected output

{
  "validated": {},
  "errors": [
    {
      "value": "validate",
      "message": "Given value is not type of numeric",
      "args": {
        "negate": false
      },
      "path": [
        "0"
      ]
    }
  ]
}

Objects

const authorValidation = () => {
    return build().schema({
        firstName: build().isString(),
        lastName: build().isString()
    });
}

const bookValidation = () => {
    return build().schema({
        name: build().isString(),
        authors: build().isArray(authorValidation())
    });
}

const data = {
    firstName: "Foo",
    lastName: "Bar",
    books: [
        {
            name: "Book1",
            authors: [{
                firstName: "Some",
                lastName: "Author"
            }]
        },
        {
            name: "Book2",
            authors: [{
                firstName: "Another",
                lastName: "Author"
            }]
        }
    ]
}

const validationSchema = build().schema({
    firstName: build().isString(),
    lastName: build().isString(),
    books: build().isArray(bookValidation())
})

validate(data, rules).then(result => console.log(JSON.stringify(result)));

Expected output

{
  "validated": {
    "firstName": "Foo",
    "lastName": "Bar",
    "books": [
      {
        "name": "Book1",
        "authors": [
          {
            "firstName": "Some",
            "lastName": "Author"
          }
        ]
      },
      {
        "name": "Book2",
        "authors": [
          {
            "firstName": "Another",
            "lastName": "Author"
          }
        ]
      }
    ]
  },
  "errors": []
}

In previous example functions authorValidation and bookValidation are functions that returns validation rules, that can be used as part of another validation rules (like authorValidation is a part of bookValidation). This can be super-useful for reusing and mixing rules.

Usefull API

Validate JSON schema, key - string, value - validation chain (build)

  build().schma({
    key: build()
  })

Set name for field being validated (access via error.args.fieldName)

  build().name("fieldName") #

Set custom error message

  buid().withMessage("error message")

Custom validation

  build().custom(
    (context) => async (value: unknown): Promise<boolean> => {
      /* return boolean */
    }
  )

Custom sanitizer

  build().custom(
    (context) => async (value: unknown): Promise<unknown> => {
      /* return sanitized value */
    }
  )

Invert next validator

  build().not().validatorGoesHere()

Conditions

IfTrue will be called if condition is succeed and will be applied to schema's root as it is usefull only in schemas. IMPORTANT: Condition validation chain applies to schema object! Use ifSelf method to apply condition to field in validation chain of which ifSelf called! Same thing with oneOf and oneOfSelf

  build().if(build().validationGoesHere(), {
    ifTrue: build().validationGoesHere(),
    ifFalse: build().validationGoesGere()
  })

  build().ifSelf(build().validationGoesHere(), {
    ifTrue: build().validationGoesHere(),
    ifFalse: build().validationGoesGere()
  })

  build().oneOf(
    build().validationGoesHere(), build().anotherValidationGoesHere(), build().more()
  )

  build().oneOfSelf(
    build().validationGoesHere(), build().anotherValidationGoesHere(), build().more()
  )

Bail

If validation is failed bail() will prevent field for next validation and sanitizing. Can be usefull if you are on server-side and want to load instance from database using customSanitizer() after validation, but not load it, if validation failed

  build().validator().bail().anotherValidator()

āœļø Authors

See also the list of contributors who participated in this project.

šŸŽ‰ Acknowledgements

  • validator.js - all the included validation and sanitizing methods.
  • Inspired by express-validator - has the almost same functional, except the lack of informative errors.
1.1.5

2 years ago

1.1.4

2 years ago

1.1.3

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.1.2

2 years ago

1.0.39

2 years ago

1.0.40

2 years ago

1.0.38

2 years ago

1.0.37

2 years ago

1.0.36

2 years ago

1.0.35

2 years ago

1.0.34

3 years ago

1.0.29

3 years ago

1.0.33

3 years ago

1.0.32

3 years ago

1.0.31

3 years ago

1.0.30

3 years ago

1.0.28

3 years ago

1.0.27

3 years ago

1.0.26

3 years ago

1.0.25

3 years ago

1.0.24

3 years ago

1.0.23

3 years ago

1.0.19

3 years ago

1.0.18

3 years ago

1.0.17

3 years ago

1.0.16

3 years ago

1.0.22

3 years ago

1.0.21

3 years ago

1.0.20

3 years ago

1.0.15

3 years ago

1.0.14

3 years ago

1.0.13

3 years ago

1.0.9

3 years ago

1.0.11

3 years ago

1.0.10

3 years ago

1.0.12

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago