ccashfrontend/views/node_modules/express-validator/check/schema.js
2021-06-18 09:20:09 +10:00

48 lines
No EOL
1.5 KiB
JavaScript

const { isValidator } = require('../utils/filters');
const check = require('./check');
const validLocations = ['body', 'cookies', 'headers', 'params', 'query'];
const notValidators = ['errorMessage', 'in'];
module.exports = (
schema,
defaultLocations = validLocations,
chainCreator = check
) => Object.keys(schema).map(field => {
const config = schema[field];
const chain = chainCreator(
field,
ensureLocations(config, defaultLocations),
config.errorMessage
);
Object.keys(config)
.filter(method => config[method] && !notValidators.includes(method))
.forEach(method => {
if (typeof chain[method] !== 'function') {
console.warn(`express-validator: a validator with name ${method} does not exist`);
return;
}
const methodCfg = config[method];
let options = methodCfg.options || [];
if (options != null && !Array.isArray(options)) {
options = [options];
}
const methodIsValidator = isValidator(method) || method === 'custom' || method === 'exists';
methodIsValidator && methodCfg.negated && chain.not();
chain[method](...options);
methodIsValidator && chain.withMessage(methodCfg.errorMessage);
});
return chain;
});
function ensureLocations(config, defaults) {
const locations = (Array.isArray(config.in) ? config.in : [config.in]).filter(Boolean);
const actualLocations = locations.length ? locations : defaults;
return actualLocations.filter(location => validLocations.includes(location));
}