Skip to content

JS object validation done simply. Inspired by Ecto and Active Record.

Notifications You must be signed in to change notification settings

gregors/simple-valley

Repository files navigation

Simple Validations for objects

List of validations

validateRequired

Validates that the object contains the required key. Says nothing about the value of the key(currently).

  let validator = newValidator({title: undefined })
  validator = validateRequired(validator, 'title')
  validator.isValid // true

  let validator = newValidator({})
  validator = validateRequired(validator, 'title')
  validator.isValid // false
  validator.messages[0] // { field: 'title', type: 'required', message: 'title required' }

validateNotBlank

Validates that the field contains a non-whitespace string. Numbers return valid. Null's return invalid.

let validator = newValidator({title: 'hello' })
validator = validateNotBlank(validator, 'title')
validator.isValid // true

let validator = newValidator({title: '' })
validator = validateNotBlank(validator, 'title')
validator.isValid // false
validator.messages[0] // { field: 'title', type: 'blank', message: 'title blank' }

validateEmail

Validates using a simplistic non-complete check for email.

let validator = newValidator({email: '[email protected]' })
validator = validateEmail(validator, 'email')
validator.isValid // true

let validator = newValidator({email: 'gregors' })
validator = validateEmail(validator, 'email')
validator.isValid // false
validator.messages[0] // { field: 'title', type: 'invalid_email', message: 'invalid email' }

validateNumber

Validates the field is a number with options for min and max values.

let validator = newValidator({age: 7 })
validator = validateNumber(validator, 'age', {min: 4, max: 7})
validator.isValid // true

let validator = newValidator({age: 8 })
validator = validateNumber(validator, 'age', {min: 4, max: 7})
validator.isValid // false
validator.messages[0] // { field: 'title', type: 'number_max', message: 'age too large' }

validateInclusion

Validates the field's value is one of the provided choices.

let validator = newValidator({title: 'EMPLOYEE' })
validator = validateInclusion(validator, 'title', { choices: ['EMPLOYEE', 'MANAGER']})
validator.isValid // true

let validator = newValidator({title: 'CONTRACTOR' })
validator = validateInclusion(validator, 'title', { choices: ['EMPLOYEE', 'MANAGER']})
validator.isValid // false
validator.messages[0] // { field: 'title', type: 'inclusiont', message: 'CONTRACTOR is not a choice' }

validateUrl

Validates that the field contains a valid URL.

let validator = newValidator({url: 'https://github.com/gregors' })
validator = validateUrl(validator, 'url')
validator.isValid // true

let validator = newValidator({url: 'https/github.com/gregors' })
validator = validateUrl(validator, 'url')
validator.isValid // false
validator.messages[0] // { field: 'url', type: 'invalid_url', message: 'invalid url' }

validateLength

Validates the field by calling the '.length' method and comparing it with the provided min and max options.

let validator = newValidator({name: 'gregors' })
validator = validateLength(validator, 'name', {min: 4, max: 20})
validator.isValid // true

let validator = newValidator({scores: ['0', '100', '50'] })
validator = validateLength(validator, 'scores', {min: 4})
validator.isValid // false
validator.messages[0] // { field: 'scores', type: 'length_min', message: 'scores not min length ' }

validateFormat

Validates the field by comparing the field with the regular expression provided as part of the withFormat option.

let validator = newValidator({name: 'gregors' })
validator = validateFormat(validator, 'name', {withFormat: /[a-z]+/})
validator.isValid // true

let validator = newValidator({name: 'GREGORS' })
validator = validateFormat(validator, 'name', {withFormat: /[a-z]+/})
validator.isValid // false
validator.messages[0] // { field: 'name', type: 'invalid_format', message: 'name is invalid' }

About

JS object validation done simply. Inspired by Ecto and Active Record.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published