UNPKG

multitude

Version:

Comprehensive streams for push and pull

73 lines (55 loc) 10.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.combine = combine; var _Observable = require("../classes/Observable"); var _map = require("../operators/map"); var _intercept = require("../utils/intercept"); var _from = require("./from"); var _merge = require("./merge"); var _pipettes = require("pipettes"); function combine(observables) { if (!observables) return combineList(); if (Array.isArray(observables)) { return (0, _pipettes.into)(combineList(observables), (0, _map.map)(current => Array.from(current))); } const record = observables; const dict = {}; const list = []; for (const [key, obs] of Object.entries(record)) { dict[list.length] = key; list.push(obs); } return (0, _pipettes.into)(combineList(list), (0, _map.map)(current => { return current.reduce((acc, value, i) => { acc[dict[i]] = value; return acc; }, {}); })); } /** @ignore */ function combineList(arr) { if (!arr || arr.length < 1) { throw Error(`Must provide at least one observable to combine`); } const observables = arr.map(_from.from); if (observables.length === 1) { return (0, _pipettes.into)(observables[0], (0, _map.map)(value => [value])); } const sources = observables.map((obs, i) => { return (0, _pipettes.into)((0, _from.from)(obs), (0, _map.map)(value => [i, value])); }); return new _Observable.Observable(obs => { const pending = new Set(Array(observables.length).fill(0).map((_, i) => i)); const current = Array(observables.length).fill(0); return (0, _intercept.intercept)((0, _merge.merge)(...sources), obs, { next([index, value]) { current[index] = value; if (pending.has(index)) pending.delete(index); if (!pending.size) obs.next(current); } }); }); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wdXNoL2NyZWF0b3JzL2NvbWJpbmUudHMiXSwibmFtZXMiOlsiY29tYmluZSIsIm9ic2VydmFibGVzIiwiY29tYmluZUxpc3QiLCJBcnJheSIsImlzQXJyYXkiLCJjdXJyZW50IiwiZnJvbSIsInJlY29yZCIsImRpY3QiLCJsaXN0Iiwia2V5Iiwib2JzIiwiT2JqZWN0IiwiZW50cmllcyIsImxlbmd0aCIsInB1c2giLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsImkiLCJhcnIiLCJFcnJvciIsIm1hcCIsInNvdXJjZXMiLCJPYnNlcnZhYmxlIiwicGVuZGluZyIsIlNldCIsImZpbGwiLCJfIiwibmV4dCIsImluZGV4IiwiaGFzIiwiZGVsZXRlIiwic2l6ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQTJETyxTQUFTQSxPQUFULENBQWlCQyxXQUFqQixFQUFvRDtBQUN6RCxNQUFJLENBQUNBLFdBQUwsRUFBa0IsT0FBT0MsV0FBVyxFQUFsQjs7QUFFbEIsTUFBSUMsS0FBSyxDQUFDQyxPQUFOLENBQWNILFdBQWQsQ0FBSixFQUFnQztBQUM5QixXQUFPLG9CQUNMQyxXQUFXLENBQUNELFdBQUQsQ0FETixFQUVMLGNBQUtJLE9BQUQsSUFBb0JGLEtBQUssQ0FBQ0csSUFBTixDQUFXRCxPQUFYLENBQXhCLENBRkssQ0FBUDtBQUlEOztBQUVELFFBQU1FLE1BQW9DLEdBQUdOLFdBQTdDO0FBQ0EsUUFBTU8sSUFBd0IsR0FBRyxFQUFqQztBQUNBLFFBQU1DLElBQXdCLEdBQUcsRUFBakM7O0FBQ0EsT0FBSyxNQUFNLENBQUNDLEdBQUQsRUFBTUMsR0FBTixDQUFYLElBQXlCQyxNQUFNLENBQUNDLE9BQVAsQ0FBZU4sTUFBZixDQUF6QixFQUFpRDtBQUMvQ0MsSUFBQUEsSUFBSSxDQUFDQyxJQUFJLENBQUNLLE1BQU4sQ0FBSixHQUFvQkosR0FBcEI7QUFDQUQsSUFBQUEsSUFBSSxDQUFDTSxJQUFMLENBQVVKLEdBQVY7QUFDRDs7QUFDRCxTQUFPLG9CQUNMVCxXQUFXLENBQUNPLElBQUQsQ0FETixFQUVMLGNBQUtKLE9BQUQsSUFBb0I7QUFDdEIsV0FBT0EsT0FBTyxDQUFDVyxNQUFSLENBQWUsQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLEVBQWFDLENBQWIsS0FBbUI7QUFDdkNGLE1BQUFBLEdBQUcsQ0FBQ1QsSUFBSSxDQUFDVyxDQUFELENBQUwsQ0FBSCxHQUFlRCxLQUFmO0FBQ0EsYUFBT0QsR0FBUDtBQUNELEtBSE0sRUFHSixFQUhJLENBQVA7QUFJRCxHQUxELENBRkssQ0FBUDtBQVNEO0FBRUQ7OztBQUNBLFNBQVNmLFdBQVQsQ0FBcUJrQixHQUFyQixFQUF1RTtBQUNyRSxNQUFJLENBQUNBLEdBQUQsSUFBUUEsR0FBRyxDQUFDTixNQUFKLEdBQWEsQ0FBekIsRUFBNEI7QUFDMUIsVUFBTU8sS0FBSyxDQUFFLGlEQUFGLENBQVg7QUFDRDs7QUFFRCxRQUFNcEIsV0FBOEIsR0FBR21CLEdBQUcsQ0FBQ0UsR0FBSixDQUFRaEIsVUFBUixDQUF2Qzs7QUFDQSxNQUFJTCxXQUFXLENBQUNhLE1BQVosS0FBdUIsQ0FBM0IsRUFBOEI7QUFDNUIsV0FBTyxvQkFDTGIsV0FBVyxDQUFDLENBQUQsQ0FETixFQUVMLGNBQUtpQixLQUFELElBQVcsQ0FBQ0EsS0FBRCxDQUFmLENBRkssQ0FBUDtBQUlEOztBQUVELFFBQU1LLE9BQU8sR0FBR3RCLFdBQVcsQ0FBQ3FCLEdBQVosQ0FBZ0IsQ0FBQ1gsR0FBRCxFQUFNUSxDQUFOLEtBQTRDO0FBQzFFLFdBQU8sb0JBQ0wsZ0JBQUtSLEdBQUwsQ0FESyxFQUVMLGNBQUtPLEtBQUQsSUFBVyxDQUFDQyxDQUFELEVBQUlELEtBQUosQ0FBZixDQUZLLENBQVA7QUFJRCxHQUxlLENBQWhCO0FBT0EsU0FBTyxJQUFJTSxzQkFBSixDQUFnQmIsR0FBRCxJQUFTO0FBQzdCLFVBQU1jLE9BQU8sR0FBRyxJQUFJQyxHQUFKLENBQ2R2QixLQUFLLENBQUNGLFdBQVcsQ0FBQ2EsTUFBYixDQUFMLENBQ0dhLElBREgsQ0FDUSxDQURSLEVBRUdMLEdBRkgsQ0FFTyxDQUFDTSxDQUFELEVBQUlULENBQUosS0FBVUEsQ0FGakIsQ0FEYyxDQUFoQjtBQUtBLFVBQU1kLE9BQU8sR0FBR0YsS0FBSyxDQUFDRixXQUFXLENBQUNhLE1BQWIsQ0FBTCxDQUEwQmEsSUFBMUIsQ0FBK0IsQ0FBL0IsQ0FBaEI7QUFDQSxXQUFPLDBCQUFVLGtCQUFNLEdBQUdKLE9BQVQsQ0FBVixFQUE2QlosR0FBN0IsRUFBa0M7QUFDdkNrQixNQUFBQSxJQUFJLENBQUMsQ0FBQ0MsS0FBRCxFQUFRWixLQUFSLENBQUQsRUFBaUI7QUFDbkJiLFFBQUFBLE9BQU8sQ0FBQ3lCLEtBQUQsQ0FBUCxHQUFpQlosS0FBakI7QUFFQSxZQUFJTyxPQUFPLENBQUNNLEdBQVIsQ0FBWUQsS0FBWixDQUFKLEVBQXdCTCxPQUFPLENBQUNPLE1BQVIsQ0FBZUYsS0FBZjtBQUN4QixZQUFJLENBQUNMLE9BQU8sQ0FBQ1EsSUFBYixFQUFtQnRCLEdBQUcsQ0FBQ2tCLElBQUosQ0FBU3hCLE9BQVQ7QUFDcEI7O0FBTnNDLEtBQWxDLENBQVA7QUFRRCxHQWZNLENBQVA7QUFnQkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQdXNoIH0gZnJvbSAnQGRlZmluaXRpb25zJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9jbGFzc2VzL09ic2VydmFibGUnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi4vb3BlcmF0b3JzL21hcCc7XG5pbXBvcnQgeyBpbnRlcmNlcHQgfSBmcm9tICcuLi91dGlscy9pbnRlcmNlcHQnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJy4vZnJvbSc7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJy4vbWVyZ2UnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJ3R5cGUtY29yZSc7XG5pbXBvcnQgeyBpbnRvIH0gZnJvbSAncGlwZXR0ZXMnO1xuXG5leHBvcnQgdHlwZSBDb21iaW5lUmVzcG9uc2U8VCBleHRlbmRzIERpY3Rpb25hcnk8UHVzaC5Db252ZXJ0aWJsZT4+ID0ge1xuICBbUCBpbiBrZXlvZiBUXTogVFtQXSBleHRlbmRzIFB1c2guQ29udmVydGlibGU8aW5mZXIgVT4gPyBVIDogbmV2ZXI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZTxUIGV4dGVuZHMgRGljdGlvbmFyeTxQdXNoLkNvbnZlcnRpYmxlPj4oXG4gIG9ic2VydmFibGVzOiBUXG4pOiBQdXNoLk9ic2VydmFibGU8Q29tYmluZVJlc3BvbnNlPFQ+PjtcbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lPEE+KFxuICBvYnNlcnZhYmxlczogW1B1c2guQ29udmVydGlibGU8QT5dXG4pOiBQdXNoLk9ic2VydmFibGU8W0FdPjtcbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lPEEsIEI+KFxuICBvYnNlcnZhYmxlczogW1B1c2guQ29udmVydGlibGU8QT4sIFB1c2guQ29udmVydGlibGU8Qj5dXG4pOiBQdXNoLk9ic2VydmFibGU8W0EsIEJdPjtcbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lPEEsIEIsIEM+KFxuICBvYnNlcnZhYmxlczogW1B1c2guQ29udmVydGlibGU8QT4sIFB1c2guQ29udmVydGlibGU8Qj4sIFB1c2guQ29udmVydGlibGU8Qz5dXG4pOiBQdXNoLk9ic2VydmFibGU8W0EsIEIsIENdPjtcbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lPEEsIEIsIEMsIEQ+KFxuICBvYnNlcnZhYmxlczogW1xuICAgIFB1c2guQ29udmVydGlibGU8QT4sXG4gICAgUHVzaC5Db252ZXJ0aWJsZTxCPixcbiAgICBQdXNoLkNvbnZlcnRpYmxlPEM+LFxuICAgIFB1c2guQ29udmVydGlibGU8RD5cbiAgXVxuKTogUHVzaC5PYnNlcnZhYmxlPFtBLCBCLCBDLCBEXT47XG5leHBvcnQgZnVuY3Rpb24gY29tYmluZTxBLCBCLCBDLCBELCBFPihcbiAgb2JzZXJ2YWJsZXM6IFtcbiAgICBQdXNoLkNvbnZlcnRpYmxlPEE+LFxuICAgIFB1c2guQ29udmVydGlibGU8Qj4sXG4gICAgUHVzaC5Db252ZXJ0aWJsZTxDPixcbiAgICBQdXNoLkNvbnZlcnRpYmxlPEQ+LFxuICAgIFB1c2guQ29udmVydGlibGU8RT5cbiAgXVxuKTogUHVzaC5PYnNlcnZhYmxlPFtBLCBCLCBDLCBELCBFXT47XG5leHBvcnQgZnVuY3Rpb24gY29tYmluZTxBLCBCLCBDLCBELCBFLCBGPihcbiAgb2JzZXJ2YWJsZXM6IFtcbiAgICBQdXNoLkNvbnZlcnRpYmxlPEE+LFxuICAgIFB1c2guQ29udmVydGlibGU8Qj4sXG4gICAgUHVzaC5Db252ZXJ0aWJsZTxDPixcbiAgICBQdXNoLkNvbnZlcnRpYmxlPEQ+LFxuICAgIFB1c2guQ29udmVydGlibGU8RT4sXG4gICAgUHVzaC5Db252ZXJ0aWJsZTxGPlxuICBdXG4pOiBQdXNoLk9ic2VydmFibGU8W0EsIEIsIEMsIEQsIEUsIEZdPjtcbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lPEEsIEIsIEMsIEQsIEUsIEYsIEc+KFxuICBvYnNlcnZhYmxlczogW1xuICAgIFB1c2guQ29udmVydGlibGU8QT4sXG4gICAgUHVzaC5Db252ZXJ0aWJsZTxCPixcbiAgICBQdXNoLkNvbnZlcnRpYmxlPEM+LFxuICAgIFB1c2guQ29udmVydGlibGU8RD4sXG4gICAgUHVzaC5Db252ZXJ0aWJsZTxFPixcbiAgICBQdXNoLkNvbnZlcnRpYmxlPEY+LFxuICAgIFB1c2guQ29udmVydGlibGU8Rz5cbiAgXVxuKTogUHVzaC5PYnNlcnZhYmxlPFtBLCBCLCBDLCBELCBFLCBGLCBHXT47XG5leHBvcnQgZnVuY3Rpb24gY29tYmluZTxUPihcbiAgb2JzZXJ2YWJsZXM6IEFycmF5PFB1c2guQ29udmVydGlibGU8VD4+XG4pOiBQdXNoLk9ic2VydmFibGU8VFtdPjtcbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKG9ic2VydmFibGVzOiBhbnkpOiBQdXNoLk9ic2VydmFibGUge1xuICBpZiAoIW9ic2VydmFibGVzKSByZXR1cm4gY29tYmluZUxpc3QoKTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYnNlcnZhYmxlcykpIHtcbiAgICByZXR1cm4gaW50byhcbiAgICAgIGNvbWJpbmVMaXN0KG9ic2VydmFibGVzKSxcbiAgICAgIG1hcCgoY3VycmVudDogYW55W10pID0+IEFycmF5LmZyb20oY3VycmVudCkpXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZDogRGljdGlvbmFyeTxQdXNoLkNvbnZlcnRpYmxlPiA9IG9ic2VydmFibGVzO1xuICBjb25zdCBkaWN0OiBEaWN0aW9uYXJ5PHN0cmluZz4gPSB7fTtcbiAgY29uc3QgbGlzdDogUHVzaC5Db252ZXJ0aWJsZVtdID0gW107XG4gIGZvciAoY29uc3QgW2tleSwgb2JzXSBvZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7XG4gICAgZGljdFtsaXN0Lmxlbmd0aF0gPSBrZXk7XG4gICAgbGlzdC5wdXNoKG9icyk7XG4gIH1cbiAgcmV0dXJuIGludG8oXG4gICAgY29tYmluZUxpc3QobGlzdCksXG4gICAgbWFwKChjdXJyZW50OiBhbnlbXSkgPT4ge1xuICAgICAgcmV0dXJuIGN1cnJlbnQucmVkdWNlKChhY2MsIHZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGFjY1tkaWN0W2ldXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgIH0pXG4gICk7XG59XG5cbi8qKiBAaWdub3JlICovXG5mdW5jdGlvbiBjb21iaW5lTGlzdChhcnI/OiBQdXNoLkNvbnZlcnRpYmxlW10pOiBQdXNoLk9ic2VydmFibGU8YW55W10+IHtcbiAgaWYgKCFhcnIgfHwgYXJyLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBFcnJvcihgTXVzdCBwcm92aWRlIGF0IGxlYXN0IG9uZSBvYnNlcnZhYmxlIHRvIGNvbWJpbmVgKTtcbiAgfVxuXG4gIGNvbnN0IG9ic2VydmFibGVzOiBQdXNoLk9ic2VydmFibGVbXSA9IGFyci5tYXAoZnJvbSk7XG4gIGlmIChvYnNlcnZhYmxlcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gaW50byhcbiAgICAgIG9ic2VydmFibGVzWzBdLFxuICAgICAgbWFwKCh2YWx1ZSkgPT4gW3ZhbHVlXSlcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc291cmNlcyA9IG9ic2VydmFibGVzLm1hcCgob2JzLCBpKTogUHVzaC5PYnNlcnZhYmxlPFtudW1iZXIsIGFueV0+ID0+IHtcbiAgICByZXR1cm4gaW50byhcbiAgICAgIGZyb20ob2JzKSxcbiAgICAgIG1hcCgodmFsdWUpID0+IFtpLCB2YWx1ZV0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnMpID0+IHtcbiAgICBjb25zdCBwZW5kaW5nID0gbmV3IFNldDxudW1iZXI+KFxuICAgICAgQXJyYXkob2JzZXJ2YWJsZXMubGVuZ3RoKVxuICAgICAgICAuZmlsbCgwKVxuICAgICAgICAubWFwKChfLCBpKSA9PiBpKVxuICAgICk7XG4gICAgY29uc3QgY3VycmVudCA9IEFycmF5KG9ic2VydmFibGVzLmxlbmd0aCkuZmlsbCgwKTtcbiAgICByZXR1cm4gaW50ZXJjZXB0KG1lcmdlKC4uLnNvdXJjZXMpLCBvYnMsIHtcbiAgICAgIG5leHQoW2luZGV4LCB2YWx1ZV0pIHtcbiAgICAgICAgY3VycmVudFtpbmRleF0gPSB2YWx1ZTtcblxuICAgICAgICBpZiAocGVuZGluZy5oYXMoaW5kZXgpKSBwZW5kaW5nLmRlbGV0ZShpbmRleCk7XG4gICAgICAgIGlmICghcGVuZGluZy5zaXplKSBvYnMubmV4dChjdXJyZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=