{"version":3,"sources":["../src/utils/createDeferredPromise.ts","../src/utils/runWithExponentialBackOff.ts","../src/utils/logErrorInDevMode.ts"],"sourcesContent":["import { noop } from './noop';\n\ntype Callback = (val?: any) => void;\n\n/**\n * Create a promise that can be resolved or rejected from\n * outside the Promise constructor callback\n */\nexport const createDeferredPromise = () => {\n  let resolve: Callback = noop;\n  let reject: Callback = noop;\n  const promise = new Promise((res, rej) => {\n    resolve = res;\n    reject = rej;\n  });\n  return { promise, resolve, reject };\n};\n","type Milliseconds = number;\n\ntype BackoffOptions = Partial<{\n  firstDelay: Milliseconds;\n  maxDelay: Milliseconds;\n  timeMultiple: number;\n  shouldRetry: (error: unknown, iterationsCount: number) => boolean;\n}>;\n\nconst defaultOptions: Required<BackoffOptions> = {\n  firstDelay: 125,\n  maxDelay: 0,\n  timeMultiple: 2,\n  shouldRetry: () => true,\n};\n\nconst sleep = async (ms: Milliseconds) => new Promise(s => setTimeout(s, ms));\n\nconst createExponentialDelayAsyncFn = (opts: {\n  firstDelay: Milliseconds;\n  maxDelay: Milliseconds;\n  timeMultiple: number;\n}) => {\n  let timesCalled = 0;\n\n  const calculateDelayInMs = () => {\n    const constant = opts.firstDelay;\n    const base = opts.timeMultiple;\n    const delay = constant * Math.pow(base, timesCalled);\n    return Math.min(opts.maxDelay || delay, delay);\n  };\n\n  return async (): Promise<void> => {\n    await sleep(calculateDelayInMs());\n    timesCalled++;\n  };\n};\n\nexport const runWithExponentialBackOff = async <T>(\n  callback: () => T | Promise<T>,\n  options: BackoffOptions = {},\n): Promise<T> => {\n  let iterationsCount = 0;\n  const { shouldRetry, firstDelay, maxDelay, timeMultiple } = {\n    ...defaultOptions,\n    ...options,\n  };\n  const delay = createExponentialDelayAsyncFn({ firstDelay, maxDelay, timeMultiple });\n\n  // eslint-disable-next-line no-constant-condition\n  while (true) {\n    try {\n      return await callback();\n    } catch (e) {\n      iterationsCount++;\n      if (!shouldRetry(e, iterationsCount)) {\n        throw e;\n      }\n      await delay();\n    }\n  }\n};\n","import { isDevelopmentEnvironment } from './runtimeEnvironment';\n\nexport const logErrorInDevMode = (message: string) => {\n  if (isDevelopmentEnvironment()) {\n    console.error(message);\n  }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQO,IAAM,wBAAwB,MAAM;AACzC,MAAI,UAAoB;AACxB,MAAI,SAAmB;AACvB,QAAM,UAAU,IAAI,QAAQ,CAAC,KAAK,QAAQ;AACxC,cAAU;AACV,aAAS;AAAA,EACX,CAAC;AACD,SAAO,EAAE,SAAS,SAAS,OAAO;AACpC;;;ACPA,IAAM,iBAA2C;AAAA,EAC/C,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,cAAc;AAAA,EACd,aAAa,MAAM;AACrB;AAEA,IAAM,QAAQ,OAAO,OAAqB,IAAI,QAAQ,OAAK,WAAW,GAAG,EAAE,CAAC;AAE5E,IAAM,gCAAgC,CAAC,SAIjC;AACJ,MAAI,cAAc;AAElB,QAAM,qBAAqB,MAAM;AAC/B,UAAM,WAAW,KAAK;AACtB,UAAM,OAAO,KAAK;AAClB,UAAM,QAAQ,WAAW,KAAK,IAAI,MAAM,WAAW;AACnD,WAAO,KAAK,IAAI,KAAK,YAAY,OAAO,KAAK;AAAA,EAC/C;AAEA,SAAO,YAA2B;AAChC,UAAM,MAAM,mBAAmB,CAAC;AAChC;AAAA,EACF;AACF;AAEO,IAAM,4BAA4B,OACvC,UACA,UAA0B,CAAC,MACZ;AACf,MAAI,kBAAkB;AACtB,QAAM,EAAE,aAAa,YAAY,UAAU,aAAa,IAAI;AAAA,IAC1D,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACA,QAAM,QAAQ,8BAA8B,EAAE,YAAY,UAAU,aAAa,CAAC;AAGlF,SAAO,MAAM;AACX,QAAI;AACF,aAAO,MAAM,SAAS;AAAA,IACxB,SAAS,GAAG;AACV;AACA,UAAI,CAAC,YAAY,GAAG,eAAe,GAAG;AACpC,cAAM;AAAA,MACR;AACA,YAAM,MAAM;AAAA,IACd;AAAA,EACF;AACF;;;AC3DO,IAAM,oBAAoB,CAAC,YAAoB;AACpD,MAAI,yBAAyB,GAAG;AAC9B,YAAQ,MAAM,OAAO;AAAA,EACvB;AACF;","names":[]}