UNPKG

10.3 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var index_1 = require("../index");
4var SeparatorIL = /** @class */ (function () {
5 function SeparatorIL(out, op) {
6 this.out = out;
7 this.op = op;
8 }
9 SeparatorIL.prototype._n = function (_t) {
10 this.op.up();
11 };
12 SeparatorIL.prototype._e = function (err) {
13 this.out._e(err);
14 };
15 SeparatorIL.prototype._c = function () {
16 this.op.curr._c();
17 this.out._c();
18 };
19 return SeparatorIL;
20}());
21var SplitOperator = /** @class */ (function () {
22 function SplitOperator(s, // s = separator
23 ins) {
24 this.s = s;
25 this.ins = ins;
26 this.type = 'split';
27 this.curr = new index_1.Stream();
28 this.out = null;
29 this.sil = index_1.NO_IL; // sil = separator InternalListener
30 }
31 SplitOperator.prototype._start = function (out) {
32 this.out = out;
33 this.s._add(this.sil = new SeparatorIL(out, this));
34 this.ins._add(this);
35 out._n(this.curr);
36 };
37 SplitOperator.prototype._stop = function () {
38 this.ins._remove(this);
39 this.s._remove(this.sil);
40 this.curr = new index_1.Stream();
41 this.out = null;
42 this.sil = index_1.NO_IL;
43 };
44 SplitOperator.prototype.up = function () {
45 this.curr._c();
46 this.out._n(this.curr = new index_1.Stream());
47 };
48 SplitOperator.prototype._n = function (t) {
49 if (!this.out)
50 return;
51 this.curr._n(t);
52 };
53 SplitOperator.prototype._e = function (err) {
54 var u = this.out;
55 if (!u)
56 return;
57 u._e(err);
58 };
59 SplitOperator.prototype._c = function () {
60 var u = this.out;
61 if (!u)
62 return;
63 this.curr._c();
64 u._c();
65 };
66 return SplitOperator;
67}());
68exports.SplitOperator = SplitOperator;
69/**
70 * Splits a stream using a separator stream. Returns a stream that emits
71 * streams.
72 *
73 * Marble diagram:
74 *
75 * ```text
76 * --1--2--3--4--5--6--7--8--9|
77 * split( --a----b--- )
78 * ---------------------------|
79 * : : :
80 * 1--2--3-|: :
81 * 4--5|:
82 * -6--7--8--9|
83 * ```
84 *
85 * Example:
86 *
87 * ```js
88 * import split from 'xstream/extra/split'
89 * import concat from 'xstream/extra/concat'
90 *
91 * const source = xs.periodic(50).take(10)
92 * const separator = concat(xs.periodic(167).take(2), xs.never())
93 * const result = source.compose(split(separator))
94 *
95 * result.addListener({
96 * next: stream => {
97 * stream.addListener({
98 * next: i => console.log(i),
99 * error: err => console.error(err),
100 * complete: () => console.log('inner completed')
101 * })
102 * },
103 * error: err => console.error(err),
104 * complete: () => console.log('outer completed')
105 * })
106 * ```
107 *
108 * ```text
109 * > 0
110 * > 1
111 * > 2
112 * > inner completed
113 * > 3
114 * > 4
115 * > 5
116 * > inner completed
117 * > 6
118 * > 7
119 * > 8
120 * > 9
121 * > inner completed
122 * > outer completed
123 * ```
124 *
125 * @param {Stream} separator Some other stream that is used to know when to
126 * split the output stream.
127 * @return {Stream}
128 */
129function split(separator) {
130 return function splitOperator(ins) {
131 return new index_1.Stream(new SplitOperator(separator, ins));
132 };
133}
134exports.default = split;
135//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXh0cmEvc3BsaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBOEU7QUFFOUU7SUFDRSxxQkFBbUIsR0FBc0IsRUFDckIsRUFBb0I7UUFEckIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDckIsT0FBRSxHQUFGLEVBQUUsQ0FBa0I7SUFDeEMsQ0FBQztJQUVELHdCQUFFLEdBQUYsVUFBRyxFQUFPO1FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCx3QkFBRSxHQUFGLFVBQUcsR0FBUTtRQUNULElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCx3QkFBRSxHQUFGO1FBQ0UsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQUFDLEFBakJELElBaUJDO0FBRUQ7SUFNRSx1QkFBbUIsQ0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxHQUFjO1FBRGQsTUFBQyxHQUFELENBQUMsQ0FBYTtRQUNkLFFBQUcsR0FBSCxHQUFHLENBQVc7UUFOMUIsU0FBSSxHQUFHLE9BQU8sQ0FBQztRQUNmLFNBQUksR0FBYyxJQUFJLGNBQU0sRUFBSyxDQUFDO1FBQ2xDLFFBQUcsR0FBc0IsSUFBVyxDQUFDO1FBQ3BDLFFBQUcsR0FBMEIsYUFBSyxDQUFDLENBQUMsbUNBQW1DO0lBSS9FLENBQUM7SUFFRCw4QkFBTSxHQUFOLFVBQU8sR0FBc0I7UUFDM0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksV0FBVyxDQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCw2QkFBSyxHQUFMO1FBQ0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxjQUFNLEVBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQVcsQ0FBQztRQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLGFBQUssQ0FBQztJQUNuQixDQUFDO0lBRUQsMEJBQUUsR0FBRjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksY0FBTSxFQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsMEJBQUUsR0FBRixVQUFHLENBQUk7UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCwwQkFBRSxHQUFGLFVBQUcsR0FBUTtRQUNULElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbkIsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPO1FBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCwwQkFBRSxHQUFGO1FBQ0UsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU87UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ1QsQ0FBQztJQUNILG9CQUFDO0FBQUQsQ0FBQyxBQS9DRCxJQStDQztBQS9DWSxzQ0FBYTtBQWlEMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkRHO0FBQ0gsU0FBd0IsS0FBSyxDQUFJLFNBQXNCO0lBQ3JELE9BQU8sU0FBUyxhQUFhLENBQUMsR0FBYztRQUMxQyxPQUFPLElBQUksY0FBTSxDQUFZLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUMsQ0FBQztBQUNKLENBQUM7QUFKRCx3QkFJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T3BlcmF0b3IsIEludGVybmFsTGlzdGVuZXIsIFN0cmVhbSwgT3V0U2VuZGVyLCBOT19JTH0gZnJvbSAnLi4vaW5kZXgnO1xuXG5jbGFzcyBTZXBhcmF0b3JJTDxUPiBpbXBsZW1lbnRzIEludGVybmFsTGlzdGVuZXI8YW55PiwgT3V0U2VuZGVyPFN0cmVhbTxUPj4ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3V0OiBTdHJlYW08U3RyZWFtPFQ+PixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBvcDogU3BsaXRPcGVyYXRvcjxUPikge1xuICB9XG5cbiAgX24oX3Q6IGFueSkge1xuICAgIHRoaXMub3AudXAoKTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgdGhpcy5vdXQuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIHRoaXMub3AuY3Vyci5fYygpO1xuICAgIHRoaXMub3V0Ll9jKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNwbGl0T3BlcmF0b3I8VD4gaW1wbGVtZW50cyBPcGVyYXRvcjxULCBTdHJlYW08VD4+IHtcbiAgcHVibGljIHR5cGUgPSAnc3BsaXQnO1xuICBwdWJsaWMgY3VycjogU3RyZWFtPFQ+ID0gbmV3IFN0cmVhbTxUPigpO1xuICBwdWJsaWMgb3V0OiBTdHJlYW08U3RyZWFtPFQ+PiA9IG51bGwgYXMgYW55O1xuICBwcml2YXRlIHNpbDogSW50ZXJuYWxMaXN0ZW5lcjxhbnk+ID0gTk9fSUw7IC8vIHNpbCA9IHNlcGFyYXRvciBJbnRlcm5hbExpc3RlbmVyXG5cbiAgY29uc3RydWN0b3IocHVibGljIHM6IFN0cmVhbTxhbnk+LCAvLyBzID0gc2VwYXJhdG9yXG4gICAgICAgICAgICAgIHB1YmxpYyBpbnM6IFN0cmVhbTxUPikge1xuICB9XG5cbiAgX3N0YXJ0KG91dDogU3RyZWFtPFN0cmVhbTxUPj4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLnMuX2FkZCh0aGlzLnNpbCA9IG5ldyBTZXBhcmF0b3JJTDxUPihvdXQsIHRoaXMpKTtcbiAgICB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICAgIG91dC5fbih0aGlzLmN1cnIpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICB0aGlzLnMuX3JlbW92ZSh0aGlzLnNpbCk7XG4gICAgdGhpcy5jdXJyID0gbmV3IFN0cmVhbTxUPigpO1xuICAgIHRoaXMub3V0ID0gbnVsbCBhcyBhbnk7XG4gICAgdGhpcy5zaWwgPSBOT19JTDtcbiAgfVxuXG4gIHVwKCk6IHZvaWQge1xuICAgIHRoaXMuY3Vyci5fYygpO1xuICAgIHRoaXMub3V0Ll9uKHRoaXMuY3VyciA9IG5ldyBTdHJlYW08VD4oKSk7XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgaWYgKCF0aGlzLm91dCkgcmV0dXJuO1xuICAgIHRoaXMuY3Vyci5fbih0KTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICghdSkgcmV0dXJuO1xuICAgIHUuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAoIXUpIHJldHVybjtcbiAgICB0aGlzLmN1cnIuX2MoKTtcbiAgICB1Ll9jKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBzdHJlYW0gdXNpbmcgYSBzZXBhcmF0b3Igc3RyZWFtLiBSZXR1cm5zIGEgc3RyZWFtIHRoYXQgZW1pdHNcbiAqIHN0cmVhbXMuXG4gKlxuICogTWFyYmxlIGRpYWdyYW06XG4gKlxuICogYGBgdGV4dFxuICogLS0xLS0yLS0zLS00LS01LS02LS03LS04LS05fFxuICogIHNwbGl0KCAtLWEtLS0tYi0tLSApXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiAgIDogICAgICAgIDogICAgOlxuICogICAxLS0yLS0zLXw6ICAgIDpcbiAqICAgICAgICAgICAgNC0tNXw6XG4gKiAgICAgICAgICAgICAgICAgLTYtLTctLTgtLTl8XG4gKiBgYGBcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgc3BsaXQgZnJvbSAneHN0cmVhbS9leHRyYS9zcGxpdCdcbiAqIGltcG9ydCBjb25jYXQgZnJvbSAneHN0cmVhbS9leHRyYS9jb25jYXQnXG4gKlxuICogY29uc3Qgc291cmNlID0geHMucGVyaW9kaWMoNTApLnRha2UoMTApXG4gKiBjb25zdCBzZXBhcmF0b3IgPSBjb25jYXQoeHMucGVyaW9kaWMoMTY3KS50YWtlKDIpLCB4cy5uZXZlcigpKVxuICogY29uc3QgcmVzdWx0ID0gc291cmNlLmNvbXBvc2Uoc3BsaXQoc2VwYXJhdG9yKSlcbiAqXG4gKiByZXN1bHQuYWRkTGlzdGVuZXIoe1xuICogICBuZXh0OiBzdHJlYW0gPT4ge1xuICogICAgIHN0cmVhbS5hZGRMaXN0ZW5lcih7XG4gKiAgICAgICBuZXh0OiBpID0+IGNvbnNvbGUubG9nKGkpLFxuICogICAgICAgZXJyb3I6IGVyciA9PiBjb25zb2xlLmVycm9yKGVyciksXG4gKiAgICAgICBjb21wbGV0ZTogKCkgPT4gY29uc29sZS5sb2coJ2lubmVyIGNvbXBsZXRlZCcpXG4gKiAgICAgfSlcbiAqICAgfSxcbiAqICAgZXJyb3I6IGVyciA9PiBjb25zb2xlLmVycm9yKGVyciksXG4gKiAgIGNvbXBsZXRlOiAoKSA9PiBjb25zb2xlLmxvZygnb3V0ZXIgY29tcGxldGVkJylcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBgYGB0ZXh0XG4gKiA+IDBcbiAqID4gMVxuICogPiAyXG4gKiA+IGlubmVyIGNvbXBsZXRlZFxuICogPiAzXG4gKiA+IDRcbiAqID4gNVxuICogPiBpbm5lciBjb21wbGV0ZWRcbiAqID4gNlxuICogPiA3XG4gKiA+IDhcbiAqID4gOVxuICogPiBpbm5lciBjb21wbGV0ZWRcbiAqID4gb3V0ZXIgY29tcGxldGVkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmVhbX0gc2VwYXJhdG9yIFNvbWUgb3RoZXIgc3RyZWFtIHRoYXQgaXMgdXNlZCB0byBrbm93IHdoZW4gdG9cbiAqIHNwbGl0IHRoZSBvdXRwdXQgc3RyZWFtLlxuICogQHJldHVybiB7U3RyZWFtfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcGxpdDxUPihzZXBhcmF0b3I6IFN0cmVhbTxhbnk+KTogKGluczogU3RyZWFtPFQ+KSA9PiBTdHJlYW08U3RyZWFtPFQ+PiB7XG4gIHJldHVybiBmdW5jdGlvbiBzcGxpdE9wZXJhdG9yKGluczogU3RyZWFtPFQ+KTogU3RyZWFtPFN0cmVhbTxUPj4ge1xuICAgIHJldHVybiBuZXcgU3RyZWFtPFN0cmVhbTxUPj4obmV3IFNwbGl0T3BlcmF0b3Ioc2VwYXJhdG9yLCBpbnMpKTtcbiAgfTtcbn1cbiJdfQ==
\No newline at end of file