@aws-amplify/core
Version:
Core category of aws-amplify
1 lines • 4.94 kB
Source Map (JSON)
{"version":3,"file":"retry.mjs","sources":["../../../../src/utils/retry/retry.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { ConsoleLogger } from '../../Logger/ConsoleLogger';\nimport { isNonRetryableError } from './isNonRetryableError';\nconst logger = new ConsoleLogger('retryUtil');\n/**\n * @private\n * Internal use of Amplify only\n */\nexport async function retry(functionToRetry, args, delayFn, onTerminate) {\n if (typeof functionToRetry !== 'function') {\n throw Error('functionToRetry must be a function');\n }\n // TODO(eslint): remove this linter suppression with refactoring.\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n let attempt = 0;\n let terminated = false;\n let timeout;\n let wakeUp = () => {\n // no-op\n }; // will be replaced with a resolver()\n // used after the loop if terminated while waiting for a timer.\n let lastError;\n onTerminate &&\n onTerminate.then(() => {\n // signal not to try anymore.\n terminated = true;\n // stop sleeping if we're sleeping.\n clearTimeout(timeout);\n wakeUp();\n });\n // TODO(eslint): remove this linter suppression with refactoring.\n // eslint-disable-next-line no-unmodified-loop-condition\n while (!terminated) {\n attempt++;\n logger.debug(`${functionToRetry.name} attempt #${attempt} with this vars: ${JSON.stringify(args)}`);\n try {\n resolve(await functionToRetry(...args));\n return;\n }\n catch (err) {\n lastError = err;\n logger.debug(`error on ${functionToRetry.name}`, err);\n if (isNonRetryableError(err)) {\n logger.debug(`${functionToRetry.name} non retryable error`, err);\n reject(err);\n return;\n }\n const retryIn = delayFn(attempt, args, err);\n logger.debug(`${functionToRetry.name} retrying in ${retryIn} ms`);\n // we check `terminated` again here because it could have flipped\n // in the time it took `functionToRetry` to return.\n if (retryIn === false || terminated) {\n reject(err);\n return;\n }\n else {\n await new Promise(_resolve => {\n wakeUp = _resolve; // export wakeUp for onTerminate handling\n timeout = setTimeout(wakeUp, retryIn);\n });\n }\n }\n }\n // reached if terminated while waiting for a timer.\n reject(lastError);\n });\n}\n"],"names":[],"mappings":";;;AAAA;AACA;AAGA,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;AAC9C;AACA;AACA;AACA;AACO,eAAe,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE;AACzE,IAAI,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE;AAC/C,QAAQ,MAAM,KAAK,CAAC,oCAAoC,CAAC,CAAC;AAC1D,KAAK;AACL;AACA;AACA,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,OAAO,EAAE,MAAM,KAAK;AAClD,QAAQ,IAAI,OAAO,GAAG,CAAC,CAAC;AACxB,QAAQ,IAAI,UAAU,GAAG,KAAK,CAAC;AAC/B,QAAQ,IAAI,OAAO,CAAC;AACpB,QAAQ,IAAI,MAAM,GAAG,MAAM;AAC3B;AACA,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,SAAS,CAAC;AACtB,QAAQ,WAAW;AACnB,YAAY,WAAW,CAAC,IAAI,CAAC,MAAM;AACnC;AACA,gBAAgB,UAAU,GAAG,IAAI,CAAC;AAClC;AACA,gBAAgB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtC,gBAAgB,MAAM,EAAE,CAAC;AACzB,aAAa,CAAC,CAAC;AACf;AACA;AACA,QAAQ,OAAO,CAAC,UAAU,EAAE;AAC5B,YAAY,OAAO,EAAE,CAAC;AACtB,YAAY,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChH,YAAY,IAAI;AAChB,gBAAgB,OAAO,CAAC,MAAM,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACxD,gBAAgB,OAAO;AACvB,aAAa;AACb,YAAY,OAAO,GAAG,EAAE;AACxB,gBAAgB,SAAS,GAAG,GAAG,CAAC;AAChC,gBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACtE,gBAAgB,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE;AAC9C,oBAAoB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,GAAG,CAAC,CAAC;AACrF,oBAAoB,MAAM,CAAC,GAAG,CAAC,CAAC;AAChC,oBAAoB,OAAO;AAC3B,iBAAiB;AACjB,gBAAgB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AAC5D,gBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAClF;AACA;AACA,gBAAgB,IAAI,OAAO,KAAK,KAAK,IAAI,UAAU,EAAE;AACrD,oBAAoB,MAAM,CAAC,GAAG,CAAC,CAAC;AAChC,oBAAoB,OAAO;AAC3B,iBAAiB;AACjB,qBAAqB;AACrB,oBAAoB,MAAM,IAAI,OAAO,CAAC,QAAQ,IAAI;AAClD,wBAAwB,MAAM,GAAG,QAAQ,CAAC;AAC1C,wBAAwB,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9D,qBAAqB,CAAC,CAAC;AACvB,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA,QAAQ,MAAM,CAAC,SAAS,CAAC,CAAC;AAC1B,KAAK,CAAC,CAAC;AACP;;;;"}