1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var index_1 = require("../index");
|
4 | var FCIL = /** @class */ (function () {
|
5 | function FCIL(out, op) {
|
6 | this.out = out;
|
7 | this.op = op;
|
8 | }
|
9 | FCIL.prototype._n = function (t) {
|
10 | this.out._n(t);
|
11 | };
|
12 | FCIL.prototype._e = function (err) {
|
13 | this.out._e(err);
|
14 | };
|
15 | FCIL.prototype._c = function () {
|
16 | this.op.less();
|
17 | };
|
18 | return FCIL;
|
19 | }());
|
20 | var FlattenConcOperator = /** @class */ (function () {
|
21 | function FlattenConcOperator(ins) {
|
22 | this.ins = ins;
|
23 | this.type = 'flattenConcurrently';
|
24 | this.active = 1; // number of outers and inners that have not yet ended
|
25 | this.out = null;
|
26 | }
|
27 | FlattenConcOperator.prototype._start = function (out) {
|
28 | this.out = out;
|
29 | this.ins._add(this);
|
30 | };
|
31 | FlattenConcOperator.prototype._stop = function () {
|
32 | this.ins._remove(this);
|
33 | this.active = 1;
|
34 | this.out = null;
|
35 | };
|
36 | FlattenConcOperator.prototype.less = function () {
|
37 | if (--this.active === 0) {
|
38 | var u = this.out;
|
39 | if (!u)
|
40 | return;
|
41 | u._c();
|
42 | }
|
43 | };
|
44 | FlattenConcOperator.prototype._n = function (s) {
|
45 | var u = this.out;
|
46 | if (!u)
|
47 | return;
|
48 | this.active++;
|
49 | s._add(new FCIL(u, this));
|
50 | };
|
51 | FlattenConcOperator.prototype._e = function (err) {
|
52 | var u = this.out;
|
53 | if (!u)
|
54 | return;
|
55 | u._e(err);
|
56 | };
|
57 | FlattenConcOperator.prototype._c = function () {
|
58 | this.less();
|
59 | };
|
60 | return FlattenConcOperator;
|
61 | }());
|
62 | exports.FlattenConcOperator = FlattenConcOperator;
|
63 | /**
|
64 | * Flattens a "stream of streams", handling multiple concurrent nested streams
|
65 | * simultaneously.
|
66 | *
|
67 | * If the input stream is a stream that emits streams, then this operator will
|
68 | * return an output stream which is a flat stream: emits regular events. The
|
69 | * flattening happens concurrently. It works like this: when the input stream
|
70 | * emits a nested stream, *flattenConcurrently* will start imitating that
|
71 | * nested one. When the next nested stream is emitted on the input stream,
|
72 | * *flattenConcurrently* will also imitate that new one, but will continue to
|
73 | * imitate the previous nested streams as well.
|
74 | *
|
75 | * Marble diagram:
|
76 | *
|
77 | * ```text
|
78 | * --+--------+---------------
|
79 | * \ \
|
80 | * \ ----1----2---3--
|
81 | * --a--b----c----d--------
|
82 | * flattenConcurrently
|
83 | * -----a--b----c-1--d-2---3--
|
84 | * ```
|
85 | *
|
86 | * @return {Stream}
|
87 | */
|
88 | function flattenConcurrently(ins) {
|
89 | return new index_1.Stream(new FlattenConcOperator(ins));
|
90 | }
|
91 | exports.default = flattenConcurrently;
|
92 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlbkNvbmN1cnJlbnRseS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHRyYS9mbGF0dGVuQ29uY3VycmVudGx5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0NBQXVGO0FBRXZGO0lBQ0UsY0FBbUIsR0FBYyxFQUNiLEVBQTBCO1FBRDNCLFFBQUcsR0FBSCxHQUFHLENBQVc7UUFDYixPQUFFLEdBQUYsRUFBRSxDQUF3QjtJQUM5QyxDQUFDO0lBRUQsaUJBQUUsR0FBRixVQUFHLENBQUk7UUFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQsaUJBQUUsR0FBRixVQUFHLEdBQVE7UUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsaUJBQUUsR0FBRjtRQUNFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUNILFdBQUM7QUFBRCxDQUFDLEFBaEJELElBZ0JDO0FBRUQ7SUFLRSw2QkFBbUIsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFKbEMsU0FBSSxHQUFHLHFCQUFxQixDQUFDO1FBQzVCLFdBQU0sR0FBVyxDQUFDLENBQUMsQ0FBQyxzREFBc0Q7UUFDM0UsUUFBRyxHQUFjLElBQVcsQ0FBQztJQUdwQyxDQUFDO0lBRUQsb0NBQU0sR0FBTixVQUFPLEdBQWM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsbUNBQUssR0FBTDtRQUNFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBVyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxrQ0FBSSxHQUFKO1FBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDbkIsSUFBSSxDQUFDLENBQUM7Z0JBQUUsT0FBTztZQUNmLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUNSO0lBQ0gsQ0FBQztJQUVELGdDQUFFLEdBQUYsVUFBRyxDQUFZO1FBQ2IsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU87UUFDZixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxnQ0FBRSxHQUFGLFVBQUcsR0FBUTtRQUNULElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbkIsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPO1FBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxnQ0FBRSxHQUFGO1FBQ0UsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUNILDBCQUFDO0FBQUQsQ0FBQyxBQTNDRCxJQTJDQztBQTNDWSxrREFBbUI7QUE2Q2hDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxTQUF3QixtQkFBbUIsQ0FBSSxHQUF3QztJQUNyRixPQUFPLElBQUksY0FBTSxDQUFJLElBQUksbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRkQsc0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGVyYXRvciwgU3RyZWFtLCBNZW1vcnlTdHJlYW0sIE91dFNlbmRlciwgSW50ZXJuYWxMaXN0ZW5lciB9IGZyb20gJy4uL2luZGV4JztcblxuY2xhc3MgRkNJTDxUPiBpbXBsZW1lbnRzIEludGVybmFsTGlzdGVuZXI8VD4sIE91dFNlbmRlcjxUPiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvdXQ6IFN0cmVhbTxUPixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBvcDogRmxhdHRlbkNvbmNPcGVyYXRvcjxUPikge1xuICB9XG5cbiAgX24odDogVCkge1xuICAgIHRoaXMub3V0Ll9uKHQpO1xuICB9XG5cbiAgX2UoZXJyOiBhbnkpIHtcbiAgICB0aGlzLm91dC5fZShlcnIpO1xuICB9XG5cbiAgX2MoKSB7XG4gICAgdGhpcy5vcC5sZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZsYXR0ZW5Db25jT3BlcmF0b3I8VD4gaW1wbGVtZW50cyBPcGVyYXRvcjxTdHJlYW08VD4sIFQ+IHtcbiAgcHVibGljIHR5cGUgPSAnZmxhdHRlbkNvbmN1cnJlbnRseSc7XG4gIHByaXZhdGUgYWN0aXZlOiBudW1iZXIgPSAxOyAvLyBudW1iZXIgb2Ygb3V0ZXJzIGFuZCBpbm5lcnMgdGhhdCBoYXZlIG5vdCB5ZXQgZW5kZWRcbiAgcHVibGljIG91dDogU3RyZWFtPFQ+ID0gbnVsbCBhcyBhbnk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGluczogU3RyZWFtPFN0cmVhbTxUPj4pIHtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxUPik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gIH1cblxuICBfc3RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgIHRoaXMuYWN0aXZlID0gMTtcbiAgICB0aGlzLm91dCA9IG51bGwgYXMgYW55O1xuICB9XG5cbiAgbGVzcygpOiB2b2lkIHtcbiAgICBpZiAoLS10aGlzLmFjdGl2ZSA9PT0gMCkge1xuICAgICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgICAgaWYgKCF1KSByZXR1cm47XG4gICAgICB1Ll9jKCk7XG4gICAgfVxuICB9XG5cbiAgX24oczogU3RyZWFtPFQ+KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICghdSkgcmV0dXJuO1xuICAgIHRoaXMuYWN0aXZlKys7XG4gICAgcy5fYWRkKG5ldyBGQ0lMKHUsIHRoaXMpKTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICghdSkgcmV0dXJuO1xuICAgIHUuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIHRoaXMubGVzcygpO1xuICB9XG59XG5cbi8qKlxuICogRmxhdHRlbnMgYSBcInN0cmVhbSBvZiBzdHJlYW1zXCIsIGhhbmRsaW5nIG11bHRpcGxlIGNvbmN1cnJlbnQgbmVzdGVkIHN0cmVhbXNcbiAqIHNpbXVsdGFuZW91c2x5LlxuICpcbiAqIElmIHRoZSBpbnB1dCBzdHJlYW0gaXMgYSBzdHJlYW0gdGhhdCBlbWl0cyBzdHJlYW1zLCB0aGVuIHRoaXMgb3BlcmF0b3Igd2lsbFxuICogcmV0dXJuIGFuIG91dHB1dCBzdHJlYW0gd2hpY2ggaXMgYSBmbGF0IHN0cmVhbTogZW1pdHMgcmVndWxhciBldmVudHMuIFRoZVxuICogZmxhdHRlbmluZyBoYXBwZW5zIGNvbmN1cnJlbnRseS4gSXQgd29ya3MgbGlrZSB0aGlzOiB3aGVuIHRoZSBpbnB1dCBzdHJlYW1cbiAqIGVtaXRzIGEgbmVzdGVkIHN0cmVhbSwgKmZsYXR0ZW5Db25jdXJyZW50bHkqIHdpbGwgc3RhcnQgaW1pdGF0aW5nIHRoYXRcbiAqIG5lc3RlZCBvbmUuIFdoZW4gdGhlIG5leHQgbmVzdGVkIHN0cmVhbSBpcyBlbWl0dGVkIG9uIHRoZSBpbnB1dCBzdHJlYW0sXG4gKiAqZmxhdHRlbkNvbmN1cnJlbnRseSogd2lsbCBhbHNvIGltaXRhdGUgdGhhdCBuZXcgb25lLCBidXQgd2lsbCBjb250aW51ZSB0b1xuICogaW1pdGF0ZSB0aGUgcHJldmlvdXMgbmVzdGVkIHN0cmVhbXMgYXMgd2VsbC5cbiAqXG4gKiBNYXJibGUgZGlhZ3JhbTpcbiAqXG4gKiBgYGB0ZXh0XG4gKiAtLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS1cbiAqICAgXFwgICAgICAgIFxcXG4gKiAgICBcXCAgICAgICAtLS0tMS0tLS0yLS0tMy0tXG4gKiAgICAtLWEtLWItLS0tYy0tLS1kLS0tLS0tLS1cbiAqICAgICBmbGF0dGVuQ29uY3VycmVudGx5XG4gKiAtLS0tLWEtLWItLS0tYy0xLS1kLTItLS0zLS1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm4ge1N0cmVhbX1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmxhdHRlbkNvbmN1cnJlbnRseTxUPihpbnM6IFN0cmVhbTxTdHJlYW08VD4gfCBNZW1vcnlTdHJlYW08VD4+KTogU3RyZWFtPFQ+IHtcbiAgcmV0dXJuIG5ldyBTdHJlYW08VD4obmV3IEZsYXR0ZW5Db25jT3BlcmF0b3IoaW5zKSk7XG59XG4iXX0= |
\ | No newline at end of file |