@temporalio/common
Version:
Common library for code that's used across the Client, Worker, and/or Workflow
61 lines • 2.74 kB
JavaScript
;
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