1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var index_1 = require("../index");
|
4 | var FCAMIL = /** @class */ (function () {
|
5 | function FCAMIL(out, op) {
|
6 | this.out = out;
|
7 | this.op = op;
|
8 | }
|
9 | FCAMIL.prototype._n = function (t) {
|
10 | this.out._n(t);
|
11 | };
|
12 | FCAMIL.prototype._e = function (err) {
|
13 | this.out._e(err);
|
14 | };
|
15 | FCAMIL.prototype._c = function () {
|
16 | this.op.less();
|
17 | };
|
18 | return FCAMIL;
|
19 | }());
|
20 | var FlattenConcAMOperator = /** @class */ (function () {
|
21 | function FlattenConcAMOperator(n, ins) {
|
22 | this.n = n;
|
23 | this.ins = ins;
|
24 | this.type = 'flattenConcurrentlyAtMost';
|
25 | this.out = null;
|
26 | this._l = 0;
|
27 | this._d = false;
|
28 | this._seq = [];
|
29 | }
|
30 | FlattenConcAMOperator.prototype._start = function (out) {
|
31 | this.out = out;
|
32 | this.ins._add(this);
|
33 | };
|
34 | FlattenConcAMOperator.prototype._stop = function () {
|
35 | this.ins._remove(this);
|
36 | this._l = 0;
|
37 | this.out = null;
|
38 | this._seq = [];
|
39 | };
|
40 | FlattenConcAMOperator.prototype.less = function () {
|
41 | var seq = this._seq;
|
42 | if (--this._l === 0 && seq.length === 0 && this._d) {
|
43 | var u = this.out;
|
44 | if (!u)
|
45 | return;
|
46 | u._c();
|
47 | }
|
48 | if (this._l < this.n && seq.length > 0) {
|
49 | this._n(seq.shift());
|
50 | }
|
51 | };
|
52 | FlattenConcAMOperator.prototype._n = function (s) {
|
53 | var u = this.out;
|
54 | if (!u)
|
55 | return;
|
56 | if (this._l < this.n) {
|
57 | this._l++;
|
58 | s._add(new FCAMIL(u, this));
|
59 | }
|
60 | else {
|
61 | this._seq.push(s);
|
62 | }
|
63 | };
|
64 | FlattenConcAMOperator.prototype._e = function (err) {
|
65 | var u = this.out;
|
66 | if (!u)
|
67 | return;
|
68 | u._e(err);
|
69 | };
|
70 | FlattenConcAMOperator.prototype._c = function () {
|
71 | var seq = this._seq;
|
72 | this._d = true;
|
73 | if (this._l === 0 && seq.length === 0) {
|
74 | var u = this.out;
|
75 | if (!u)
|
76 | return;
|
77 | u._c();
|
78 | }
|
79 | };
|
80 | return FlattenConcAMOperator;
|
81 | }());
|
82 | exports.FlattenConcAMOperator = FlattenConcAMOperator;
|
83 | /**
|
84 | * Flattens a "stream of streams", handling multiple concurrent nested streams
|
85 | * simultaneously, up to some limit `n`.
|
86 | *
|
87 | * If the input stream is a stream that emits streams, then this operator will
|
88 | * return an output stream which is a flat stream: emits regular events. The
|
89 | * flattening happens concurrently, up to the configured limit. It works like
|
90 | * this: when the input stream emits a nested stream,
|
91 | * *flattenConcurrentlyAtMost* will start imitating that nested one. When the
|
92 | * next nested stream is emitted on the input stream,
|
93 | * *flattenConcurrentlyAtMost* will check to see how many streams it is connected
|
94 | * to. If it is connected to a number of streams less than the limit, it will also
|
95 | * imitate that new one, but will continue to imitate the previous nested streams
|
96 | * as well.
|
97 | *
|
98 | * If the limit has already been reached, *flattenConcurrentlyAtMost* will put the
|
99 | * stream in a queue. When any of the streams it is listening to completes, a stream
|
100 | * is taken out of the queue and `flattenConcurrentlyAtMost` will connect to it.
|
101 | *
|
102 | * This process continues until the metastream completes and there are no more
|
103 | * connected streams or streams in the queue.
|
104 | *
|
105 | * Marble diagrams:
|
106 | *
|
107 | * ```text
|
108 | * --+--------+---------------
|
109 | * \ \
|
110 | * \ ----1----2---3--|
|
111 | * --a--b----c----|
|
112 | * flattenConcurrentlyAtMost(1)
|
113 | * -----a--b----c-1----2---3--|
|
114 | * ```
|
115 | *
|
116 | * ```text
|
117 | * --+---+---+-|
|
118 | * \ \ \
|
119 | * \ \ ---fgh----i-----jh--|
|
120 | * \ -----1----2----3--|
|
121 | * ---a--b-----c--|
|
122 | * flattenConcurrentlyAtMost(2)
|
123 | * ---------a--b-1---c2--i-3------fgh----i-----jh--|
|
124 | * ```
|
125 | *
|
126 | * @return {Stream}
|
127 | */
|
128 | function flattenConcurrentlyAtMost(n) {
|
129 | return function flattenConcAMOperator(ins) {
|
130 | return new index_1.Stream(new FlattenConcAMOperator(n, ins));
|
131 | };
|
132 | }
|
133 | exports.default = flattenConcurrentlyAtMost;
|
134 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlbkNvbmN1cnJlbnRseUF0TW9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHRyYS9mbGF0dGVuQ29uY3VycmVudGx5QXRNb3N0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0NBQXVGO0FBRXZGO0lBQ0UsZ0JBQW1CLEdBQWMsRUFDYixFQUE0QjtRQUQ3QixRQUFHLEdBQUgsR0FBRyxDQUFXO1FBQ2IsT0FBRSxHQUFGLEVBQUUsQ0FBMEI7SUFDaEQsQ0FBQztJQUVELG1CQUFFLEdBQUYsVUFBRyxDQUFJO1FBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELG1CQUFFLEdBQUYsVUFBRyxHQUFRO1FBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVELG1CQUFFLEdBQUY7UUFDRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFDSCxhQUFDO0FBQUQsQ0FBQyxBQWhCRCxJQWdCQztBQUVEO0lBT0UsK0JBQW1CLENBQVMsRUFBUyxHQUFzQjtRQUF4QyxNQUFDLEdBQUQsQ0FBQyxDQUFRO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFOcEQsU0FBSSxHQUFHLDJCQUEyQixDQUFDO1FBQ25DLFFBQUcsR0FBYyxJQUFXLENBQUM7UUFDNUIsT0FBRSxHQUFXLENBQUMsQ0FBQztRQUNmLE9BQUUsR0FBWSxLQUFLLENBQUM7UUFDcEIsU0FBSSxHQUFxQixFQUFFLENBQUM7SUFHcEMsQ0FBQztJQUVELHNDQUFNLEdBQU4sVUFBTyxHQUFjO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELHFDQUFLLEdBQUw7UUFDRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBVyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxvQ0FBSSxHQUFKO1FBQ0UsSUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNsRCxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ25CLElBQUksQ0FBQyxDQUFDO2dCQUFFLE9BQU87WUFDZixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDUjtRQUNELElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBZSxDQUFDLENBQUM7U0FDbkM7SUFDSCxDQUFDO0lBRUQsa0NBQUUsR0FBRixVQUFHLENBQVk7UUFDYixJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ25CLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTztRQUNmLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNWLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDN0I7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVELGtDQUFFLEdBQUYsVUFBRyxHQUFRO1FBQ1QsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU87UUFDZixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELGtDQUFFLEdBQUY7UUFDRSxJQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2YsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQyxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ25CLElBQUksQ0FBQyxDQUFDO2dCQUFFLE9BQU87WUFDZixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDUjtJQUNILENBQUM7SUFDSCw0QkFBQztBQUFELENBQUMsQUE1REQsSUE0REM7QUE1RFksc0RBQXFCO0FBOERsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Q0c7QUFDSCxTQUF3Qix5QkFBeUIsQ0FBSSxDQUFTO0lBQzVELE9BQU8sU0FBUyxxQkFBcUIsQ0FBQyxHQUF3QztRQUM1RSxPQUFPLElBQUksY0FBTSxDQUFJLElBQUkscUJBQXFCLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUpELDRDQUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3BlcmF0b3IsIFN0cmVhbSwgTWVtb3J5U3RyZWFtLCBPdXRTZW5kZXIsIEludGVybmFsTGlzdGVuZXIgfSBmcm9tICcuLi9pbmRleCc7XG5cbmNsYXNzIEZDQU1JTDxUPiBpbXBsZW1lbnRzIEludGVybmFsTGlzdGVuZXI8VD4sIE91dFNlbmRlcjxUPiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvdXQ6IFN0cmVhbTxUPixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBvcDogRmxhdHRlbkNvbmNBTU9wZXJhdG9yPFQ+KSB7XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgdGhpcy5vdXQuX24odCk7XG4gIH1cblxuICBfZShlcnI6IGFueSkge1xuICAgIHRoaXMub3V0Ll9lKGVycik7XG4gIH1cblxuICBfYygpIHtcbiAgICB0aGlzLm9wLmxlc3MoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmxhdHRlbkNvbmNBTU9wZXJhdG9yPFQ+IGltcGxlbWVudHMgT3BlcmF0b3I8U3RyZWFtPFQ+LCBUPiB7XG4gIHB1YmxpYyB0eXBlID0gJ2ZsYXR0ZW5Db25jdXJyZW50bHlBdE1vc3QnO1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD4gPSBudWxsIGFzIGFueTtcbiAgcHJpdmF0ZSBfbDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9zZXE6IEFycmF5PFN0cmVhbTxUPj4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbjogbnVtYmVyLCBwdWJsaWMgaW5zOiBTdHJlYW08U3RyZWFtPFQ+Pikge1xuICB9XG5cbiAgX3N0YXJ0KG91dDogU3RyZWFtPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgdGhpcy5fbCA9IDA7XG4gICAgdGhpcy5vdXQgPSBudWxsIGFzIGFueTtcbiAgICB0aGlzLl9zZXEgPSBbXTtcbiAgfVxuXG4gIGxlc3MoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VxID0gdGhpcy5fc2VxO1xuICAgIGlmICgtLXRoaXMuX2wgPT09IDAgJiYgc2VxLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl9kKSB7XG4gICAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgICBpZiAoIXUpIHJldHVybjtcbiAgICAgIHUuX2MoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2wgPCB0aGlzLm4gJiYgc2VxLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX24oc2VxLnNoaWZ0KCkgYXMgU3RyZWFtPFQ+KTtcbiAgICB9XG4gIH1cblxuICBfbihzOiBTdHJlYW08VD4pIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKCF1KSByZXR1cm47XG4gICAgaWYgKHRoaXMuX2wgPCB0aGlzLm4pIHtcbiAgICAgIHRoaXMuX2wrKztcbiAgICAgIHMuX2FkZChuZXcgRkNBTUlMKHUsIHRoaXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VxLnB1c2gocyk7XG4gICAgfVxuICB9XG5cbiAgX2UoZXJyOiBhbnkpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKCF1KSByZXR1cm47XG4gICAgdS5fZShlcnIpO1xuICB9XG5cbiAgX2MoKSB7XG4gICAgY29uc3Qgc2VxID0gdGhpcy5fc2VxO1xuICAgIHRoaXMuX2QgPSB0cnVlO1xuICAgIGlmICh0aGlzLl9sID09PSAwICYmIHNlcS5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICAgIGlmICghdSkgcmV0dXJuO1xuICAgICAgdS5fYygpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZsYXR0ZW5zIGEgXCJzdHJlYW0gb2Ygc3RyZWFtc1wiLCBoYW5kbGluZyBtdWx0aXBsZSBjb25jdXJyZW50IG5lc3RlZCBzdHJlYW1zXG4gKiBzaW11bHRhbmVvdXNseSwgdXAgdG8gc29tZSBsaW1pdCBgbmAuXG4gKlxuICogSWYgdGhlIGlucHV0IHN0cmVhbSBpcyBhIHN0cmVhbSB0aGF0IGVtaXRzIHN0cmVhbXMsIHRoZW4gdGhpcyBvcGVyYXRvciB3aWxsXG4gKiByZXR1cm4gYW4gb3V0cHV0IHN0cmVhbSB3aGljaCBpcyBhIGZsYXQgc3RyZWFtOiBlbWl0cyByZWd1bGFyIGV2ZW50cy4gVGhlXG4gKiBmbGF0dGVuaW5nIGhhcHBlbnMgY29uY3VycmVudGx5LCB1cCB0byB0aGUgY29uZmlndXJlZCBsaW1pdC4gSXQgd29ya3MgbGlrZVxuICogdGhpczogd2hlbiB0aGUgaW5wdXQgc3RyZWFtIGVtaXRzIGEgbmVzdGVkIHN0cmVhbSxcbiAqICpmbGF0dGVuQ29uY3VycmVudGx5QXRNb3N0KiB3aWxsIHN0YXJ0IGltaXRhdGluZyB0aGF0IG5lc3RlZCBvbmUuIFdoZW4gdGhlXG4gKiBuZXh0IG5lc3RlZCBzdHJlYW0gaXMgZW1pdHRlZCBvbiB0aGUgaW5wdXQgc3RyZWFtLFxuICogKmZsYXR0ZW5Db25jdXJyZW50bHlBdE1vc3QqIHdpbGwgY2hlY2sgdG8gc2VlIGhvdyBtYW55IHN0cmVhbXMgaXQgaXMgY29ubmVjdGVkXG4gKiB0by4gSWYgaXQgaXMgY29ubmVjdGVkIHRvIGEgbnVtYmVyIG9mIHN0cmVhbXMgbGVzcyB0aGFuIHRoZSBsaW1pdCwgaXQgd2lsbCBhbHNvXG4gKiBpbWl0YXRlIHRoYXQgbmV3IG9uZSwgYnV0IHdpbGwgY29udGludWUgdG8gaW1pdGF0ZSB0aGUgcHJldmlvdXMgbmVzdGVkIHN0cmVhbXNcbiAqIGFzIHdlbGwuXG4gKlxuICogSWYgdGhlIGxpbWl0IGhhcyBhbHJlYWR5IGJlZW4gcmVhY2hlZCwgKmZsYXR0ZW5Db25jdXJyZW50bHlBdE1vc3QqIHdpbGwgcHV0IHRoZVxuICogc3RyZWFtIGluIGEgcXVldWUuIFdoZW4gYW55IG9mIHRoZSBzdHJlYW1zIGl0IGlzIGxpc3RlbmluZyB0byBjb21wbGV0ZXMsIGEgc3RyZWFtXG4gKiBpcyB0YWtlbiBvdXQgb2YgdGhlIHF1ZXVlIGFuZCBgZmxhdHRlbkNvbmN1cnJlbnRseUF0TW9zdGAgd2lsbCBjb25uZWN0IHRvIGl0LlxuICpcbiAqIFRoaXMgcHJvY2VzcyBjb250aW51ZXMgdW50aWwgdGhlIG1ldGFzdHJlYW0gY29tcGxldGVzIGFuZCB0aGVyZSBhcmUgbm8gbW9yZVxuICogY29ubmVjdGVkIHN0cmVhbXMgb3Igc3RyZWFtcyBpbiB0aGUgcXVldWUuXG4gKlxuICogTWFyYmxlIGRpYWdyYW1zOlxuICpcbiAqIGBgYHRleHRcbiAqIC0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLVxuICogICBcXCAgICAgICAgXFxcbiAqICAgIFxcICAgICAgIC0tLS0xLS0tLTItLS0zLS18XG4gKiAgICAtLWEtLWItLS0tYy0tLS18XG4gKiAgICAgZmxhdHRlbkNvbmN1cnJlbnRseUF0TW9zdCgxKVxuICogLS0tLS1hLS1iLS0tLWMtMS0tLS0yLS0tMy0tfFxuICogYGBgXG4gKlxuICogYGBgdGV4dFxuICogLS0rLS0tKy0tLSstfFxuICogICAgXFwgICBcXCAgIFxcXG4gKiAgICAgXFwgICBcXCAgIC0tLWZnaC0tLS1pLS0tLS1qaC0tfFxuICogICAgICBcXCAgIC0tLS0tMS0tLS0yLS0tLTMtLXxcbiAqICAgICAgIC0tLWEtLWItLS0tLWMtLXxcbiAqICAgICBmbGF0dGVuQ29uY3VycmVudGx5QXRNb3N0KDIpXG4gKiAtLS0tLS0tLS1hLS1iLTEtLS1jMi0taS0zLS0tLS0tZmdoLS0tLWktLS0tLWpoLS18XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJuIHtTdHJlYW19XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZsYXR0ZW5Db25jdXJyZW50bHlBdE1vc3Q8VD4objogbnVtYmVyKTogKGluczogU3RyZWFtPFN0cmVhbTxUPiB8IE1lbW9yeVN0cmVhbTxUPj4pID0+IFN0cmVhbTxUPiB7XG4gIHJldHVybiBmdW5jdGlvbiBmbGF0dGVuQ29uY0FNT3BlcmF0b3IoaW5zOiBTdHJlYW08U3RyZWFtPFQ+IHwgTWVtb3J5U3RyZWFtPFQ+Pikge1xuICAgIHJldHVybiBuZXcgU3RyZWFtPFQ+KG5ldyBGbGF0dGVuQ29uY0FNT3BlcmF0b3IobiwgaW5zKSk7XG4gIH07XG59XG4iXX0= |
\ | No newline at end of file |