executeQuery.js 960 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. const LOG_RESULT = false
  2. const RESPONSE_DELAY = null
  3. export default async function executeQuery({
  4. callback,
  5. user,
  6. resource,
  7. permissions,
  8. id,
  9. data,
  10. idValidator = _identity,
  11. validator = _identity,
  12. mutator = _identity,
  13. query = _noop
  14. }) {
  15. try {
  16. if (permissions) {
  17. await authorize(user, resource, permissions)
  18. }
  19. let validId, validData
  20. if (id) {
  21. validId = idValidator(id)
  22. }
  23. if (data) {
  24. validData = validator(data)
  25. }
  26. const rawResult = await query({ id: validId, data: validData })
  27. const result = mutator(rawResult)
  28. if (LOG_RESULT) {
  29. console.log("[executeQuery]")
  30. console.dir(result)
  31. }
  32. if (RESPONSE_DELAY) {
  33. console.log("[executeQuery] [response delay]", RESPONSE_DELAY)
  34. await sleep(RESPONSE_DELAY)
  35. }
  36. callback({ data: result })
  37. return result
  38. } catch (error) {
  39. console.error("[executeQuery]", error)
  40. callback({ error })
  41. }
  42. }