61 lines
2.7 KiB
JavaScript
61 lines
2.7 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.compileRetryPolicy = compileRetryPolicy;
|
|
exports.decompileRetryPolicy = decompileRetryPolicy;
|
|
const errors_1 = require("./errors");
|
|
const time_1 = require("./time");
|
|
/**
|
|
* Turn a TS RetryPolicy into a proto compatible RetryPolicy
|
|
*/
|
|
function compileRetryPolicy(retryPolicy) {
|
|
if (retryPolicy.backoffCoefficient != null && retryPolicy.backoffCoefficient <= 0) {
|
|
throw new errors_1.ValueError('RetryPolicy.backoffCoefficient must be greater than 0');
|
|
}
|
|
if (retryPolicy.maximumAttempts != null) {
|
|
if (retryPolicy.maximumAttempts === Number.POSITIVE_INFINITY) {
|
|
// drop field (Infinity is the default)
|
|
const { maximumAttempts: _, ...without } = retryPolicy;
|
|
retryPolicy = without;
|
|
}
|
|
else if (retryPolicy.maximumAttempts <= 0) {
|
|
throw new errors_1.ValueError('RetryPolicy.maximumAttempts must be a positive integer');
|
|
}
|
|
else if (!Number.isInteger(retryPolicy.maximumAttempts)) {
|
|
throw new errors_1.ValueError('RetryPolicy.maximumAttempts must be an integer');
|
|
}
|
|
}
|
|
const maximumInterval = (0, time_1.msOptionalToNumber)(retryPolicy.maximumInterval);
|
|
const initialInterval = (0, time_1.msToNumber)(retryPolicy.initialInterval ?? 1000);
|
|
if (maximumInterval === 0) {
|
|
throw new errors_1.ValueError('RetryPolicy.maximumInterval cannot be 0');
|
|
}
|
|
if (initialInterval === 0) {
|
|
throw new errors_1.ValueError('RetryPolicy.initialInterval cannot be 0');
|
|
}
|
|
if (maximumInterval != null && maximumInterval < initialInterval) {
|
|
throw new errors_1.ValueError('RetryPolicy.maximumInterval cannot be less than its initialInterval');
|
|
}
|
|
return {
|
|
maximumAttempts: retryPolicy.maximumAttempts,
|
|
initialInterval: (0, time_1.msToTs)(initialInterval),
|
|
maximumInterval: (0, time_1.msOptionalToTs)(maximumInterval),
|
|
backoffCoefficient: retryPolicy.backoffCoefficient,
|
|
nonRetryableErrorTypes: retryPolicy.nonRetryableErrorTypes,
|
|
};
|
|
}
|
|
/**
|
|
* Turn a proto compatible RetryPolicy into a TS RetryPolicy
|
|
*/
|
|
function decompileRetryPolicy(retryPolicy) {
|
|
if (!retryPolicy) {
|
|
return undefined;
|
|
}
|
|
return {
|
|
backoffCoefficient: retryPolicy.backoffCoefficient ?? undefined,
|
|
maximumAttempts: retryPolicy.maximumAttempts ?? undefined,
|
|
maximumInterval: (0, time_1.optionalTsToMs)(retryPolicy.maximumInterval),
|
|
initialInterval: (0, time_1.optionalTsToMs)(retryPolicy.initialInterval),
|
|
nonRetryableErrorTypes: retryPolicy.nonRetryableErrorTypes ?? undefined,
|
|
};
|
|
}
|
|
//# sourceMappingURL=retry-policy.js.map
|