index.js 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. const _ = require('lodash');
  2. const error = require('../error');
  3. const commonDefinitions = require('../../schema/common.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: [commonDefinitions]
  11. });
  12. /**
  13. *
  14. * @param {Object} schema
  15. * @param {Object} payload
  16. * @returns {Promise}
  17. */
  18. function validator (schema, payload) {
  19. return new Promise(function (resolve, reject) {
  20. if (!payload) {
  21. reject(new error.InternalValidationError('Payload is falsy'));
  22. } else {
  23. try {
  24. let validate = ajv.compile(schema);
  25. let valid = validate(payload);
  26. if (valid && !validate.errors) {
  27. resolve(_.cloneDeep(payload));
  28. } else {
  29. let message = ajv.errorsText(validate.errors);
  30. reject(new error.InternalValidationError(message));
  31. }
  32. } catch (err) {
  33. reject(err);
  34. }
  35. }
  36. });
  37. }
  38. module.exports = validator;