2.7.1 • Published 10 days ago

art-validation v2.7.1

Weekly downloads
4
License
ISC
Repository
github
Last release
10 days ago

ArtValidator 2.0

Validate object properties.

NOTES

  • validators are evaluated before preprocessors
  • preprocessors should NOT throw validation-related errors

Example

Simplest: "name", must be a string (or null or undefined)

validator = new Validator name: "string"
# or, verbose: new Validator name: fieldType: "string"

assert.true !!validator.validate name: "Alice"
assert.true !!validator.validate {} # name not required

assert.throws -> validator.validate name: 123   # not a string

Required: "name", must be a string (and not null or undefined)

validator = new Validator name: "required string"
# or, verbose: new Validator name: required: true, fieldType: "string"

assert.true !!validator.validate name: "Alice"
assert.throws -> validator.validate {} # name required

Exclusive: "name" is the only field allowed

validator = new Validator {name: "string"}, exclusive: true
# or, verbose: new Validator {name: fieldType: "string"}, exclusive: true

assert.true !!validator.validate name: "Alice"
assert.throws -> validator.validate name: "Alice" age: 123 # exclusive!
assert.throws -> validator.validate name: 123

Three different ways to express field-property sequences:

new Validator age: required: "integer"  # only `required` and `present` can be expressed this way
new Validator age: "required integer"   # strings are broken up on word boundaries
new Validator age: ["required", "integer"]

USAGE

new Validator validatorFieldsProps, options

IN:
  validatorFieldsProps:
    plain object with zero or more field-validations defined:
      fieldName: fieldProps
  options:
    exclusive: true/false
      if true, only fields listed in validatorFieldsProps are allowed.

fieldProps:
  string or plainObject
  string: selects fieldProps from one of the standard @FieldTypes (see below)
  plainObject: (all fields are optional)

    validate: (v) -> true/false
      v is never null nor undefined
      whenever this field is included in an update OR create operation,
        validate() must return true
      NOTE: validate is evaluated BEFORE preprocess

    postValidate: (v) -> true/false
      v is never null nor undefined
      whenever this field is included in an update OR create operation,
        validate() must return true
      NOTE: validate is evaluated AFTER preprocess

    preprocess: (v1) -> v2
      v1 is never null nor undefined
      whenever this field is included in an update OR create operation,
        after validation succeeds,
        value = preprocess value
      NOTE: validate is evaluated BEFORE preprocess

    required: true/false/string
      if true/string
        when creating records, this field must be included
      if string
        fieldProps = merge fieldProps, FieldTypes[string]

    present: true/false
      if true
        when creating records, this field must be include and 'present' (see Art.Foundation.present)

    fieldType: string
      fieldProps = merge FieldTypes[string], fieldProps

    dataType: string
      sepecify which of the standard Json data-types this field contains
      This is not used by Validator itself, but is available for clients to reflect on field-types.
      Must be one of the values in: DataTypes

    instanceof: class
      in addition to passing validate(), if present, the value must also be an instance of the
      specified class

    default: value or function
      If field is not included in the object being validated, the default value will be used.
      If the default is a function, it will be invoked with f(fieldName, normalizedFieldProps)
      UNLESS your fieldProps.dataType is "function" in which case the default value is used as-is (see the "defaultFunction" option.

    defaultFunction: (fieldName, normalizedFieldProps) ->
      If your fieldProps.dataType is "function", you can use this to create the default function
      dynamically.
2.7.1

10 days ago

2.7.0

28 days ago

2.6.1

1 month ago

2.6.0

1 month ago

2.5.0

2 months ago

2.4.0

2 months ago

2.3.0

3 months ago

2.2.1

3 months ago

2.2.2

3 months ago

2.2.0

3 months ago

2.1.3

5 months ago

2.1.2

6 months ago

2.1.1

6 months ago

2.1.0

6 months ago

1.12.0

6 months ago

2.0.2

6 months ago

2.0.1

6 months ago

2.0.0

6 months ago

1.11.0

7 months ago

1.10.1

3 years ago

1.10.0

3 years ago

1.9.8

3 years ago

1.9.7

3 years ago

1.9.6

3 years ago

1.9.5

3 years ago

1.9.4

4 years ago

1.9.3

4 years ago

1.9.2

4 years ago

1.9.1

5 years ago

1.9.0

5 years ago

1.7.0

6 years ago

1.6.5

6 years ago

1.5.0

7 years ago

1.4.0

7 years ago

1.3.0

7 years ago

1.2.1

7 years ago

1.2.0

7 years ago

1.1.3

7 years ago

1.1.2

7 years ago