@controlplane/cli
Version:
Control Plane Corporation CLI
68 lines • 2.07 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.timeoutAsync = exports.retryFn = exports.pipe = exports.promiseOf = void 0;
const errors_1 = require("./errors");
const time_1 = require("./time");
function promiseOf(f) {
return new Promise((resolve, reject) => {
f((err, result) => {
if (err) {
reject(err);
}
else {
resolve(result);
}
});
});
}
exports.promiseOf = promiseOf;
const _pipe = (f, g) => (...args) => g(f(...args));
//https://vanslaars.io/blog/create-pipe-function/
function pipe(...fns) {
return fns.reduce(_pipe);
}
exports.pipe = pipe;
async function retryFn(fn, options) {
const defaultIntervalSec = 5;
const defaultRepeatTimes = 5;
const defaultOptions = { intervalSec: defaultIntervalSec, repeatTimes: defaultRepeatTimes };
if (!options)
options = defaultOptions;
for (const [defaultKey, defaultValue] of Object.entries(defaultOptions)) {
if (!options[defaultKey])
options[defaultKey] = defaultValue;
}
const { intervalSec: _intervalSec, repeatTimes: _repeatTimes, onSuccess, onFailure } = options;
const intervalSec = _intervalSec;
const repeatTimes = _repeatTimes;
let counter = 0;
while (counter < repeatTimes) {
try {
counter += 1;
const res = await fn(counter);
if (onSuccess) {
await onSuccess();
}
return res;
}
catch (e) {
await (0, time_1.sleep)(intervalSec * 1000);
}
}
if (onFailure) {
await onFailure();
}
return false;
}
exports.retryFn = retryFn;
function timeoutAsync(ms) {
let timeoutId;
const timeoutPromise = new Promise((_, reject) => {
timeoutId = setTimeout(() => {
reject(new errors_1.TimeoutError());
}, ms);
});
return { timeoutPromise, timeoutId };
}
exports.timeoutAsync = timeoutAsync;
//# sourceMappingURL=functions.js.map
;