1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- const _ = require('lodash');
- const selectFields = require('../utils/select-fields');
- const utils = require('./utils');
- module.exports = function(contexts, req) {
- _(contexts)
- .filter(context => !context.ran)
- .flatMap(context => {
- return _(selectFields(req, context))
- .map(field => ({ field, context }))
- .groupBy(pair => pair.field.path)
- .map(pairs => pairs[0])
- .value();
- })
- .forEach(pairs => {
- const { field, context } = pairs;
- context.validators.map(validatorCfg => {
- const result = validatorCfg.validator(
- validatorCfg.custom ? field.value : utils.toString(field.value),
- ...validatorCfg.options
- );
- const errorObj = {
- location: field.location,
- value: field.value,
- param: utils.formatParamOutput(field.path),
- msg: utils.replaceArgs(
- validatorCfg.message || context.message || 'Invalid value',
- [field.value, ...validatorCfg.options]
- )
- };
- if (result && result.then) {
- req._asyncValidationErrors.push(result.then(() => {
- validatorCfg.negated && req._validationErrors.push(errorObj);
- }, () => {
- !validatorCfg.negated && req._validationErrors.push(errorObj);
- }));
- } else if ((!validatorCfg.negated && !result) || (validatorCfg.negated && result)) {
- req._validationErrors.push(errorObj);
- }
- });
- context.ran = true;
- });
- };
|