client-common.esm.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. function createAuth(authMode, appId, apiKey) {
  2. const credentials = {
  3. 'x-algolia-api-key': apiKey,
  4. 'x-algolia-application-id': appId,
  5. };
  6. return {
  7. headers() {
  8. return authMode === AuthMode.WithinHeaders ? credentials : {};
  9. },
  10. queryParameters() {
  11. return authMode === AuthMode.WithinQueryParameters ? credentials : {};
  12. },
  13. };
  14. }
  15. function createRetryablePromise(callback) {
  16. let retriesCount = 0; // eslint-disable-line functional/no-let
  17. const retry = () => {
  18. retriesCount++;
  19. return new Promise((resolve) => {
  20. setTimeout(() => {
  21. resolve(callback(retry));
  22. }, Math.min(100 * retriesCount, 1000));
  23. });
  24. };
  25. return callback(retry);
  26. }
  27. function createWaitablePromise(promise, wait = (_response, _requestOptions) => {
  28. return Promise.resolve();
  29. }) {
  30. // eslint-disable-next-line functional/immutable-data
  31. return Object.assign(promise, {
  32. wait(requestOptions) {
  33. return createWaitablePromise(promise
  34. .then(response => Promise.all([wait(response, requestOptions), response]))
  35. .then(promiseResults => promiseResults[1]));
  36. },
  37. });
  38. }
  39. // eslint-disable-next-line functional/prefer-readonly-type
  40. function shuffle(array) {
  41. let c = array.length - 1; // eslint-disable-line functional/no-let
  42. // eslint-disable-next-line functional/no-loop-statement
  43. for (c; c > 0; c--) {
  44. const b = Math.floor(Math.random() * (c + 1));
  45. const a = array[c];
  46. array[c] = array[b]; // eslint-disable-line functional/immutable-data, no-param-reassign
  47. array[b] = a; // eslint-disable-line functional/immutable-data, no-param-reassign
  48. }
  49. return array;
  50. }
  51. function addMethods(base, methods) {
  52. if (!methods) {
  53. return base;
  54. }
  55. Object.keys(methods).forEach(key => {
  56. // eslint-disable-next-line functional/immutable-data, no-param-reassign
  57. base[key] = methods[key](base);
  58. });
  59. return base;
  60. }
  61. function encode(format, ...args) {
  62. // eslint-disable-next-line functional/no-let
  63. let i = 0;
  64. return format.replace(/%s/g, () => encodeURIComponent(args[i++]));
  65. }
  66. const version = '4.13.0';
  67. const destroy = (base) => {
  68. return () => {
  69. return base.transporter.requester.destroy();
  70. };
  71. };
  72. const AuthMode = {
  73. /**
  74. * If auth credentials should be in query parameters.
  75. */
  76. WithinQueryParameters: 0,
  77. /**
  78. * If auth credentials should be in headers.
  79. */
  80. WithinHeaders: 1,
  81. };
  82. export { AuthMode, addMethods, createAuth, createRetryablePromise, createWaitablePromise, destroy, encode, shuffle, version };