https://github.com/baethon/adonis-validator-extras
  
  
    Validator goodies for Adonis framework 
    https://github.com/baethon/adonis-validator-extras
  
        Last synced: 6 months ago 
        JSON representation
    
Validator goodies for Adonis framework
- Host: GitHub
 - URL: https://github.com/baethon/adonis-validator-extras
 - Owner: baethon
 - License: mit
 - Created: 2017-12-04T17:45:40.000Z (almost 8 years ago)
 - Default Branch: master
 - Last Pushed: 2017-12-22T15:07:13.000Z (almost 8 years ago)
 - Last Synced: 2025-02-16T21:18:11.439Z (9 months ago)
 - Language: JavaScript
 - Homepage:
 - Size: 37.1 KB
 - Stars: 2
 - Watchers: 2
 - Forks: 0
 - Open Issues: 0
 - 
            Metadata Files:
            
- Readme: README.md
 - Changelog: CHANGELOG.md
 - License: LICENSE
 
 
Awesome Lists containing this project
README
          # @baethon/adonis-validator-extras
Package contains some extensions for [Adonis Validation](https://github.com/adonisjs/adonis-validation-provider) extension.
# Table of contents
- [Installation](#installation)
- [Request extension](#request-extension)
- [Validator rules flattener](#validator-rules-flattener)
- [development](#development)
    - [tests & linting](#tests--linting)
    - [issues & PR](#issues--pr)
## Installation
1. Install package
    ```bash
    # via adonis
    adonis install @baethon/adonis-validator-extras
    # or for Yarn users
    adonis install --yarn @baethon/adonis-validator-extras
    # or via yarn
    yarn add @baethon/adonis-validator-extras
    # or via npm
    npm i @baethon/adonis-validator-extras
    ```
1. Add `@baethon/adonis-validator-extras/providers/ValidationExtenderProvider` to application providers
## Request extension
Module provides `validated()` macro for request instance. It will return data from request which went through [route validators](http://adonisjs.com/docs/4.0/validator#_route_validator).
Only defined data will be returned.
```js
Route
  .post('/test', ({ request }) => {
    console.log(request.validated())
  })
  .validator('Test')
```
This method will fail with exception if request was not validated with `validator()`.
## Validator rules flattener
[Indicative](http://indicative.adonisjs.com/) has support for nested rules.
In many ways they can be inconvienient:
```js
class Test {
  get rules () {
    return {
      name: 'required',
      'address.street': 'string',
      'address.city': 'string'
    }
  }
}
```
It gets even worse with arrays:
```js
class Test {
  get rules () {
    return {
      name: 'required',
      'family.*.name': 'string',
      'family.*.age': 'integer',
    }
  }
}
```
Package provides `flattenRules` helper which allows to write nested rules in more natural manner and later _flatten_ them to format accepted by Indicative.
```js
const { flattenRules } = require('@baethon/adonis-validator-extras')
class Test {
  get rules () {
    return {
      name: 'required',
      family: [{
        name: 'string',
        age: 'integer'
      }]
    }
  }
}
module.exports = flattenRules(Test)
```
`flattenRules` will process rules only once. Results are cached which means that `rules` getter **will be static**.
Flattened rules support string interpolation of values from `ctx`:
```js
const { flattenRules } = require('@baethon/adonis-validator-extras')
class Test {
  get rules () {
    return {
      email: 'unique:users,email,id,{{params.id}}'
    }
  }
}
module.exports = flattenRules(Test)
```
It's also possible to call methods from context (without any arguments):
```js
const { flattenRules } = require('@baethon/adonis-validator-extras')
class Test {
  get rules () {
    return {
      email: 'unique:users,email,id,{{request.all().id}}'
    }
  }
}
module.exports = flattenRules(Test)
```
## development
If you're planning to contribute to the package please make sure to adhere to following conventions.
### tests & linting
* lint your code using [standard](https://standardjs.com/); run `npm run lint` to check if there are any linting errors
* make sure to write tests for all the changes/bug fixes
### issues & PR
* try to provide regression test when you find a bug
* share some context on what you are trying to do, with enough code to reproduce the issue