@randajan/revert
Version:
A minimalist utility for running sequential steps with automatic rollback on failure.
48 lines (46 loc) • 905 B
JavaScript
// src/sync/utils.js
var revertable = (value, steps, fn, onError) => {
let dir = true, s = 1;
const r = { status: "pass", pass: value };
while (s > 0 && s <= steps) {
try {
r.pass = fn(r.pass, dir, s, steps);
} catch (err) {
if (onError) {
onError(err, dir, s, steps);
}
r.status = dir ? "undo" : "fail";
r[r.status] = err;
r[r.status + "Step"] = s;
if (dir) {
dir = false;
} else {
break;
}
}
s += dir * 2 - 1;
}
if (r.pass === void 0) {
delete r.pass;
}
return Object.freeze(r);
};
var attempt = (exec, attemptCount = 3, delay = 2e3) => {
let a = 1, e;
while (true) {
try {
return exec(a);
} catch (err) {
e = err;
}
if (a >= attemptCount) {
throw e;
}
a++;
}
};
export {
revertable,
attempt
};
//# sourceMappingURL=chunk-E2JXMKD7.js.map