UNPKG

3.41 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.merge = merge;
7exports.combineLatest = combineLatest;
8exports.zip = zip;
9
10var _Observable = require('./Observable.js');
11
12// Emits all values from all inputs in parallel
13function merge() {
14 for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {
15 sources[_key] = arguments[_key];
16 }
17
18 return new _Observable.Observable(function (observer) {
19 if (sources.length === 0) return _Observable.Observable.from([]);
20
21 var count = sources.length;
22
23 var subscriptions = sources.map(function (source) {
24 return _Observable.Observable.from(source).subscribe({
25 next: function (v) {
26 observer.next(v);
27 },
28 error: function (e) {
29 observer.error(e);
30 },
31 complete: function () {
32 if (--count === 0) observer.complete();
33 }
34 });
35 });
36
37 return function () {
38 return subscriptions.forEach(function (s) {
39 return s.unsubscribe();
40 });
41 };
42 });
43}
44
45// Emits arrays containing the most current values from each input
46function combineLatest() {
47 for (var _len2 = arguments.length, sources = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
48 sources[_key2] = arguments[_key2];
49 }
50
51 return new _Observable.Observable(function (observer) {
52 if (sources.length === 0) return _Observable.Observable.from([]);
53
54 var count = sources.length;
55 var values = new Map();
56
57 var subscriptions = sources.map(function (source, index) {
58 return _Observable.Observable.from(source).subscribe({
59 next: function (v) {
60 values.set(index, v);
61 if (values.size === sources.length) observer.next(Array.from(values.values()));
62 },
63 error: function (e) {
64 observer.error(e);
65 },
66 complete: function () {
67 if (--count === 0) observer.complete();
68 }
69 });
70 });
71
72 return function () {
73 return subscriptions.forEach(function (s) {
74 return s.unsubscribe();
75 });
76 };
77 });
78}
79
80// Emits arrays containing the matching index values from each input
81function zip() {
82 for (var _len3 = arguments.length, sources = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
83 sources[_key3] = arguments[_key3];
84 }
85
86 return new _Observable.Observable(function (observer) {
87 if (sources.length === 0) return _Observable.Observable.from([]);
88
89 var queues = sources.map(function () {
90 return [];
91 });
92
93 function done() {
94 return queues.some(function (q, i) {
95 return q.length === 0 && subscriptions[i].closed;
96 });
97 }
98
99 var subscriptions = sources.map(function (source, index) {
100 return _Observable.Observable.from(source).subscribe({
101 next: function (v) {
102 queues[index].push(v);
103 if (queues.every(function (q) {
104 return q.length > 0;
105 })) {
106 observer.next(queues.map(function (q) {
107 return q.shift();
108 }));
109 if (done()) observer.complete();
110 }
111 },
112 error: function (e) {
113 observer.error(e);
114 },
115 complete: function () {
116 if (done()) observer.complete();
117 }
118 });
119 });
120
121 return function () {
122 return subscriptions.forEach(function (s) {
123 return s.unsubscribe();
124 });
125 };
126 });
127}
\No newline at end of file