UNPKG

@hazae41/piscine

Version:

Create async pools with automatic retry

134 lines (132 loc) 2.74 kB
var _a; class TooManyRetriesError extends Error { #class = _a; name = this.#class.name; constructor(options) { super(`Too many retries`, options); } static from(cause) { return new _a({ cause }); } } _a = TooManyRetriesError; class Cancel { inner; constructor(inner) { this.inner = inner; } static new(inner) { return new Cancel(inner); } isCancel() { return true; } isRetry() { return false; } isSkip() { return false; } } class Retry { inner; constructor(inner) { this.inner = inner; } static new(inner) { return new Retry(inner); } isCancel() { return false; } isRetry() { return true; } isSkip() { return false; } } (function (Retry) { function runSync(f) { try { return f(); } catch (error) { throw new Retry(error); } } Retry.runSync = runSync; async function run(f) { try { return await f(); } catch (error) { throw new Retry(error); } } Retry.run = run; })(Retry || (Retry = {})); class Skip { inner; constructor(inner) { this.inner = inner; } static new(inner) { return new Skip(inner); } isCancel() { return false; } isRetry() { return false; } isSkip() { return true; } } (function (Skip) { function runSync(f) { try { return f(); } catch (error) { throw new Skip(error); } } Skip.runSync = runSync; async function run(f) { try { return await f(); } catch (error) { throw new Skip(error); } } Skip.run = run; })(Skip || (Skip = {})); async function loopOrThrow(looper, options = {}) { const { init = 1000, base = 2, max = 3 } = options; const errors = new Array(); for (let i = 0; i < max; i++) { try { return await looper(i); } catch (error) { if (error instanceof Cancel) throw error.inner; if (error instanceof Skip) { errors.push(error); continue; } if (error instanceof Retry) { errors.push(error); await new Promise(ok => setTimeout(ok, init * (base ** i))); continue; } throw error; } } throw TooManyRetriesError.from(errors); } export { Cancel, Retry, Skip, TooManyRetriesError, loopOrThrow }; //# sourceMappingURL=loop.mjs.map