index.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const _ = require('lodash');
  2. const error = require('../error');
  3. const definitions = require('../../schema/definitions.json');
  4. RegExp.prototype.toJSON = RegExp.prototype.toString;
  5. const ajv = require('ajv')({
  6. verbose: true,
  7. allErrors: true,
  8. format: 'full', // strict regexes for format checks
  9. coerceTypes: true,
  10. schemas: [
  11. definitions
  12. ]
  13. });
  14. /**
  15. *
  16. * @param {Object} schema
  17. * @param {Object} payload
  18. * @returns {Promise}
  19. */
  20. function validator (schema, payload) {
  21. return new Promise(function (resolve, reject) {
  22. if (!payload) {
  23. reject(new error.InternalValidationError('Payload is falsy'));
  24. } else {
  25. try {
  26. let validate = ajv.compile(schema);
  27. let valid = validate(payload);
  28. if (valid && !validate.errors) {
  29. resolve(_.cloneDeep(payload));
  30. } else {
  31. let message = ajv.errorsText(validate.errors);
  32. reject(new error.InternalValidationError(message));
  33. }
  34. } catch (err) {
  35. reject(err);
  36. }
  37. }
  38. });
  39. }
  40. module.exports = validator;