UNPKG

@clerk/shared

Version:

Internal package utils used by the Clerk SDKs

1 lines 3.58 kB
{"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":[]}