UNPKG

1.56 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.matchedData = void 0;
4const _ = require("lodash");
5const base_1 = require("./base");
6function matchedData(req, options = {}) {
7 const internalReq = req;
8 const fieldExtractor = createFieldExtractor(options.includeOptionals !== true);
9 const validityFilter = createValidityFilter(options.onlyValidData);
10 const locationFilter = createLocationFilter(options.locations);
11 return _(internalReq[base_1.contextsKey])
12 .flatMap(fieldExtractor)
13 .filter(validityFilter)
14 .map(field => field.instance)
15 .filter(locationFilter)
16 .reduce((state, instance) => _.set(state, instance.path, instance.value), {})
17 .valueOf();
18}
19exports.matchedData = matchedData;
20function createFieldExtractor(removeOptionals) {
21 return (context) => {
22 const instances = context.getData({ requiredOnly: removeOptionals });
23 return instances.map((instance) => ({ instance, context }));
24 };
25}
26function createValidityFilter(onlyValidData = true) {
27 return !onlyValidData
28 ? () => true
29 : (field) => {
30 const hasError = field.context.errors.some(error => error.location === field.instance.location && error.param === field.instance.path);
31 return !hasError;
32 };
33}
34function createLocationFilter(locations = []) {
35 // No locations mean all locations
36 const allLocations = locations.length === 0;
37 return allLocations ? () => true : (field) => locations.includes(field.location);
38}