1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var index_1 = require("../index");
|
4 | var 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 | }());
|
21 | var 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 | }());
|
68 | exports.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 | */
|
129 | function split(separator) {
|
130 | return function splitOperator(ins) {
|
131 | return new index_1.Stream(new SplitOperator(separator, ins));
|
132 | };
|
133 | }
|
134 | exports.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 |