Package contains some extensions for Adonis Validation extension.
- Install package
# 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
- Add
@baethon/adonis-validator-extras/providers/ValidationExtenderProvider
to application providers
Module provides validated()
macro for request instance. It will return data from request which went through route validators.
Only defined data will be returned.
Route
.post('/test', ({ request }) => {
console.log(request.validated())
})
.validator('Test')
This method will fail with exception if request was not validated with validator()
.
Indicative has support for nested rules.
In many ways they can be inconvienient:
class Test {
get rules () {
return {
name: 'required',
'address.street': 'string',
'address.city': 'string'
}
}
}
It gets even worse with arrays:
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.
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
:
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):
const { flattenRules } = require('@baethon/adonis-validator-extras')
class Test {
get rules () {
return {
email: 'unique:users,email,id,{{request.all().id}}'
}
}
}
module.exports = flattenRules(Test)
If you're planning to contribute to the package please make sure to adhere to following conventions.
- lint your code using standard; run
npm run lint
to check if there are any linting errors - make sure to write tests for all the changes/bug fixes
- 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