mirror of
https://github.com/CamHenlin/MessagesForMacintosh.git
synced 2025-02-20 03:29:02 +00:00
132 lines
3.6 KiB
JavaScript
132 lines
3.6 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.merge = merge;
|
|
exports.combineLatest = combineLatest;
|
|
exports.zip = zip;
|
|
|
|
var _Observable = require("./Observable.js");
|
|
|
|
// Emits all values from all inputs in parallel
|
|
function merge() {
|
|
for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
sources[_key] = arguments[_key];
|
|
}
|
|
|
|
return new _Observable.Observable(function (observer) {
|
|
if (sources.length === 0) return _Observable.Observable.from([]);
|
|
var count = sources.length;
|
|
var subscriptions = sources.map(function (source) {
|
|
return _Observable.Observable.from(source).subscribe({
|
|
next: function (v) {
|
|
observer.next(v);
|
|
},
|
|
error: function (e) {
|
|
observer.error(e);
|
|
},
|
|
complete: function () {
|
|
if (--count === 0) observer.complete();
|
|
}
|
|
});
|
|
});
|
|
return function () {
|
|
return subscriptions.forEach(function (s) {
|
|
return s.unsubscribe();
|
|
});
|
|
};
|
|
});
|
|
} // Emits arrays containing the most current values from each input
|
|
|
|
|
|
function combineLatest() {
|
|
for (var _len2 = arguments.length, sources = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
sources[_key2] = arguments[_key2];
|
|
}
|
|
|
|
return new _Observable.Observable(function (observer) {
|
|
if (sources.length === 0) return _Observable.Observable.from([]);
|
|
var count = sources.length;
|
|
var seen = new Set();
|
|
var seenAll = false;
|
|
var values = sources.map(function () {
|
|
return undefined;
|
|
});
|
|
var subscriptions = sources.map(function (source, index) {
|
|
return _Observable.Observable.from(source).subscribe({
|
|
next: function (v) {
|
|
values[index] = v;
|
|
|
|
if (!seenAll) {
|
|
seen.add(index);
|
|
if (seen.size !== sources.length) return;
|
|
seen = null;
|
|
seenAll = true;
|
|
}
|
|
|
|
observer.next(Array.from(values));
|
|
},
|
|
error: function (e) {
|
|
observer.error(e);
|
|
},
|
|
complete: function () {
|
|
if (--count === 0) observer.complete();
|
|
}
|
|
});
|
|
});
|
|
return function () {
|
|
return subscriptions.forEach(function (s) {
|
|
return s.unsubscribe();
|
|
});
|
|
};
|
|
});
|
|
} // Emits arrays containing the matching index values from each input
|
|
|
|
|
|
function zip() {
|
|
for (var _len3 = arguments.length, sources = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
sources[_key3] = arguments[_key3];
|
|
}
|
|
|
|
return new _Observable.Observable(function (observer) {
|
|
if (sources.length === 0) return _Observable.Observable.from([]);
|
|
var queues = sources.map(function () {
|
|
return [];
|
|
});
|
|
|
|
function done() {
|
|
return queues.some(function (q, i) {
|
|
return q.length === 0 && subscriptions[i].closed;
|
|
});
|
|
}
|
|
|
|
var subscriptions = sources.map(function (source, index) {
|
|
return _Observable.Observable.from(source).subscribe({
|
|
next: function (v) {
|
|
queues[index].push(v);
|
|
|
|
if (queues.every(function (q) {
|
|
return q.length > 0;
|
|
})) {
|
|
observer.next(queues.map(function (q) {
|
|
return q.shift();
|
|
}));
|
|
if (done()) observer.complete();
|
|
}
|
|
},
|
|
error: function (e) {
|
|
observer.error(e);
|
|
},
|
|
complete: function () {
|
|
if (done()) observer.complete();
|
|
}
|
|
});
|
|
});
|
|
return function () {
|
|
return subscriptions.forEach(function (s) {
|
|
return s.unsubscribe();
|
|
});
|
|
};
|
|
});
|
|
} |