functions.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. export const API_PREFIX = '/api'
  2. export const API_ROUTES = {
  3. ping: `${API_PREFIX}/ping`,
  4. dataCollect: `${API_PREFIX}/dataCollect`,
  5. experimentCollect: `${API_PREFIX}/experimentCollect`,
  6. listScenes: `${API_PREFIX}/listScenes`,
  7. listSceneQualities: sceneName => `${API_PREFIX}/listSceneQualities?${new URLSearchParams({ sceneName })}`,
  8. getImage: (sceneName, imageQuality, nearestQuality = false) => `${API_PREFIX}/getImage?${new URLSearchParams({ sceneName, imageQuality, nearestQuality })}`,
  9. getImageExtracts: (sceneName, imageQuality, horizontalExtractCount, verticalExtractCount, nearestQuality = false) =>
  10. `${API_PREFIX}/getImageExtracts?${new URLSearchParams({
  11. sceneName,
  12. imageQuality,
  13. horizontalExtractCount,
  14. verticalExtractCount,
  15. nearestQuality
  16. })}`
  17. }
  18. export const delay = ms => new Promise(res => setTimeout(res, ms))
  19. export const sortIntArray = intArray => intArray ? intArray.sort((a, b) => a - b) : null
  20. export const findNearestUpper = (value, arrInt) => {
  21. const arr = sortIntArray(arrInt)
  22. const index = arr.findIndex(x => value === x)
  23. if (index >= 0 && index <= arr.length - 1)
  24. return index === arr.length - 1
  25. ? arr[index]
  26. : arr[index + 1]
  27. }
  28. export const findNearestLower = (value, arrInt) => {
  29. const arr = sortIntArray(arrInt)
  30. const index = arr.findIndex(x => value === x)
  31. if (index >= 0 && index <= arr.length - 1)
  32. return index === 0
  33. ? arr[index]
  34. : arr[index - 1]
  35. }
  36. /**
  37. * Randomize array element order in-place.
  38. * Using Durstenfeld shuffle algorithm.
  39. * @param {any[]} array Array to randomize
  40. * @returns {any[]} The randomized array
  41. * @see https://stackoverflow.com/a/12646864
  42. */
  43. export const shuffleArray = array => {
  44. for (let i = array.length - 1; i > 0; i--) {
  45. const j = Math.floor(Math.random() * (i + 1));
  46. [array[i], array[j]] = [array[j], array[i]]
  47. }
  48. return array
  49. }
  50. // Serialize non-serializable objects (like window.screen)
  51. export const serialize = obj => Object.keys(Object.getPrototypeOf(obj)).reduce((acc, x) => ((acc[x] = obj[x]), acc), {})
  52. // Get a random int between two values (inclusive)
  53. export const rand = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min