UNPKG

@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
"use strict"; // 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