UNPKG

@randajan/revert

Version:

A minimalist utility for running sequential steps with automatic rollback on failure.

8 lines (7 loc) 1.86 kB
{ "version": 3, "sources": ["../../../src/sync/utils.js"], "sourcesContent": ["// Converted to sync\r\n\r\n\r\nexport const revertable = (value, steps, fn, onError)=>{\r\n let dir=true, s = 1;\r\n const r = { status:\"pass\", pass:value };\r\n\r\n while (s > 0 && s <= steps) {\r\n try { r.pass = fn(r.pass, dir, s, steps); }\r\n catch (err) {\r\n if (onError) { onError(err, dir, s, steps); }\r\n r.status = dir ? \"undo\" : \"fail\";\r\n r[r.status] = err;\r\n r[r.status + \"Step\"] = s;\r\n if (dir) { dir = false; } else { break; }\r\n }\r\n s += dir*2-1;\r\n }\r\n\r\n if (r.pass === undefined) { delete r.pass; }\r\n\r\n return Object.freeze(r);\r\n}\r\n\r\nexport const attempt = (exec, attemptCount=3, delay=2000)=>{\r\n let a = 1, e;\r\n\r\n while (true) {\r\n try { return exec(a); }\r\n catch(err) { e = err; }\r\n if (a >= attemptCount) { throw e; }\r\n a ++;\r\n }\r\n}"], "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,IAAM,aAAa,CAAC,OAAO,OAAO,IAAI,YAAU;AACnD,MAAI,MAAI,MAAM,IAAI;AAClB,QAAM,IAAI,EAAE,QAAO,QAAQ,MAAK,MAAM;AAEtC,SAAO,IAAI,KAAK,KAAK,OAAO;AACxB,QAAI;AAAE,QAAE,OAAO,GAAG,EAAE,MAAM,KAAK,GAAG,KAAK;AAAA,IAAG,SACnC,KAAK;AACR,UAAI,SAAS;AAAE,gBAAQ,KAAK,KAAK,GAAG,KAAK;AAAA,MAAG;AAC5C,QAAE,SAAS,MAAM,SAAS;AAC1B,QAAE,EAAE,MAAM,IAAI;AACd,QAAE,EAAE,SAAS,MAAM,IAAI;AACvB,UAAI,KAAK;AAAE,cAAM;AAAA,MAAO,OAAO;AAAE;AAAA,MAAO;AAAA,IAC5C;AACA,SAAK,MAAI,IAAE;AAAA,EACf;AAEA,MAAI,EAAE,SAAS,QAAW;AAAE,WAAO,EAAE;AAAA,EAAM;AAE3C,SAAO,OAAO,OAAO,CAAC;AAC1B;AAEO,IAAM,UAAU,CAAC,MAAM,eAAa,GAAG,QAAM,QAAO;AACvD,MAAI,IAAI,GAAG;AAEX,SAAO,MAAM;AACT,QAAI;AAAE,aAAO,KAAK,CAAC;AAAA,IAAG,SAChB,KAAK;AAAE,UAAI;AAAA,IAAK;AACtB,QAAI,KAAK,cAAc;AAAE,YAAM;AAAA,IAAG;AAClC;AAAA,EACJ;AACJ;", "names": [] }