@baethon/adonis-validator-extras
v1.1.0
Published
Validator goodies for Adonis framework
Downloads
2
Readme
@baethon/adonis-validator-extras
Package contains some extensions for Adonis Validation extension.
Table of contents
Installation
- 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
Request extension
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()
.
Validator rules flattener
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)
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; 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