@aws-cdk-testing/cli-integ
Version:
Integration tests for the AWS CDK CLI
34 lines • 3.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
const DEFAULT_INTERVAL = 1000;
const DEFAULT_MAX_ATTEMPTS = 10;
/**
* Runs a function on an interval until the maximum number of attempts has
* been reached.
*
* Default interval = 1000 milliseconds
* Default maxAttempts = 10
*
* @param fn - function to run
* @param options - EventuallyOptions
*/
const eventually = async (call, options) => {
const opts = {
interval: options?.interval ? options.interval : DEFAULT_INTERVAL,
maxAttempts: options?.maxAttempts ? options.maxAttempts : DEFAULT_MAX_ATTEMPTS,
};
while (opts.maxAttempts-- >= 0) {
try {
return await call();
}
catch (err) {
if (opts.maxAttempts <= 0)
throw err;
}
await wait(opts.interval);
}
throw new Error('An unexpected error has occurred.');
};
exports.default = eventually;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnR1YWxseS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV2ZW50dWFsbHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFTQSxNQUFNLElBQUksR0FBRyxDQUFDLEVBQVUsRUFBaUIsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDOUIsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7QUFFaEM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFLLElBQXNCLEVBQUUsT0FBMkIsRUFBYyxFQUFFO0lBQzlGLE1BQU0sSUFBSSxHQUFHO1FBQ1gsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtRQUNqRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsb0JBQW9CO0tBQy9FLENBQUM7SUFFRixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQztnQkFBRSxNQUFNLEdBQUcsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDO0FBRUYsa0JBQWUsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcGFyYW0gbWF4QXR0ZW1wdHMgLSB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0ZW1wdHNcbiAqIEBwYXJhbSBpbnRlcnZhbCAtIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyB0byBvYnNlcnZlIGJldHdlZW4gYXR0ZW1wdHNcbiAqL1xuZXhwb3J0IHR5cGUgRXZlbnR1YWxseU9wdGlvbnMgPSB7XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICBpbnRlcnZhbD86IG51bWJlcjtcbn07XG5cbmNvbnN0IHdhaXQgPSAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbmNvbnN0IERFRkFVTFRfSU5URVJWQUwgPSAxMDAwO1xuY29uc3QgREVGQVVMVF9NQVhfQVRURU1QVFMgPSAxMDtcblxuLyoqXG4gKiBSdW5zIGEgZnVuY3Rpb24gb24gYW4gaW50ZXJ2YWwgdW50aWwgdGhlIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIGhhc1xuICogYmVlbiByZWFjaGVkLlxuICpcbiAqIERlZmF1bHQgaW50ZXJ2YWwgPSAxMDAwIG1pbGxpc2Vjb25kc1xuICogRGVmYXVsdCBtYXhBdHRlbXB0cyA9IDEwXG4gKlxuICogQHBhcmFtIGZuIC0gZnVuY3Rpb24gdG8gcnVuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEV2ZW50dWFsbHlPcHRpb25zXG4gKi9cbmNvbnN0IGV2ZW50dWFsbHkgPSBhc3luYyA8VD4oY2FsbDogKCkgPT4gUHJvbWlzZTxUPiwgb3B0aW9ucz86IEV2ZW50dWFsbHlPcHRpb25zKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgaW50ZXJ2YWw6IG9wdGlvbnM/LmludGVydmFsID8gb3B0aW9ucy5pbnRlcnZhbCA6IERFRkFVTFRfSU5URVJWQUwsXG4gICAgbWF4QXR0ZW1wdHM6IG9wdGlvbnM/Lm1heEF0dGVtcHRzID8gb3B0aW9ucy5tYXhBdHRlbXB0cyA6IERFRkFVTFRfTUFYX0FUVEVNUFRTLFxuICB9O1xuXG4gIHdoaWxlIChvcHRzLm1heEF0dGVtcHRzLS0gPj0gMCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgY2FsbCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKG9wdHMubWF4QXR0ZW1wdHMgPD0gMCkgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBhd2FpdCB3YWl0KG9wdHMuaW50ZXJ2YWwpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdBbiB1bmV4cGVjdGVkIGVycm9yIGhhcyBvY2N1cnJlZC4nKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV2ZW50dWFsbHk7XG4iXX0=