Record Validation
Automation scripts provide the ability to validate records before they are created or updated. This helps us define a system that is more resilient to the dangers of malformed user input.
| Record validation from a script can be performed by scripts that are executed on: server scripts: 
 client scripts: 
 | 
When we wish to warn the user about a value error, the flow differs from client and server scripts, but the result is the same — a set of validator.ValidatorError objects contained inside a validator.Validated object (refer to [coredev-compose-recordValidation] for details).
interface ValidatorError {
  kind: string;
  message: string;
  meta: { [key: string]: unknown };
}
interface Validated {
  set: ValidatorError[];
}Server scripts
When we wish to provide value errors from server scripts, we simply throw an instance of validator.ValidatorError.
For example:
import { validator } from '@cortezaproject/corteza-js'
export default {
  ...
  async exec ({ $record }) {
    if ($record.value.Field !== 'Super Specific Value') {
      throw new validator.ValidatorError({
        kind: 'invalidValue',
        message: 'You didn\'t inter the super specific value',
        meta: {
          field: 'Field',
          recordID: $record.recordID,
        },
      })
    }
  },
}Client Scripts
When executing client scripts, two extra parameters are present:
- ctx.validator
- 
The parameter contains the compose.RecordValidatorobject, that can be used to validate the record this script is executing for.
- ctx.errors
- 
The parameter contains the validator.Validatedobject, that contains current errors, and provides a place to store new errors.
When we wish to provide value errors from inside client scripts, we either use the ctx.validator or construct a validator.ValidatorError object manually.
The validator.ValidatorErrors should then be pushed into ctx.errors.
For example:
import { validator } from '@cortezaproject/corteza-js'
export default {
  ...
  async exec ({ $record }, { errors, validator }) {
    const errs = new validator.Validated()
    if ($record.values.Field !== 'Super Specific Value') {
      errs.push(new validator.ValidatorError({
        kind: 'invalidValue',
        message: 'You didn\'t inter the super specific value',
        meta: {
          field: 'Field',
          recordID: $record.recordID,
        },
      }))
    }
    $record.values.FullName = `${$record.values.FirstName} ${$record.values.LastName}`
    errs.push(...validator.run($record).set)
    errors.push(...errs)
  },
}| When the validator is unable to find any errors, the returned   |