multitude
Version:
Comprehensive streams for push and pull
63 lines (54 loc) • 7.08 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.delay = delay;
var _operate = require("../../utils/operate");
var _typeCore = require("type-core");
function delay(due) {
const options = !due || _typeCore.TypeGuard.isNumber(due) ? {
due
} : due;
const condition = options.condition;
const signals = options.signals || false;
const ms = options.due || 0;
return (0, _operate.operate)(obs => {
const pending = [];
const timeouts = new Set();
function queue(delay, fn) {
if (delay) {
schedule(fn);
} else {
if (timeouts.size) pending.push(fn);else fn();
}
}
function schedule(fn) {
const timeout = setTimeout(() => {
timeouts.delete(timeout);
fn();
if (!timeouts.size) {
while (pending.length) {
const item = pending.shift();
item();
}
}
}, ms);
timeouts.add(timeout);
}
let index = 0;
let final = false;
return [null, condition ? value => queue(condition(value, index++), obs.next.bind(obs, value)) : value => queue(true, obs.next.bind(obs, value)), function error(error) {
final = true;
queue(signals, obs.error.bind(obs, error));
}, function complete() {
final = true;
queue(signals, obs.complete.bind(obs));
}, function teardown() {
if (final) return;
for (const timeout of timeouts) {
clearTimeout(timeout);
}
}];
});
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wdXNoL29wZXJhdG9ycy9zY2hlZHVsZS9kZWxheS50cyJdLCJuYW1lcyI6WyJkZWxheSIsImR1ZSIsIm9wdGlvbnMiLCJUeXBlR3VhcmQiLCJpc051bWJlciIsImNvbmRpdGlvbiIsInNpZ25hbHMiLCJtcyIsIm9icyIsInBlbmRpbmciLCJ0aW1lb3V0cyIsIlNldCIsInF1ZXVlIiwiZm4iLCJzY2hlZHVsZSIsInNpemUiLCJwdXNoIiwidGltZW91dCIsInNldFRpbWVvdXQiLCJkZWxldGUiLCJsZW5ndGgiLCJpdGVtIiwic2hpZnQiLCJhZGQiLCJpbmRleCIsImZpbmFsIiwidmFsdWUiLCJuZXh0IiwiYmluZCIsImVycm9yIiwiY29tcGxldGUiLCJ0ZWFyZG93biIsImNsZWFyVGltZW91dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQUNBOztBQVVPLFNBQVNBLEtBQVQsQ0FBa0JDLEdBQWxCLEVBQXFFO0FBQzFFLFFBQU1DLE9BQU8sR0FBRyxDQUFDRCxHQUFELElBQVFFLG9CQUFVQyxRQUFWLENBQW1CSCxHQUFuQixDQUFSLEdBQWtDO0FBQUVBLElBQUFBO0FBQUYsR0FBbEMsR0FBNENBLEdBQTVEO0FBQ0EsUUFBTUksU0FBUyxHQUFHSCxPQUFPLENBQUNHLFNBQTFCO0FBQ0EsUUFBTUMsT0FBTyxHQUFHSixPQUFPLENBQUNJLE9BQVIsSUFBbUIsS0FBbkM7QUFDQSxRQUFNQyxFQUFFLEdBQUdMLE9BQU8sQ0FBQ0QsR0FBUixJQUFlLENBQTFCO0FBRUEsU0FBTyxzQkFBWU8sR0FBRCxJQUFTO0FBQ3pCLFVBQU1DLE9BQW9CLEdBQUcsRUFBN0I7QUFDQSxVQUFNQyxRQUE2QixHQUFHLElBQUlDLEdBQUosRUFBdEM7O0FBRUEsYUFBU0MsS0FBVCxDQUFlWixLQUFmLEVBQStCYSxFQUEvQixFQUFvRDtBQUNsRCxVQUFJYixLQUFKLEVBQVc7QUFDVGMsUUFBQUEsUUFBUSxDQUFDRCxFQUFELENBQVI7QUFDRCxPQUZELE1BRU87QUFDTCxZQUFJSCxRQUFRLENBQUNLLElBQWIsRUFBbUJOLE9BQU8sQ0FBQ08sSUFBUixDQUFhSCxFQUFiLEVBQW5CLEtBQ0tBLEVBQUU7QUFDUjtBQUNGOztBQUVELGFBQVNDLFFBQVQsQ0FBa0JELEVBQWxCLEVBQXVDO0FBQ3JDLFlBQU1JLE9BQU8sR0FBR0MsVUFBVSxDQUFDLE1BQU07QUFDL0JSLFFBQUFBLFFBQVEsQ0FBQ1MsTUFBVCxDQUFnQkYsT0FBaEI7QUFDQUosUUFBQUEsRUFBRTs7QUFDRixZQUFJLENBQUNILFFBQVEsQ0FBQ0ssSUFBZCxFQUFvQjtBQUNsQixpQkFBT04sT0FBTyxDQUFDVyxNQUFmLEVBQXVCO0FBQ3JCLGtCQUFNQyxJQUFJLEdBQUdaLE9BQU8sQ0FBQ2EsS0FBUixFQUFiO0FBQ0FELFlBQUFBLElBQUk7QUFDTDtBQUNGO0FBQ0YsT0FUeUIsRUFTdkJkLEVBVHVCLENBQTFCO0FBVUFHLE1BQUFBLFFBQVEsQ0FBQ2EsR0FBVCxDQUFhTixPQUFiO0FBQ0Q7O0FBRUQsUUFBSU8sS0FBSyxHQUFHLENBQVo7QUFDQSxRQUFJQyxLQUFLLEdBQUcsS0FBWjtBQUNBLFdBQU8sQ0FDTCxJQURLLEVBRUxwQixTQUFTLEdBQ0pxQixLQUFELElBQVdkLEtBQUssQ0FBQ1AsU0FBUyxDQUFDcUIsS0FBRCxFQUFRRixLQUFLLEVBQWIsQ0FBVixFQUE0QmhCLEdBQUcsQ0FBQ21CLElBQUosQ0FBU0MsSUFBVCxDQUFjcEIsR0FBZCxFQUFtQmtCLEtBQW5CLENBQTVCLENBRFgsR0FFSkEsS0FBRCxJQUFXZCxLQUFLLENBQUMsSUFBRCxFQUFPSixHQUFHLENBQUNtQixJQUFKLENBQVNDLElBQVQsQ0FBY3BCLEdBQWQsRUFBbUJrQixLQUFuQixDQUFQLENBSmYsRUFLTCxTQUFTRyxLQUFULENBQWVBLEtBQWYsRUFBc0I7QUFDcEJKLE1BQUFBLEtBQUssR0FBRyxJQUFSO0FBQ0FiLE1BQUFBLEtBQUssQ0FBQ04sT0FBRCxFQUFVRSxHQUFHLENBQUNxQixLQUFKLENBQVVELElBQVYsQ0FBZXBCLEdBQWYsRUFBb0JxQixLQUFwQixDQUFWLENBQUw7QUFDRCxLQVJJLEVBU0wsU0FBU0MsUUFBVCxHQUFvQjtBQUNsQkwsTUFBQUEsS0FBSyxHQUFHLElBQVI7QUFDQWIsTUFBQUEsS0FBSyxDQUFDTixPQUFELEVBQVVFLEdBQUcsQ0FBQ3NCLFFBQUosQ0FBYUYsSUFBYixDQUFrQnBCLEdBQWxCLENBQVYsQ0FBTDtBQUNELEtBWkksRUFhTCxTQUFTdUIsUUFBVCxHQUFvQjtBQUNsQixVQUFJTixLQUFKLEVBQVc7O0FBRVgsV0FBSyxNQUFNUixPQUFYLElBQXNCUCxRQUF0QixFQUFnQztBQUM5QnNCLFFBQUFBLFlBQVksQ0FBQ2YsT0FBRCxDQUFaO0FBQ0Q7QUFDRixLQW5CSSxDQUFQO0FBcUJELEdBbERNLENBQVA7QUFtREQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQdXNoIH0gZnJvbSAnQGRlZmluaXRpb25zJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi8uLi91dGlscy9vcGVyYXRlJztcbmltcG9ydCB7IE51bGxhcnlGbiwgVHlwZUd1YXJkIH0gZnJvbSAndHlwZS1jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBEZWxheU9wdGlvbnM8VD4ge1xuICAvKiogRGVsYXkgaW4gbWlsbGlzZWNvbnMgKi9cbiAgZHVlPzogbnVtYmVyO1xuICAvKiogV2hldGhlciB0byBhbHNvIGRlbGF5IGVycm9yIGFuZCBjb21wbGV0aW9uIHNpZ25hbHMgKi9cbiAgc2lnbmFscz86IGJvb2xlYW47XG4gIGNvbmRpdGlvbj86ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlbGF5PFQ+KGR1ZT86IG51bWJlciB8IERlbGF5T3B0aW9uczxUPik6IFB1c2guT3BlcmF0aW9uPFQ+IHtcbiAgY29uc3Qgb3B0aW9ucyA9ICFkdWUgfHwgVHlwZUd1YXJkLmlzTnVtYmVyKGR1ZSkgPyB7IGR1ZSB9IDogZHVlO1xuICBjb25zdCBjb25kaXRpb24gPSBvcHRpb25zLmNvbmRpdGlvbjtcbiAgY29uc3Qgc2lnbmFscyA9IG9wdGlvbnMuc2lnbmFscyB8fCBmYWxzZTtcbiAgY29uc3QgbXMgPSBvcHRpb25zLmR1ZSB8fCAwO1xuXG4gIHJldHVybiBvcGVyYXRlPFQ+KChvYnMpID0+IHtcbiAgICBjb25zdCBwZW5kaW5nOiBOdWxsYXJ5Rm5bXSA9IFtdO1xuICAgIGNvbnN0IHRpbWVvdXRzOiBTZXQ8Tm9kZUpTLlRpbWVvdXQ+ID0gbmV3IFNldCgpO1xuXG4gICAgZnVuY3Rpb24gcXVldWUoZGVsYXk6IGJvb2xlYW4sIGZuOiBOdWxsYXJ5Rm4pOiB2b2lkIHtcbiAgICAgIGlmIChkZWxheSkge1xuICAgICAgICBzY2hlZHVsZShmbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGltZW91dHMuc2l6ZSkgcGVuZGluZy5wdXNoKGZuKTtcbiAgICAgICAgZWxzZSBmbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlKGZuOiBOdWxsYXJ5Rm4pOiB2b2lkIHtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGltZW91dHMuZGVsZXRlKHRpbWVvdXQpO1xuICAgICAgICBmbigpO1xuICAgICAgICBpZiAoIXRpbWVvdXRzLnNpemUpIHtcbiAgICAgICAgICB3aGlsZSAocGVuZGluZy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwZW5kaW5nLnNoaWZ0KCkgYXMgTnVsbGFyeUZuO1xuICAgICAgICAgICAgaXRlbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgbXMpO1xuICAgICAgdGltZW91dHMuYWRkKHRpbWVvdXQpO1xuICAgIH1cblxuICAgIGxldCBpbmRleCA9IDA7XG4gICAgbGV0IGZpbmFsID0gZmFsc2U7XG4gICAgcmV0dXJuIFtcbiAgICAgIG51bGwsXG4gICAgICBjb25kaXRpb25cbiAgICAgICAgPyAodmFsdWUpID0+IHF1ZXVlKGNvbmRpdGlvbih2YWx1ZSwgaW5kZXgrKyksIG9icy5uZXh0LmJpbmQob2JzLCB2YWx1ZSkpXG4gICAgICAgIDogKHZhbHVlKSA9PiBxdWV1ZSh0cnVlLCBvYnMubmV4dC5iaW5kKG9icywgdmFsdWUpKSxcbiAgICAgIGZ1bmN0aW9uIGVycm9yKGVycm9yKSB7XG4gICAgICAgIGZpbmFsID0gdHJ1ZTtcbiAgICAgICAgcXVldWUoc2lnbmFscywgb2JzLmVycm9yLmJpbmQob2JzLCBlcnJvcikpO1xuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICBmaW5hbCA9IHRydWU7XG4gICAgICAgIHF1ZXVlKHNpZ25hbHMsIG9icy5jb21wbGV0ZS5iaW5kKG9icykpO1xuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uIHRlYXJkb3duKCkge1xuICAgICAgICBpZiAoZmluYWwpIHJldHVybjtcblxuICAgICAgICBmb3IgKGNvbnN0IHRpbWVvdXQgb2YgdGltZW91dHMpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdO1xuICB9KTtcbn1cbiJdfQ==
;