UNPKG

live-set

Version:

Class representing a changing and transformable collection of items.

163 lines (142 loc) 15.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = transduce; var _ = _interopRequireDefault(require(".")); var arrayXf = { '@@transducer/init': function transducerInit() { return []; }, '@@transducer/step': function transducerStep(res, input) { res.push(input); return res; }, '@@transducer/result': function transducerResult(input) { return input; } }; function transduce(liveSet, transducer) { function step(xform, inputValue) { var addsComplete = false; var outputValues; var ret = xform['@@transducer/step']([], inputValue); if (ret && ret['@@transducer/reduced']) { outputValues = ret['@@transducer/value']; addsComplete = true; } else { outputValues = ret; } return { outputValues: outputValues, addsComplete: addsComplete }; } function valuesAndContext() { var inputToOutputValues = new Map(); var xform = transducer(arrayXf); var addsComplete = false; var values = new Set(xform['@@transducer/init']()); var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = liveSet.values()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var value = _step.value; var _step2 = step(xform, value), outputValues = _step2.outputValues, _addsComplete = _step2.addsComplete; inputToOutputValues.set(value, outputValues); for (var i = 0, len = outputValues.length; i < len; i++) { values.add(outputValues[i]); } if (_addsComplete) { addsComplete = true; xform['@@transducer/result']([]).forEach(function (value) { values.add(value); }); break; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return { values: values, inputToOutputValues: inputToOutputValues, xform: xform, addsComplete: addsComplete }; } return new _.default({ scheduler: liveSet.getScheduler(), read: function read() { return valuesAndContext().values; }, listen: function listen(setValues, controller) { var inputToOutputValues, xform, addsComplete; var sub = liveSet.subscribe({ start: function start() { var ret = valuesAndContext(); setValues(ret.values); inputToOutputValues = ret.inputToOutputValues; xform = ret.xform; addsComplete = ret.addsComplete; }, next: function next(changes) { for (var i = 0, len = changes.length; i < len; i++) { var change = changes[i]; if (change.type === 'add') { if (!addsComplete) { var value = change.value; var _step3 = step(xform, value), outputValues = _step3.outputValues, _addsComplete = _step3.addsComplete; inputToOutputValues.set(value, outputValues); for (var _i = 0, _len = outputValues.length; _i < _len; _i++) { controller.add(outputValues[_i]); } if (_addsComplete) { addsComplete = true; xform['@@transducer/result']([]).forEach(function (endValue) { controller.add(endValue); }); } } } else if (change.type === 'remove') { var _value = change.value; var list = inputToOutputValues.get(_value); if (!list) throw new Error('value had not been added'); list.forEach(function (transformedValue) { controller.remove(transformedValue); }); inputToOutputValues.delete(_value); } } }, error: function error(err) { controller.error(err); }, complete: function complete() { controller.end(); } }); return sub; } }); } module.exports = exports.default; module.exports.default = exports.default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy90cmFuc2R1Y2UuanMiXSwibmFtZXMiOlsiYXJyYXlYZiIsInJlcyIsImlucHV0IiwicHVzaCIsInRyYW5zZHVjZSIsImxpdmVTZXQiLCJ0cmFuc2R1Y2VyIiwic3RlcCIsInhmb3JtIiwiaW5wdXRWYWx1ZSIsImFkZHNDb21wbGV0ZSIsIm91dHB1dFZhbHVlcyIsInJldCIsInZhbHVlc0FuZENvbnRleHQiLCJpbnB1dFRvT3V0cHV0VmFsdWVzIiwiTWFwIiwidmFsdWVzIiwiU2V0IiwidmFsdWUiLCJfYWRkc0NvbXBsZXRlIiwic2V0IiwiaSIsImxlbiIsImxlbmd0aCIsImFkZCIsImZvckVhY2giLCJMaXZlU2V0Iiwic2NoZWR1bGVyIiwiZ2V0U2NoZWR1bGVyIiwicmVhZCIsImxpc3RlbiIsInNldFZhbHVlcyIsImNvbnRyb2xsZXIiLCJzdWIiLCJzdWJzY3JpYmUiLCJzdGFydCIsIm5leHQiLCJjaGFuZ2VzIiwiY2hhbmdlIiwidHlwZSIsImVuZFZhbHVlIiwibGlzdCIsImdldCIsIkVycm9yIiwidHJhbnNmb3JtZWRWYWx1ZSIsInJlbW92ZSIsImRlbGV0ZSIsImVycm9yIiwiZXJyIiwiY29tcGxldGUiLCJlbmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVBOztBQUVBLElBQU1BLE9BQU8sR0FBRztBQUNkLHFCQURjLDRCQUNRO0FBQ3BCLFdBQU8sRUFBUDtBQUNELEdBSGE7QUFJZCxxQkFKYywwQkFJTUMsR0FKTixFQUlXQyxLQUpYLEVBSWtCO0FBQzlCRCxJQUFBQSxHQUFHLENBQUNFLElBQUosQ0FBU0QsS0FBVDtBQUNBLFdBQU9ELEdBQVA7QUFDRCxHQVBhO0FBUWQsdUJBUmMsNEJBUVFDLEtBUlIsRUFRZTtBQUMzQixXQUFPQSxLQUFQO0FBQ0Q7QUFWYSxDQUFoQjs7QUFhZSxTQUFTRSxTQUFULENBQW1CQyxPQUFuQixFQUEwQ0MsVUFBMUMsRUFBOEU7QUFDM0YsV0FBU0MsSUFBVCxDQUFjQyxLQUFkLEVBQTZCQyxVQUE3QixFQUdF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QyxVQUFBZSxRQUFRLEVBQUk7QUFDbkRSLG9CQUFBQSxVQUFVLENBQUNSLEdBQVgsQ0FBZWdCLFFBQWY7QUFDRCxtQkFGRDtBQUdEO0FBQ0Y7QUFDRixhQWZELE1BZU8sSUFBSUYsTUFBTSxDQUFDQyxJQUFQLEtBQWdCLFFBQXBCLEVBQThCO0FBQUEsa0JBQzVCckIsTUFENEIsR0FDbkJvQixNQURtQixDQUM1QnBCLEtBRDRCO0FBRW5DLGtCQUFNdUIsSUFBSSxHQUFHM0IsbUJBQW1CLENBQUM0QixHQUFwQixDQUF3QnhCLE1BQXhCLENBQWI7QUFDQSxrQkFBSSxDQUFDdUIsSUFBTCxFQUFXLE1BQU0sSUFBSUUsS0FBSixDQUFVLDBCQUFWLENBQU47QUFDWEYsY0FBQUEsSUFBSSxDQUFDaEIsT0FBTCxDQUFhLFVBQUFtQixnQkFBZ0IsRUFBSTtBQUMvQlosZ0JBQUFBLFVBQVUsQ0FBQ2EsTUFBWCxDQUFrQkQsZ0JBQWxCO0FBQ0QsZUFGRDtBQUdBOUIsY0FBQUEsbUJBQW1CLENBQUNnQyxNQUFwQixDQUEyQjVCLE1BQTNCO0FBQ0Q7QUFDRjtBQUNGLFNBcEMyQjtBQXFDNUI2QixRQUFBQSxLQXJDNEIsaUJBcUN0QkMsR0FyQ3NCLEVBcUNqQjtBQUNUaEIsVUFBQUEsVUFBVSxDQUFDZSxLQUFYLENBQWlCQyxHQUFqQjtBQUNELFNBdkMyQjtBQXdDNUJDLFFBQUFBLFFBeEM0QixzQkF3Q2pCO0FBQ1RqQixVQUFBQSxVQUFVLENBQUNrQixHQUFYO0FBQ0Q7QUExQzJCLE9BQWxCLENBQVo7QUE2Q0EsYUFBT2pCLEdBQVA7QUFDRDtBQW5EZ0IsR0FBWixDQUFQO0FBcUREIiwic291cmNlc0NvbnRlbnQiOlsiLyogQGZsb3cgKi9cblxuaW1wb3J0IExpdmVTZXQgZnJvbSAnLic7XG5cbmNvbnN0IGFycmF5WGYgPSB7XG4gICdAQHRyYW5zZHVjZXIvaW5pdCcoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9LFxuICAnQEB0cmFuc2R1Y2VyL3N0ZXAnKHJlcywgaW5wdXQpIHtcbiAgICByZXMucHVzaChpbnB1dCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfSxcbiAgJ0BAdHJhbnNkdWNlci9yZXN1bHQnKGlucHV0KSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2R1Y2UobGl2ZVNldDogTGl2ZVNldDxhbnk+LCB0cmFuc2R1Y2VyOiBGdW5jdGlvbik6IExpdmVTZXQ8YW55PiB7XG4gIGZ1bmN0aW9uIHN0ZXAoeGZvcm06IE9iamVjdCwgaW5wdXRWYWx1ZTogYW55KToge1xuICAgIG91dHB1dFZhbHVlczogQXJyYXk8YW55PjtcbiAgICBhZGRzQ29tcGxldGU6IGJvb2xlYW47XG4gIH0ge1xuICAgIGxldCBhZGRzQ29tcGxldGUgPSBmYWxzZTtcbiAgICBsZXQgb3V0cHV0VmFsdWVzO1xuICAgIGNvbnN0IHJldCA9IHhmb3JtWydAQHRyYW5zZHVjZXIvc3RlcCddKFtdLCBpbnB1dFZhbHVlKTtcbiAgICBpZiAocmV0ICYmIHJldFsnQEB0cmFuc2R1Y2VyL3JlZHVjZWQnXSkge1xuICAgICAgb3V0cHV0VmFsdWVzID0gcmV0WydAQHRyYW5zZHVjZXIvdmFsdWUnXTtcbiAgICAgIGFkZHNDb21wbGV0ZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dFZhbHVlcyA9IHJldDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG91dHB1dFZhbHVlcyxcbiAgICAgIGFkZHNDb21wbGV0ZVxuICAgIH07XG4gIH1cblxuICB0eXBlIFZhbHVlc0FuZENvbnRleHQgPSB7XG4gICAgdmFsdWVzOiBTZXQ8YW55PjtcbiAgICBpbnB1dFRvT3V0cHV0VmFsdWVzOiBNYXA8YW55LCBBcnJheTxhbnk+PjtcbiAgICB4Zm9ybTogT2JqZWN0O1xuICAgIGFkZHNDb21wbGV0ZTogYm9vbGVhbjtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXNBbmRDb250ZXh0KCk6IFZhbHVlc0FuZENvbnRleHQge1xuICAgIGNvbnN0IGlucHV0VG9PdXRwdXRWYWx1ZXMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgeGZvcm0gPSB0cmFuc2R1Y2VyKGFycmF5WGYpO1xuICAgIGxldCBhZGRzQ29tcGxldGUgPSBmYWxzZTtcbiAgICBjb25zdCB2YWx1ZXMgPSBuZXcgU2V0KHhmb3JtWydAQHRyYW5zZHVjZXIvaW5pdCddKCkpO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIGxpdmVTZXQudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IHtvdXRwdXRWYWx1ZXMsIGFkZHNDb21wbGV0ZTogX2FkZHNDb21wbGV0ZX0gPSBzdGVwKHhmb3JtLCB2YWx1ZSk7XG4gICAgICBpbnB1dFRvT3V0cHV0VmFsdWVzLnNldCh2YWx1ZSwgb3V0cHV0VmFsdWVzKTtcbiAgICAgIGZvciAobGV0IGk9MCxsZW49b3V0cHV0VmFsdWVzLmxlbmd0aDsgaTxsZW47IGkrKykge1xuICAgICAgICB2YWx1ZXMuYWRkKG91dHB1dFZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgICBpZiAoX2FkZHNDb21wbGV0ZSkge1xuICAgICAgICBhZGRzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICB4Zm9ybVsnQEB0cmFuc2R1Y2VyL3Jlc3VsdCddKFtdKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICB2YWx1ZXMuYWRkKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWVzLFxuICAgICAgaW5wdXRUb091dHB1dFZhbHVlcyxcbiAgICAgIHhmb3JtLFxuICAgICAgYWRkc0NvbXBsZXRlXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBuZXcgTGl2ZVNldCh7XG4gICAgc2NoZWR1bGVyOiBsaXZlU2V0LmdldFNjaGVkdWxlcigpLFxuICAgIHJlYWQ6ICgpID0+IHZhbHVlc0FuZENvbnRleHQoKS52YWx1ZXMsXG4gICAgbGlzdGVuKHNldFZhbHVlcywgY29udHJvbGxlcikge1xuICAgICAgbGV0IGlucHV0VG9PdXRwdXRWYWx1ZXMsIHhmb3JtLCBhZGRzQ29tcGxldGU7XG4gICAgICBjb25zdCBzdWIgPSBsaXZlU2V0LnN1YnNjcmliZSh7XG4gICAgICAgIHN0YXJ0KCkge1xuICAgICAgICAgIGNvbnN0IHJldCA9IHZhbHVlc0FuZENvbnRleHQoKTtcbiAgICAgICAgICBzZXRWYWx1ZXMocmV0LnZhbHVlcyk7XG4gICAgICAgICAgaW5wdXRUb091dHB1dFZhbHVlcyA9IHJldC5pbnB1dFRvT3V0cHV0VmFsdWVzO1xuICAgICAgICAgIHhmb3JtID0gcmV0Lnhmb3JtO1xuICAgICAgICAgIGFkZHNDb21wbGV0ZSA9IHJldC5hZGRzQ29tcGxldGU7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHQoY2hhbmdlcykge1xuICAgICAgICAgIGZvciAobGV0IGk9MCxsZW49Y2hhbmdlcy5sZW5ndGg7IGk8bGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZSA9IGNoYW5nZXNbaV07XG4gICAgICAgICAgICBpZiAoY2hhbmdlLnR5cGUgPT09ICdhZGQnKSB7XG4gICAgICAgICAgICAgIGlmICghYWRkc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3ZhbHVlfSA9IGNoYW5nZTtcbiAgICAgICAgICAgICAgICBjb25zdCB7b3V0cHV0VmFsdWVzLCBhZGRzQ29tcGxldGU6IF9hZGRzQ29tcGxldGV9ID0gc3RlcCh4Zm9ybSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlucHV0VG9PdXRwdXRWYWx1ZXMuc2V0KHZhbHVlLCBvdXRwdXRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGk9MCxsZW49b3V0cHV0VmFsdWVzLmxlbmd0aDsgaTxsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5hZGQob3V0cHV0VmFsdWVzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9hZGRzQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICAgIGFkZHNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB4Zm9ybVsnQEB0cmFuc2R1Y2VyL3Jlc3VsdCddKFtdKS5mb3JFYWNoKGVuZFZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5hZGQoZW5kVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZS50eXBlID09PSAncmVtb3ZlJykge1xuICAgICAgICAgICAgICBjb25zdCB7dmFsdWV9ID0gY2hhbmdlO1xuICAgICAgICAgICAgICBjb25zdCBsaXN0ID0gaW5wdXRUb091dHB1dFZhbHVlcy5nZXQodmFsdWUpO1xuICAgICAgICAgICAgICBpZiAoIWxpc3QpIHRocm93IG5ldyBFcnJvcigndmFsdWUgaGFkIG5vdCBiZWVuIGFkZGVkJyk7XG4gICAgICAgICAgICAgIGxpc3QuZm9yRWFjaCh0cmFuc2Zvcm1lZFZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnJlbW92ZSh0cmFuc2Zvcm1lZFZhbHVlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlucHV0VG9PdXRwdXRWYWx1ZXMuZGVsZXRlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yKGVycikge1xuICAgICAgICAgIGNvbnRyb2xsZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgY29udHJvbGxlci5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBzdWI7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==