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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXh0cmEvc3BsaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBOEU7QUFFOUU7SUFDRSxxQkFBbUIsR0FBc0IsRUFDckIsRUFBb0I7UUFEckIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDckIsT0FBRSxHQUFGLEVBQUUsQ0FBa0I7SUFDeEMsQ0FBQztJQUVELHdCQUFFLEdBQUYsVUFBRyxDQUFNO1FBQ1AsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCx3QkFBRSxHQUFGLFVBQUcsR0FBUTtRQUNULElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCx3QkFBRSxHQUFGO1FBQ0UsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQUFDLEFBakJELElBaUJDO0FBRUQ7SUFNRSx1QkFBbUIsQ0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxHQUFjO1FBRGQsTUFBQyxHQUFELENBQUMsQ0FBYTtRQUNkLFFBQUcsR0FBSCxHQUFHLENBQVc7UUFOMUIsU0FBSSxHQUFHLE9BQU8sQ0FBQztRQUNmLFNBQUksR0FBYyxJQUFJLGNBQU0sRUFBSyxDQUFDO1FBQ2xDLFFBQUcsR0FBc0IsSUFBVyxDQUFDO1FBQ3BDLFFBQUcsR0FBMEIsYUFBSyxDQUFDLENBQUMsbUNBQW1DO0lBSS9FLENBQUM7SUFFRCw4QkFBTSxHQUFOLFVBQU8sR0FBc0I7UUFDM0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksV0FBVyxDQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCw2QkFBSyxHQUFMO1FBQ0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxjQUFNLEVBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQVcsQ0FBQztRQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLGFBQUssQ0FBQztJQUNuQixDQUFDO0lBRUQsMEJBQUUsR0FBRjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksY0FBTSxFQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsMEJBQUUsR0FBRixVQUFHLENBQUk7UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCwwQkFBRSxHQUFGLFVBQUcsR0FBUTtRQUNULElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbkIsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPO1FBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCwwQkFBRSxHQUFGO1FBQ0UsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU87UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ1QsQ0FBQztJQUNILG9CQUFDO0FBQUQsQ0FBQyxBQS9DRCxJQStDQztBQS9DWSxzQ0FBYTtBQWlEMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkRHO0FBQ0gsZUFBaUMsU0FBc0I7SUFDckQsT0FBTyx1QkFBdUIsR0FBYztRQUMxQyxPQUFPLElBQUksY0FBTSxDQUFZLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUMsQ0FBQztBQUNKLENBQUM7QUFKRCx3QkFJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T3BlcmF0b3IsIEludGVybmFsTGlzdGVuZXIsIFN0cmVhbSwgT3V0U2VuZGVyLCBOT19JTH0gZnJvbSAnLi4vaW5kZXgnO1xuXG5jbGFzcyBTZXBhcmF0b3JJTDxUPiBpbXBsZW1lbnRzIEludGVybmFsTGlzdGVuZXI8YW55PiwgT3V0U2VuZGVyPFN0cmVhbTxUPj4ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3V0OiBTdHJlYW08U3RyZWFtPFQ+PixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBvcDogU3BsaXRPcGVyYXRvcjxUPikge1xuICB9XG5cbiAgX24odDogYW55KSB7XG4gICAgdGhpcy5vcC51cCgpO1xuICB9XG5cbiAgX2UoZXJyOiBhbnkpIHtcbiAgICB0aGlzLm91dC5fZShlcnIpO1xuICB9XG5cbiAgX2MoKSB7XG4gICAgdGhpcy5vcC5jdXJyLl9jKCk7XG4gICAgdGhpcy5vdXQuX2MoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3BsaXRPcGVyYXRvcjxUPiBpbXBsZW1lbnRzIE9wZXJhdG9yPFQsIFN0cmVhbTxUPj4ge1xuICBwdWJsaWMgdHlwZSA9ICdzcGxpdCc7XG4gIHB1YmxpYyBjdXJyOiBTdHJlYW08VD4gPSBuZXcgU3RyZWFtPFQ+KCk7XG4gIHB1YmxpYyBvdXQ6IFN0cmVhbTxTdHJlYW08VD4+ID0gbnVsbCBhcyBhbnk7XG4gIHByaXZhdGUgc2lsOiBJbnRlcm5hbExpc3RlbmVyPGFueT4gPSBOT19JTDsgLy8gc2lsID0gc2VwYXJhdG9yIEludGVybmFsTGlzdGVuZXJcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgczogU3RyZWFtPGFueT4sIC8vIHMgPSBzZXBhcmF0b3JcbiAgICAgICAgICAgICAgcHVibGljIGluczogU3RyZWFtPFQ+KSB7XG4gIH1cblxuICBfc3RhcnQob3V0OiBTdHJlYW08U3RyZWFtPFQ+Pik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMucy5fYWRkKHRoaXMuc2lsID0gbmV3IFNlcGFyYXRvcklMPFQ+KG91dCwgdGhpcykpO1xuICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gICAgb3V0Ll9uKHRoaXMuY3Vycik7XG4gIH1cblxuICBfc3RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgIHRoaXMucy5fcmVtb3ZlKHRoaXMuc2lsKTtcbiAgICB0aGlzLmN1cnIgPSBuZXcgU3RyZWFtPFQ+KCk7XG4gICAgdGhpcy5vdXQgPSBudWxsIGFzIGFueTtcbiAgICB0aGlzLnNpbCA9IE5PX0lMO1xuICB9XG5cbiAgdXAoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyLl9jKCk7XG4gICAgdGhpcy5vdXQuX24odGhpcy5jdXJyID0gbmV3IFN0cmVhbTxUPigpKTtcbiAgfVxuXG4gIF9uKHQ6IFQpIHtcbiAgICBpZiAoIXRoaXMub3V0KSByZXR1cm47XG4gICAgdGhpcy5jdXJyLl9uKHQpO1xuICB9XG5cbiAgX2UoZXJyOiBhbnkpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKCF1KSByZXR1cm47XG4gICAgdS5fZShlcnIpO1xuICB9XG5cbiAgX2MoKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICghdSkgcmV0dXJuO1xuICAgIHRoaXMuY3Vyci5fYygpO1xuICAgIHUuX2MoKTtcbiAgfVxufVxuXG4vKipcbiAqIFNwbGl0cyBhIHN0cmVhbSB1c2luZyBhIHNlcGFyYXRvciBzdHJlYW0uIFJldHVybnMgYSBzdHJlYW0gdGhhdCBlbWl0c1xuICogc3RyZWFtcy5cbiAqXG4gKiBNYXJibGUgZGlhZ3JhbTpcbiAqXG4gKiBgYGB0ZXh0XG4gKiAtLTEtLTItLTMtLTQtLTUtLTYtLTctLTgtLTl8XG4gKiAgc3BsaXQoIC0tYS0tLS1iLS0tIClcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqICAgOiAgICAgICAgOiAgICA6XG4gKiAgIDEtLTItLTMtfDogICAgOlxuICogICAgICAgICAgICA0LS01fDpcbiAqICAgICAgICAgICAgICAgICAtNi0tNy0tOC0tOXxcbiAqIGBgYFxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCBzcGxpdCBmcm9tICd4c3RyZWFtL2V4dHJhL3NwbGl0J1xuICogaW1wb3J0IGNvbmNhdCBmcm9tICd4c3RyZWFtL2V4dHJhL2NvbmNhdCdcbiAqXG4gKiBjb25zdCBzb3VyY2UgPSB4cy5wZXJpb2RpYyg1MCkudGFrZSgxMClcbiAqIGNvbnN0IHNlcGFyYXRvciA9IGNvbmNhdCh4cy5wZXJpb2RpYygxNjcpLnRha2UoMiksIHhzLm5ldmVyKCkpXG4gKiBjb25zdCByZXN1bHQgPSBzb3VyY2UuY29tcG9zZShzcGxpdChzZXBhcmF0b3IpKVxuICpcbiAqIHJlc3VsdC5hZGRMaXN0ZW5lcih7XG4gKiAgIG5leHQ6IHN0cmVhbSA9PiB7XG4gKiAgICAgc3RyZWFtLmFkZExpc3RlbmVyKHtcbiAqICAgICAgIG5leHQ6IGkgPT4gY29uc29sZS5sb2coaSksXG4gKiAgICAgICBlcnJvcjogZXJyID0+IGNvbnNvbGUuZXJyb3IoZXJyKSxcbiAqICAgICAgIGNvbXBsZXRlOiAoKSA9PiBjb25zb2xlLmxvZygnaW5uZXIgY29tcGxldGVkJylcbiAqICAgICB9KVxuICogICB9LFxuICogICBlcnJvcjogZXJyID0+IGNvbnNvbGUuZXJyb3IoZXJyKSxcbiAqICAgY29tcGxldGU6ICgpID0+IGNvbnNvbGUubG9nKCdvdXRlciBjb21wbGV0ZWQnKVxuICogfSlcbiAqIGBgYFxuICpcbiAqIGBgYHRleHRcbiAqID4gMFxuICogPiAxXG4gKiA+IDJcbiAqID4gaW5uZXIgY29tcGxldGVkXG4gKiA+IDNcbiAqID4gNFxuICogPiA1XG4gKiA+IGlubmVyIGNvbXBsZXRlZFxuICogPiA2XG4gKiA+IDdcbiAqID4gOFxuICogPiA5XG4gKiA+IGlubmVyIGNvbXBsZXRlZFxuICogPiBvdXRlciBjb21wbGV0ZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyZWFtfSBzZXBhcmF0b3IgU29tZSBvdGhlciBzdHJlYW0gdGhhdCBpcyB1c2VkIHRvIGtub3cgd2hlbiB0b1xuICogc3BsaXQgdGhlIG91dHB1dCBzdHJlYW0uXG4gKiBAcmV0dXJuIHtTdHJlYW19XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNwbGl0PFQ+KHNlcGFyYXRvcjogU3RyZWFtPGFueT4pOiAoaW5zOiBTdHJlYW08VD4pID0+IFN0cmVhbTxTdHJlYW08VD4+IHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNwbGl0T3BlcmF0b3IoaW5zOiBTdHJlYW08VD4pOiBTdHJlYW08U3RyZWFtPFQ+PiB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW08U3RyZWFtPFQ+PihuZXcgU3BsaXRPcGVyYXRvcihzZXBhcmF0b3IsIGlucykpO1xuICB9O1xufVxuIl19
\No newline at end of file