@dolittle/sdk.resilience
Version:
Dolittle is a decentralized, distributed, event-driven microservice platform built to harness the power of events.
41 lines • 3.02 kB
JavaScript
;
// Copyright (c) Dolittle. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
Object.defineProperty(exports, "__esModule", { value: true });
exports.retryWithPolicy = exports.retryPipe = void 0;
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");
const RetryCancelled_1 = require("./RetryCancelled");
/**
* Creates a retry policy from a pipe of operators.
* @param {RetryOperator[]} operators - Operators for the pipe.
* @returns {RetryPolicy} The {@link RetryPolicy} that consist of the combined policies.
*/
function retryPipe(...operators) {
return (errors) => {
let result = errors;
for (const operator of operators) {
result = result.pipe(operator);
}
return result;
};
}
exports.retryPipe = retryPipe;
/**
* Run a {@link Observable<T>} with a {@link RetryPolicy}.
* @template T Type for the observable.
* @param {Observable<T>} source - Observable to retry for.
* @param {RetryPolicy} policy - The policy to apply.
* @param {Cancellation} cancellation - A cancellation.
* @returns {Observable<T>} The {@link Observable<T>} that is automatically retried.
*/
function retryWithPolicy(source, policy, cancellation) {
return source.pipe((0, operators_1.retryWhen)((errors) => {
const cancelled = cancellation.pipe((0, operators_1.endWith)(true));
const retriesUntilCancelled = policy(errors).pipe((0, operators_1.takeUntil)(cancelled));
const retriesThenError = (0, rxjs_1.concat)(retriesUntilCancelled, (0, rxjs_1.throwError)(new RetryCancelled_1.RetryCancelled()));
return retriesThenError;
}));
}
exports.retryWithPolicy = retryWithPolicy;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmV0cnlQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlcyI6WyJSZXRyeVBvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHFHQUFxRzs7O0FBRXJHLCtCQUFzRDtBQUN0RCw4Q0FBK0Q7QUFHL0QscURBQWtEO0FBUWxEOzs7O0dBSUc7QUFDSCxTQUFnQixTQUFTLENBQUMsR0FBRyxTQUEwQjtJQUNuRCxPQUFPLENBQUMsTUFBeUIsRUFBRSxFQUFFO1FBQ2pDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNwQixLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRTtZQUM5QixNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNsQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztBQUNOLENBQUM7QUFSRCw4QkFRQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixlQUFlLENBQUksTUFBcUIsRUFBRSxNQUFtQixFQUFFLFlBQTBCO0lBQ3JHLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFBLHFCQUFTLEVBQUMsQ0FBQyxNQUF5QixFQUFFLEVBQUU7UUFDdkQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFBLG1CQUFPLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBQSxxQkFBUyxFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLGFBQU0sRUFBQyxxQkFBcUIsRUFBRSxJQUFBLGlCQUFVLEVBQUMsSUFBSSwrQkFBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUFQRCwwQ0FPQyJ9