UNPKG

11.5 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var index_1 = require("../index");
4var FSInner = /** @class */ (function () {
5 function FSInner(out, op) {
6 this.out = out;
7 this.op = op;
8 }
9 FSInner.prototype._n = function (t) {
10 this.out._n(t);
11 };
12 FSInner.prototype._e = function (err) {
13 this.out._e(err);
14 };
15 FSInner.prototype._c = function () {
16 this.op.less();
17 };
18 return FSInner;
19}());
20var FlattenSeqOperator = /** @class */ (function () {
21 function FlattenSeqOperator(ins) {
22 this.type = 'flattenSequentially';
23 this.ins = ins;
24 this.out = null;
25 this.open = true;
26 this.active = null;
27 this.activeIL = null;
28 this.seq = [];
29 }
30 FlattenSeqOperator.prototype._start = function (out) {
31 this.out = out;
32 this.open = true;
33 this.active = null;
34 this.activeIL = new FSInner(out, this);
35 this.seq = [];
36 this.ins._add(this);
37 };
38 FlattenSeqOperator.prototype._stop = function () {
39 this.ins._remove(this);
40 if (this.active && this.activeIL) {
41 this.active._remove(this.activeIL);
42 }
43 this.open = true;
44 this.active = null;
45 this.activeIL = null;
46 this.seq = [];
47 this.out = null;
48 };
49 FlattenSeqOperator.prototype.less = function () {
50 this.active = null;
51 var seq = this.seq;
52 if (seq.length > 0) {
53 this._n(seq.shift());
54 }
55 if (!this.open && !this.active) {
56 this.out._c();
57 }
58 };
59 FlattenSeqOperator.prototype._n = function (s) {
60 var u = this.out;
61 if (!u)
62 return;
63 if (this.active) {
64 this.seq.push(s);
65 }
66 else {
67 this.active = s;
68 s._add(this.activeIL);
69 }
70 };
71 FlattenSeqOperator.prototype._e = function (err) {
72 var u = this.out;
73 if (!u)
74 return;
75 u._e(err);
76 };
77 FlattenSeqOperator.prototype._c = function () {
78 var u = this.out;
79 if (!u)
80 return;
81 this.open = false;
82 if (!this.active && this.seq.length === 0) {
83 u._c();
84 }
85 };
86 return FlattenSeqOperator;
87}());
88exports.FlattenSeqOperator = FlattenSeqOperator;
89/**
90 * Flattens a "stream of streams", handling only one nested stream at a time,
91 * with no concurrency, but does not drop nested streams like `flatten` does.
92 *
93 * If the input stream is a stream that emits streams, then this operator will
94 * return an output stream which is a flat stream: emits regular events. The
95 * flattening happens sequentially and without concurrency. It works like this:
96 * when the input stream emits a nested stream, *flattenSequentially* will start
97 * imitating that nested one. When the next nested stream is emitted on the
98 * input stream, *flattenSequentially* will keep that in a buffer, and only
99 * start imitating it once the previous nested stream completes.
100 *
101 * In essence, `flattenSequentially` concatenates all nested streams.
102 *
103 * Marble diagram:
104 *
105 * ```text
106 * --+--------+-------------------------
107 * \ \
108 * \ ----1----2---3--|
109 * --a--b----c----d--|
110 * flattenSequentially
111 * -----a--b----c----d------1----2---3--
112 * ```
113 *
114 * @return {Stream}
115 */
116function flattenSequentially(ins) {
117 return new index_1.Stream(new FlattenSeqOperator(ins));
118}
119exports.default = flattenSequentially;
120//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlblNlcXVlbnRpYWxseS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHRyYS9mbGF0dGVuU2VxdWVudGlhbGx5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0NBQTRFO0FBRTVFO0lBQ0UsaUJBQW9CLEdBQWMsRUFDZCxFQUF5QjtRQUR6QixRQUFHLEdBQUgsR0FBRyxDQUFXO1FBQ2QsT0FBRSxHQUFGLEVBQUUsQ0FBdUI7SUFDN0MsQ0FBQztJQUVELG9CQUFFLEdBQUYsVUFBRyxDQUFJO1FBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELG9CQUFFLEdBQUYsVUFBRyxHQUFRO1FBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVELG9CQUFFLEdBQUY7UUFDRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFDSCxjQUFDO0FBQUQsQ0FBQyxBQWhCRCxJQWdCQztBQUVEO0lBU0UsNEJBQVksR0FBc0I7UUFSM0IsU0FBSSxHQUFHLHFCQUFxQixDQUFDO1FBU2xDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFXLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELG1DQUFNLEdBQU4sVUFBTyxHQUFjO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFB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IE1lbW9yeVN0cmVhbSwgSW50ZXJuYWxMaXN0ZW5lciB9IGZyb20gJy4uL2luZGV4JztcblxuY2xhc3MgRlNJbm5lcjxUPiBpbXBsZW1lbnRzIEludGVybmFsTGlzdGVuZXI8VD4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG91dDogU3RyZWFtPFQ+LFxuICAgICAgICAgICAgICBwcml2YXRlIG9wOiBGbGF0dGVuU2VxT3BlcmF0b3I8VD4pIHtcbiAgfVxuXG4gIF9uKHQ6IFQpIHtcbiAgICB0aGlzLm91dC5fbih0KTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgdGhpcy5vdXQuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIHRoaXMub3AubGVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGbGF0dGVuU2VxT3BlcmF0b3I8VD4gaW1wbGVtZW50cyBPcGVyYXRvcjxTdHJlYW08VD4sIFQ+IHtcbiAgcHVibGljIHR5cGUgPSAnZmxhdHRlblNlcXVlbnRpYWxseSc7XG4gIHB1YmxpYyBpbnM6IFN0cmVhbTxTdHJlYW08VD4+O1xuICBwcml2YXRlIG9wZW46IGJvb2xlYW47XG4gIHByaXZhdGUgYWN0aXZlOiBTdHJlYW08VD4gfCBudWxsO1xuICBwcml2YXRlIGFjdGl2ZUlMOiBGU0lubmVyPFQ+IHwgbnVsbDtcbiAgcHJpdmF0ZSBzZXE6IEFycmF5PFN0cmVhbTxUPj47XG4gIHB1YmxpYyBvdXQ6IFN0cmVhbTxUPjtcblxuICBjb25zdHJ1Y3RvcihpbnM6IFN0cmVhbTxTdHJlYW08VD4+KSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBudWxsIGFzIGFueTtcbiAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZlID0gbnVsbDtcbiAgICB0aGlzLmFjdGl2ZUlMID0gbnVsbDtcbiAgICB0aGlzLnNlcSA9IFtdO1xuICB9XG5cbiAgX3N0YXJ0KG91dDogU3RyZWFtPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2ZSA9IG51bGw7XG4gICAgdGhpcy5hY3RpdmVJTCA9IG5ldyBGU0lubmVyKG91dCwgdGhpcyk7XG4gICAgdGhpcy5zZXEgPSBbXTtcbiAgICB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICBpZiAodGhpcy5hY3RpdmUgJiYgdGhpcy5hY3RpdmVJTCkge1xuICAgICAgdGhpcy5hY3RpdmUuX3JlbW92ZSh0aGlzLmFjdGl2ZUlMKTtcbiAgICB9XG4gICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2ZSA9IG51bGw7XG4gICAgdGhpcy5hY3RpdmVJTCA9IG51bGw7XG4gICAgdGhpcy5zZXEgPSBbXTtcbiAgICB0aGlzLm91dCA9IG51bGwgYXMgYW55O1xuICB9XG5cbiAgbGVzcygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZSA9IG51bGw7XG4gICAgY29uc3Qgc2VxID0gdGhpcy5zZXE7XG4gICAgaWYgKHNlcS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9uKHNlcS5zaGlmdCgpIGFzIFN0cmVhbTxUPik7XG4gICAgfVxuICAgIGlmICghdGhpcy5vcGVuICYmICF0aGlzLmFjdGl2ZSkge1xuICAgICAgdGhpcy5vdXQuX2MoKTtcbiAgICB9XG4gIH1cblxuICBfbihzOiBTdHJlYW08VD4pIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKCF1KSByZXR1cm47XG4gICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICB0aGlzLnNlcS5wdXNoKHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGl2ZSA9IHM7XG4gICAgICBzLl9hZGQodGhpcy5hY3RpdmVJTCBhcyBGU0lubmVyPFQ+KTtcbiAgICB9XG4gIH1cblxuICBfZShlcnI6IGFueSkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAoIXUpIHJldHVybjtcbiAgICB1Ll9lKGVycik7XG4gIH1cblxuICBfYygpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKCF1KSByZXR1cm47XG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZSAmJiB0aGlzLnNlcS5sZW5ndGggPT09IDApIHtcbiAgICAgIHUuX2MoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGbGF0dGVucyBhIFwic3RyZWFtIG9mIHN0cmVhbXNcIiwgaGFuZGxpbmcgb25seSBvbmUgbmVzdGVkIHN0cmVhbSBhdCBhIHRpbWUsXG4gKiB3aXRoIG5vIGNvbmN1cnJlbmN5LCBidXQgZG9lcyBub3QgZHJvcCBuZXN0ZWQgc3RyZWFtcyBsaWtlIGBmbGF0dGVuYCBkb2VzLlxuICpcbiAqIElmIHRoZSBpbnB1dCBzdHJlYW0gaXMgYSBzdHJlYW0gdGhhdCBlbWl0cyBzdHJlYW1zLCB0aGVuIHRoaXMgb3BlcmF0b3Igd2lsbFxuICogcmV0dXJuIGFuIG91dHB1dCBzdHJlYW0gd2hpY2ggaXMgYSBmbGF0IHN0cmVhbTogZW1pdHMgcmVndWxhciBldmVudHMuIFRoZVxuICogZmxhdHRlbmluZyBoYXBwZW5zIHNlcXVlbnRpYWxseSBhbmQgd2l0aG91dCBjb25jdXJyZW5jeS4gSXQgd29ya3MgbGlrZSB0aGlzOlxuICogd2hlbiB0aGUgaW5wdXQgc3RyZWFtIGVtaXRzIGEgbmVzdGVkIHN0cmVhbSwgKmZsYXR0ZW5TZXF1ZW50aWFsbHkqIHdpbGwgc3RhcnRcbiAqIGltaXRhdGluZyB0aGF0IG5lc3RlZCBvbmUuIFdoZW4gdGhlIG5leHQgbmVzdGVkIHN0cmVhbSBpcyBlbWl0dGVkIG9uIHRoZVxuICogaW5wdXQgc3RyZWFtLCAqZmxhdHRlblNlcXVlbnRpYWxseSogd2lsbCBrZWVwIHRoYXQgaW4gYSBidWZmZXIsIGFuZCBvbmx5XG4gKiBzdGFydCBpbWl0YXRpbmcgaXQgb25jZSB0aGUgcHJldmlvdXMgbmVzdGVkIHN0cmVhbSBjb21wbGV0ZXMuXG4gKlxuICogSW4gZXNzZW5jZSwgYGZsYXR0ZW5TZXF1ZW50aWFsbHlgIGNvbmNhdGVuYXRlcyBhbGwgbmVzdGVkIHN0cmVhbXMuXG4gKlxuICogTWFyYmxlIGRpYWdyYW06XG4gKlxuICogYGBgdGV4dFxuICogLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogICBcXCAgICAgICAgXFxcbiAqICAgIFxcICAgICAgIC0tLS0xLS0tLTItLS0zLS18XG4gKiAgICAtLWEtLWItLS0tYy0tLS1kLS18XG4gKiAgICAgICAgICBmbGF0dGVuU2VxdWVudGlhbGx5XG4gKiAtLS0tLWEtLWItLS0tYy0tLS1kLS0tLS0tMS0tLS0yLS0tMy0tXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJuIHtTdHJlYW19XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZsYXR0ZW5TZXF1ZW50aWFsbHk8VD4oaW5zOiBTdHJlYW08U3RyZWFtPFQ+IHwgTWVtb3J5U3RyZWFtPFQ+Pik6IFN0cmVhbTxUPiB7XG4gIHJldHVybiBuZXcgU3RyZWFtPFQ+KG5ldyBGbGF0dGVuU2VxT3BlcmF0b3IoaW5zKSk7XG59XG4iXX0=
\No newline at end of file