@tinymce/beehive-flow
Version:
A CLI tool implementing the beehive flow git branching process
55 lines • 2.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.poll = exports.filterMap = exports.parMapRecord = exports.parMap = exports.setError = exports.getOrElse = exports.tryPromise = exports.fail = exports.succeed = exports.optionToPromise = exports.eitherToPromise = void 0;
const tslib_1 = require("tslib");
const E = tslib_1.__importStar(require("fp-ts/Either"));
const O = tslib_1.__importStar(require("fp-ts/Option"));
const EitherUtils = tslib_1.__importStar(require("./EitherUtils"));
const ObjUtils = tslib_1.__importStar(require("./ObjUtils"));
const Type = tslib_1.__importStar(require("./Type"));
const eitherToPromise = (e) => new Promise((resolve, reject) => {
E.fold(reject, resolve)(e);
});
exports.eitherToPromise = eitherToPromise;
const optionToPromise = (o, e) => new Promise((resolve, reject) => {
O.fold(() => reject(e), resolve)(o);
});
exports.optionToPromise = optionToPromise;
const succeed = (a) => Promise.resolve(a);
exports.succeed = succeed;
const fail = (error) => Promise.reject(errorify(error));
exports.fail = fail;
const errorify = (error) => Type.isString(error) ? new Error(error) : error;
const tryPromise = (p) => p.then(E.right, E.left);
exports.tryPromise = tryPromise;
const getOrElse = (p, other) => p.then((x) => x, () => other);
exports.getOrElse = getOrElse;
const setError = (p, error) => p.catch(() => (0, exports.fail)(error));
exports.setError = setError;
const parMap = (input, p) => Promise.all(input.map(p));
exports.parMap = parMap;
const parMapRecord = (input, p) => {
const keys = Object.keys(input);
const mapper = (k) => p(input[k], k).then((b) => [k, b]);
return (0, exports.parMap)(keys, mapper).then(ObjUtils.fromPairs);
};
exports.parMapRecord = parMapRecord;
const filterMap = async (input, p) => (0, exports.parMap)(input, (a) => (0, exports.tryPromise)(p(a))).then(EitherUtils.rights);
exports.filterMap = filterMap;
const poll = async (fn, timeout, delay) => new Promise((resolve, reject) => {
const start = Date.now();
const check = () => {
fn().then(resolve, () => {
const now = Date.now();
if (now - start > timeout) {
reject(new Error('Timeout waiting for condition'));
}
else {
setTimeout(check, delay);
}
});
};
check();
});
exports.poll = poll;
//# sourceMappingURL=PromiseUtils.js.map