UNPKG

multitude

Version:

Comprehensive streams for push and pull

63 lines (54 loc) 7.08 kB
"use strict"; 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==