index.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const _ = require('lodash');
  2. const Ajv = require('ajv/dist/2020');
  3. const error = require('../error');
  4. const commonDefinitions = require('../../schema/common.json');
  5. RegExp.prototype.toJSON = RegExp.prototype.toString;
  6. const ajv = new Ajv({
  7. verbose: true,
  8. allErrors: true,
  9. allowUnionTypes: true,
  10. coerceTypes: true,
  11. strict: false,
  12. schemas: [commonDefinitions]
  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;