Skip to content

Add field error accumulation. #1

@Iltotore

Description

@Iltotore

Currently, errors on different fields are accumulated:

final payload = {'username': 'john'};
final validator = vine.compile(vine.object({
  'username': vine.string().minLength(3),
  'password': vine
    .string()
    .hasAtleastOneUpperCase() //Assuming some custom-defined extensions
    .hasAtleastOneLowerCase()
    .hasAtleastNumber()
})

//Error for both username (minLength) and password (string)
validator.validate({'username': 'a', 'password': 14})

But errors are short-circuiting on fields:

//Only the error for hasAtleastOneUpperCase is thrown
validator.validate({'username': 'Il_totore', 'password': 'abc'})

this is relevant when further validations depend on the first rule (e.g hasAtleastOneUpperCase depends on string) but there are many cases where we would like to accumulate fields error e.g:

//Error for hasAtleastOneUpperCase and hasAtleastOneNumber
validator.validate({'username': 'Il_totore', 'password': 'abc'})

a potential solution would be to add a rule operator (e.g batch)

<R> batch<R extends VineRule>(List<R Function(VineRule)>> rules)
final payload = {'username': 'john'};
final validator = vine.compile(vine.object({
  'username': vine.string().minLength(3),
  'password': vine
    .string()
    .batch([
      .hasAtleastOneUpperCase() //Assuming some custom-defined extensions
      .hasAtleastOneLowerCase()
      .hasAtleastNumber()
    ])
})

//Error for hasAtleastOneUpperCase and hasAtleastOneNumber
validator.validate({'username': 'Il_totore', 'password': 'abc'})

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions