api.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const error = require('../error');
  2. const path = require('path');
  3. const parser = require('json-schema-ref-parser');
  4. const ajv = require('ajv')({
  5. verbose: true,
  6. validateSchema: true,
  7. allErrors: false,
  8. format: 'full',
  9. coerceTypes: true
  10. });
  11. /**
  12. * @param {Object} schema
  13. * @param {Object} payload
  14. * @returns {Promise}
  15. */
  16. function apiValidator (schema, payload/*, description*/) {
  17. return new Promise(function Promise_apiValidator (resolve, reject) {
  18. if (typeof payload === 'undefined') {
  19. reject(new error.ValidationError('Payload is undefined'));
  20. }
  21. let validate = ajv.compile(schema);
  22. let valid = validate(payload);
  23. if (valid && !validate.errors) {
  24. resolve(payload);
  25. } else {
  26. let message = ajv.errorsText(validate.errors);
  27. let err = new error.ValidationError(message);
  28. err.debug = [validate.errors, payload];
  29. reject(err);
  30. }
  31. });
  32. }
  33. apiValidator.loadSchemas = parser
  34. .dereference(path.resolve('schema/index.json'))
  35. .then((schema) => {
  36. ajv.addSchema(schema);
  37. return schema;
  38. });
  39. module.exports = apiValidator;