All files / lib/middlewares schema.js

46.15% Statements 6/13
0% Branches 0/4
0% Functions 0/3
46.15% Lines 6/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 422x   2x 2x 2x                   2x                                               2x      
const Ajv = require('ajv').default;
 
const ajv = new Ajv({ allErrors: true });
require('ajv-formats')(ajv);
require('ajv-errors')(ajv /* , {singleError: true} */);
 
/**
 * функція-фабрика, яка валідаційну schema
 * проводить ініціалізацію validationFunction
 * та повертає функцію типу middleware
 * @param options конфіг для валідації.
 * @returns {validatorMiddleware}  middleware, де в залежності
 * від виконання обробника виконується подальша логіка
 */
const validator = (schema) => {
  const validate = ajv.compile(schema);
 
  /**
   * @func validatorMiddleware перевіряє дані за допомогою валідаційної функції
   * та повертає або помилку або продовжує ланцюжок екшинів в залежності від
   * наявності чи відсутності помилок
   * @param err помилка, що виникла на одній з минулих ітерації.
   * @param msg об'єкт з даними.
   * @param next функція-колбек наступної проміжної обробки.
   */
  return (err, msg, next) => {
    validate(msg.content);
    if (validate.errors) {
      throw new Error(`Bad message format. 
${JSON.stringify(msg.content, null, '')}
${validate.errors
  .map((e) => `On the path "${e.instancePath || '#'}": ${e.message}`)
  .join('')}`);
    }
    next();
  };
};
 
module.exports = {
  validator,
};