express-validator
Advanced tools
Comparing version 5.1.0 to 5.1.1
@@ -12,7 +12,4 @@ const _ = require('lodash'); | ||
const promises = validationChains.map(chain => { | ||
if (!Array.isArray(chain)) { | ||
return run(chain); | ||
} | ||
return Promise.all(chain.map(run)).then(results => _.flatten(results, true)); | ||
const group = Array.isArray(chain) ? chain : [chain]; | ||
return Promise.all(group.map(run)).then(results => _.flatten(results)); | ||
}); | ||
@@ -23,4 +20,6 @@ | ||
req._validationErrors = req._validationErrors || []; | ||
req._validationErrorsOneOf = _.flatten(results); | ||
const failedGroupContexts = findFailedGroupContexts(results, validationChains); | ||
req._validationOneOfFailures = (req._validationOneOfFailures || []).concat(failedGroupContexts); | ||
const empty = results.some(result => result.length === 0); | ||
@@ -44,2 +43,10 @@ if (!empty) { | ||
function findFailedGroupContexts(results, validationChains) { | ||
return _(results) | ||
// If the group is free of errors, the empty array plays the trick of filtering such group. | ||
.flatMap((result, index) => result.length > 0 ? validationChains[index] : []) | ||
.map(getContext) | ||
.value(); | ||
} | ||
function getDynamicMessage(message, req) { | ||
@@ -46,0 +53,0 @@ if (typeof message !== 'function') { |
@@ -45,3 +45,2 @@ import { ValidationChain, ValidatorOptions, CustomValidator } from './check'; | ||
isDataURI?: ValidatorSchemaOptions; | ||
isDate?: ValidatorSchemaOptions; | ||
isDecimal?: ValidatorSchemaOptions; | ||
@@ -48,0 +47,0 @@ isDivisibleBy?: ValidatorSchemaOptions; |
@@ -5,2 +5,3 @@ const _ = require('lodash'); | ||
module.exports = (req, options = {}) => { | ||
const fieldExtractor = createFieldExtractor(req); | ||
const validityFilter = createValidityFilter(req, options); | ||
@@ -10,4 +11,5 @@ const locationsFilter = createLocationFilter(options); | ||
return _(req._validationContexts) | ||
.flatMap(context => selectFields(req, context)) | ||
.flatMap(fieldExtractor) | ||
.filter(validityFilter) | ||
.map(field => field.instance) | ||
.filter(locationsFilter) | ||
@@ -18,15 +20,19 @@ .reduce((state, field) => _.set(state, field.path, field.value), {}) | ||
function createFieldExtractor(req) { | ||
return context => [].concat(selectFields(req, context)).map(instance => ({ | ||
instance, | ||
context | ||
})); | ||
} | ||
function createValidityFilter(req, { onlyValidData }) { | ||
onlyValidData = onlyValidData === undefined ? true : onlyValidData; | ||
return !onlyValidData ? () => true : field => { | ||
const isSameRef = error => ( | ||
error.param === field.path && | ||
error.location === field.location | ||
); | ||
const hasError = req._validationErrors.some(error => ( | ||
error.param === field.instance.path && | ||
error.location === field.instance.location | ||
)); | ||
const isFailedOneOfGroup = (req._validationOneOfFailures || []).includes(field.context); | ||
const failed = | ||
req._validationErrors.some(isSameRef) || | ||
(req._validationErrorsOneOf || []).some(isSameRef); | ||
return !failed; | ||
return !(hasError || isFailedOneOfGroup); | ||
}; | ||
@@ -33,0 +39,0 @@ } |
@@ -88,3 +88,2 @@ // Type definitions for express-validator 3.0.0 | ||
isMongoId?: ValidatorSchemaOptions | ||
isDate?: ValidatorSchemaOptions | ||
isAfter?: ValidatorSchemaOptions | ||
@@ -91,0 +90,0 @@ isBefore?: ValidatorSchemaOptions |
@@ -9,3 +9,3 @@ { | ||
], | ||
"version": "5.1.0", | ||
"version": "5.1.1", | ||
"homepage": "https://github.com/ctavan/express-validator", | ||
@@ -12,0 +12,0 @@ "license": "MIT", |
@@ -443,2 +443,5 @@ # express-validator | ||
**Note:** Chains are mutable. Every time you call one of its methods, you're adding more behavior to the same chain. | ||
Keep this in mind and note that you probably want to use a factory function when reusing some chain base. | ||
Additionally, the following methods are also available: | ||
@@ -445,0 +448,0 @@ |
@@ -7,6 +7,4 @@ const { check, validationResult } = require('./check'); | ||
app.use(express.json()); | ||
app.post('/*', [ | ||
check('http://www.somesite.com').isInt() | ||
], (req, res) => { | ||
console.log(req.body); | ||
app.post('/*', check('q').escape(), (req, res) => { | ||
console.log(req.body, req.query); | ||
const data = matchedData(req); | ||
@@ -16,2 +14,3 @@ const result = validationResult(req); | ||
res.json({ | ||
data, | ||
errors: result.mapped() | ||
@@ -18,0 +17,0 @@ }); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
83451
1422
741