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.flush();
|
11 | };
|
12 | SeparatorIL.prototype._e = function (err) {
|
13 | this.out._e(err);
|
14 | };
|
15 | SeparatorIL.prototype._c = function () {
|
16 | this.op.flush();
|
17 | this.out._c();
|
18 | };
|
19 | return SeparatorIL;
|
20 | }());
|
21 | var BufferOperator = /** @class */ (function () {
|
22 | function BufferOperator(s, ins) {
|
23 | this.s = s;
|
24 | this.ins = ins;
|
25 | this.type = 'buffer';
|
26 | this.out = null;
|
27 | this.acc = [];
|
28 | }
|
29 | BufferOperator.prototype.flush = function () {
|
30 | if (this.acc.length > 0) {
|
31 | this.out._n(this.acc);
|
32 | this.acc = [];
|
33 | }
|
34 | };
|
35 | BufferOperator.prototype._start = function (out) {
|
36 | this.out = out;
|
37 | this.ins._add(this);
|
38 | this.sil = new SeparatorIL(out, this);
|
39 | this.s._add(this.sil);
|
40 | };
|
41 | BufferOperator.prototype._stop = function () {
|
42 | this.flush();
|
43 | this.ins._remove(this);
|
44 | this.out = null;
|
45 | this.s._remove(this.sil);
|
46 | this.sil = index_1.NO_IL;
|
47 | };
|
48 | BufferOperator.prototype._n = function (t) {
|
49 | this.acc.push(t);
|
50 | };
|
51 | BufferOperator.prototype._e = function (err) {
|
52 | var u = this.out;
|
53 | if (!u)
|
54 | return;
|
55 | u._e(err);
|
56 | };
|
57 | BufferOperator.prototype._c = function () {
|
58 | var out = this.out;
|
59 | if (!out)
|
60 | return;
|
61 | this.flush();
|
62 | out._c();
|
63 | };
|
64 | return BufferOperator;
|
65 | }());
|
66 | /**
|
67 | * Buffers a stream using a separator stream. Returns a stream that emits
|
68 | * arrays.
|
69 | *
|
70 | * Marble diagram:
|
71 | *
|
72 | * ```text
|
73 | * --1--2--3--4--5--6--7--8--9|
|
74 | * buffer( -a---------b---------c| )
|
75 | * ---------[1,2,3]---[4,5,6]---[7,8,9]|
|
76 | * ```
|
77 | *
|
78 | * Example:
|
79 | *
|
80 | * ```js
|
81 | * import buffer from 'xstream/extra/buffer'
|
82 | *
|
83 | * const source = xs.periodic(50).take(10);
|
84 | * const separator = xs.periodic(170).take(3);
|
85 | * const buffered = source.compose(buffer(separator));
|
86 | *
|
87 | * buffered.addListener({
|
88 | * next: arr => console.log(arr),
|
89 | * error: err => console.error(err)
|
90 | * });
|
91 | * ```
|
92 | *
|
93 | * ```text
|
94 | * > [0, 1, 2]
|
95 | * > [3, 4, 5]
|
96 | * > [6, 7, 8]
|
97 | * ```
|
98 | *
|
99 | * @param {Stream} separator Some other stream that is used to know when to
|
100 | * split the output stream.
|
101 | * @return {Stream}
|
102 | */
|
103 | function buffer(s) {
|
104 | return function bufferOperator(ins) {
|
105 | return new index_1.Stream(new BufferOperator(s, ins));
|
106 | };
|
107 | }
|
108 | exports.default = buffer;
|
109 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2V4dHJhL2J1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtDQUE4RTtBQUU5RTtJQUNFLHFCQUFtQixHQUFxQixFQUFVLEVBQXFCO1FBQXBELFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7SUFDdkUsQ0FBQztJQUVELHdCQUFFLEdBQUYsVUFBRyxDQUFNO1FBQ1AsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsd0JBQUUsR0FBRixVQUFHLEdBQVE7UUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsd0JBQUUsR0FBRjtRQUNFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQUFDLEFBaEJELElBZ0JDO0FBRUQ7SUFNRSx3QkFBbUIsQ0FBYyxFQUFTLEdBQWM7UUFBckMsTUFBQyxHQUFELENBQUMsQ0FBYTtRQUFTLFFBQUcsR0FBSCxHQUFHLENBQVc7UUFMakQsU0FBSSxHQUFHLFFBQVEsQ0FBQztRQUNoQixRQUFHLEdBQXFCLElBQVcsQ0FBQztRQUVuQyxRQUFHLEdBQWEsRUFBRSxDQUFDO0lBRzNCLENBQUM7SUFFRCw4QkFBSyxHQUFMO1FBQ0UsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0lBRUQsK0JBQU0sR0FBTixVQUFPLEdBQXFCO1FBQzFCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCw4QkFBSyxHQUFMO1FBQ0UsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFXLENBQUM7UUFDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxHQUFHLEdBQUcsYUFBSyxDQUFDO0lBQ25CLENBQUM7SUFFRCwyQkFBRSxHQUFGLFVBQUcsQ0FBSTtRQUNMLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCwyQkFBRSxHQUFGLFVBQUcsR0FBUTtRQUNULElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbkIsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPO1FBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCwyQkFBRSxHQUFGO1FBQ0UsSUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRztZQUFFLE9BQU87UUFDakIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ1gsQ0FBQztJQUNILHFCQUFDO0FBQUQsQ0FBQyxBQS9DRCxJQStDQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ0c7QUFDSCxnQkFBa0MsQ0FBYztJQUM5QyxPQUFPLHdCQUF3QixHQUFjO1FBQzNDLE9BQU8sSUFBSSxjQUFNLENBQVcsSUFBSSxjQUFjLENBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUpELHlCQUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPcGVyYXRvciwgU3RyZWFtLCBJbnRlcm5hbExpc3RlbmVyLCBPdXRTZW5kZXIsIE5PX0lMfSBmcm9tICcuLi9pbmRleCc7XG5cbmNsYXNzIFNlcGFyYXRvcklMPFQ+IGltcGxlbWVudHMgSW50ZXJuYWxMaXN0ZW5lcjxhbnk+LCBPdXRTZW5kZXI8QXJyYXk8VD4+IHtcbiAgY29uc3RydWN0b3IocHVibGljIG91dDogU3RyZWFtPEFycmF5PFQ+PiwgcHJpdmF0ZSBvcDogQnVmZmVyT3BlcmF0b3I8VD4pIHtcbiAgfVxuXG4gIF9uKHQ6IGFueSkge1xuICAgIHRoaXMub3AuZmx1c2goKTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgdGhpcy5vdXQuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIHRoaXMub3AuZmx1c2goKTtcbiAgICB0aGlzLm91dC5fYygpO1xuICB9XG59XG5cbmNsYXNzIEJ1ZmZlck9wZXJhdG9yPFQ+IGltcGxlbWVudHMgT3BlcmF0b3I8VCwgQXJyYXk8VD4+IHtcbiAgcHVibGljIHR5cGUgPSAnYnVmZmVyJztcbiAgcHVibGljIG91dDogU3RyZWFtPEFycmF5PFQ+PiA9IG51bGwgYXMgYW55O1xuICBwcml2YXRlIHNpbDogSW50ZXJuYWxMaXN0ZW5lcjxhbnk+O1xuICBwcml2YXRlIGFjYzogQXJyYXk8VD4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgczogU3RyZWFtPGFueT4sIHB1YmxpYyBpbnM6IFN0cmVhbTxUPikge1xuICB9XG5cbiAgZmx1c2goKSB7XG4gICAgaWYgKHRoaXMuYWNjLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMub3V0Ll9uKHRoaXMuYWNjKTtcbiAgICAgIHRoaXMuYWNjID0gW107XG4gICAgfVxuICB9XG5cbiAgX3N0YXJ0KG91dDogU3RyZWFtPEFycmF5PFQ+Pik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gICAgdGhpcy5zaWwgPSBuZXcgU2VwYXJhdG9ySUwob3V0LCB0aGlzKTtcbiAgICB0aGlzLnMuX2FkZCh0aGlzLnNpbCk7XG4gIH1cblxuICBfc3RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICB0aGlzLm91dCA9IG51bGwgYXMgYW55O1xuICAgIHRoaXMucy5fcmVtb3ZlKHRoaXMuc2lsKTtcbiAgICB0aGlzLnNpbCA9IE5PX0lMO1xuICB9XG5cbiAgX24odDogVCkge1xuICAgIHRoaXMuYWNjLnB1c2godCk7XG4gIH1cblxuICBfZShlcnI6IGFueSkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAoIXUpIHJldHVybjtcbiAgICB1Ll9lKGVycik7XG4gIH1cblxuICBfYygpIHtcbiAgICBjb25zdCBvdXQgPSB0aGlzLm91dDtcbiAgICBpZiAoIW91dCkgcmV0dXJuO1xuICAgIHRoaXMuZmx1c2goKTtcbiAgICBvdXQuX2MoKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1ZmZlcnMgYSBzdHJlYW0gdXNpbmcgYSBzZXBhcmF0b3Igc3RyZWFtLiBSZXR1cm5zIGEgc3RyZWFtIHRoYXQgZW1pdHNcbiAqIGFycmF5cy5cbiAqXG4gKiBNYXJibGUgZGlhZ3JhbTpcbiAqXG4gKiBgYGB0ZXh0XG4gKiAtLTEtLTItLTMtLTQtLTUtLTYtLTctLTgtLTl8XG4gKiBidWZmZXIoIC1hLS0tLS0tLS0tYi0tLS0tLS0tLWN8IClcbiAqIC0tLS0tLS0tLVsxLDIsM10tLS1bNCw1LDZdLS0tWzcsOCw5XXxcbiAqIGBgYFxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCBidWZmZXIgZnJvbSAneHN0cmVhbS9leHRyYS9idWZmZXInXG4gKlxuICogY29uc3Qgc291cmNlID0geHMucGVyaW9kaWMoNTApLnRha2UoMTApO1xuICogY29uc3Qgc2VwYXJhdG9yID0geHMucGVyaW9kaWMoMTcwKS50YWtlKDMpO1xuICogY29uc3QgYnVmZmVyZWQgPSBzb3VyY2UuY29tcG9zZShidWZmZXIoc2VwYXJhdG9yKSk7XG4gKlxuICogYnVmZmVyZWQuYWRkTGlzdGVuZXIoe1xuICogICBuZXh0OiBhcnIgPT4gY29uc29sZS5sb2coYXJyKSxcbiAqICAgZXJyb3I6IGVyciA9PiBjb25zb2xlLmVycm9yKGVycilcbiAqIH0pO1xuICogYGBgXG4gKlxuICogYGBgdGV4dFxuICogPiBbMCwgMSwgMl1cbiAqID4gWzMsIDQsIDVdXG4gKiA+IFs2LCA3LCA4XVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJlYW19IHNlcGFyYXRvciBTb21lIG90aGVyIHN0cmVhbSB0aGF0IGlzIHVzZWQgdG8ga25vdyB3aGVuIHRvXG4gKiBzcGxpdCB0aGUgb3V0cHV0IHN0cmVhbS5cbiAqIEByZXR1cm4ge1N0cmVhbX1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVmZmVyPFQ+KHM6IFN0cmVhbTxhbnk+KTogKGluczogU3RyZWFtPFQ+KSA9PiBTdHJlYW08QXJyYXk8VD4+IHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJ1ZmZlck9wZXJhdG9yKGluczogU3RyZWFtPFQ+KSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW08QXJyYXk8VD4+KG5ldyBCdWZmZXJPcGVyYXRvcjxUPihzLCBpbnMpKTtcbiAgfTtcbn1cbiJdfQ== |
\ | No newline at end of file |