1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var index_1 = require("../index");
|
4 | var ThrottleOperator = /** @class */ (function () {
|
5 | function ThrottleOperator(dt, ins) {
|
6 | this.dt = dt;
|
7 | this.ins = ins;
|
8 | this.type = 'throttle';
|
9 | this.out = null;
|
10 | this.id = null;
|
11 | }
|
12 | ThrottleOperator.prototype._start = function (out) {
|
13 | this.out = out;
|
14 | this.ins._add(this);
|
15 | };
|
16 | ThrottleOperator.prototype._stop = function () {
|
17 | this.ins._remove(this);
|
18 | this.out = null;
|
19 | this.id = null;
|
20 | };
|
21 | ThrottleOperator.prototype.clearInterval = function () {
|
22 | var id = this.id;
|
23 | if (id !== null) {
|
24 | clearInterval(id);
|
25 | }
|
26 | this.id = null;
|
27 | };
|
28 | ThrottleOperator.prototype._n = function (t) {
|
29 | var _this = this;
|
30 | var u = this.out;
|
31 | if (!u)
|
32 | return;
|
33 | if (this.id)
|
34 | return;
|
35 | u._n(t);
|
36 | this.id = setInterval(function () {
|
37 | _this.clearInterval();
|
38 | }, this.dt);
|
39 | };
|
40 | ThrottleOperator.prototype._e = function (err) {
|
41 | var u = this.out;
|
42 | if (!u)
|
43 | return;
|
44 | this.clearInterval();
|
45 | u._e(err);
|
46 | };
|
47 | ThrottleOperator.prototype._c = function () {
|
48 | var u = this.out;
|
49 | if (!u)
|
50 | return;
|
51 | this.clearInterval();
|
52 | u._c();
|
53 | };
|
54 | return ThrottleOperator;
|
55 | }());
|
56 | /**
|
57 | * Emits event and drops subsequent events until a certain amount of silence has passed.
|
58 | *
|
59 | * Marble diagram:
|
60 | *
|
61 | * ```text
|
62 | * --1-2-----3--4----5|
|
63 | * throttle(60)
|
64 | * --1-------3-------5-|
|
65 | * ```
|
66 | *
|
67 | * Example:
|
68 | *
|
69 | * ```js
|
70 | * import fromDiagram from 'xstream/extra/fromDiagram'
|
71 | * import throttle from 'xstream/extra/throttle'
|
72 | *
|
73 | * const stream = fromDiagram('--1-2-----3--4----5|')
|
74 | * .compose(throttle(60))
|
75 | *
|
76 | * stream.addListener({
|
77 | * next: i => console.log(i),
|
78 | * error: err => console.error(err),
|
79 | * complete: () => console.log('completed')
|
80 | * })
|
81 | * ```
|
82 | *
|
83 | * ```text
|
84 | * > 1
|
85 | * > 3
|
86 | * > 5
|
87 | * > completed
|
88 | * ```
|
89 | *
|
90 | * @param {number} period The amount of silence required in milliseconds.
|
91 | * @return {Stream}
|
92 | */
|
93 | function throttle(period) {
|
94 | return function throttleOperator(ins) {
|
95 | return new index_1.Stream(new ThrottleOperator(period, ins));
|
96 | };
|
97 | }
|
98 | exports.default = throttle;
|
99 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyb3R0bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXh0cmEvdGhyb3R0bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBMEM7QUFFMUM7SUFLRSwwQkFBbUIsRUFBVSxFQUNWLEdBQWM7UUFEZCxPQUFFLEdBQUYsRUFBRSxDQUFRO1FBQ1YsUUFBRyxHQUFILEdBQUcsQ0FBVztRQUwxQixTQUFJLEdBQUcsVUFBVSxDQUFDO1FBQ2xCLFFBQUcsR0FBYyxJQUFXLENBQUM7UUFDNUIsT0FBRSxHQUFRLElBQUksQ0FBQztJQUl2QixDQUFDO0lBRUQsaUNBQU0sR0FBTixVQUFPLEdBQWM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0NBQUssR0FBTDtRQUNFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBVyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLENBQUM7SUFFRCx3Q0FBYSxHQUFiO1FBQ0UsSUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQixJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDZixhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbkI7UUFDRCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztJQUNqQixDQUFDO0lBRUQsNkJBQUUsR0FBRixVQUFHLENBQUk7UUFBUCxpQkFRQztRQVBDLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbkIsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPO1FBQ2YsSUFBSSxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDcEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLElBQUksQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDO1lBQ3BCLEtBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVELDZCQUFFLEdBQUYsVUFBRyxHQUFRO1FBQ1QsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU87UUFDZixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCw2QkFBRSxHQUFGO1FBQ0UsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU87UUFDZixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ1QsQ0FBQztJQUNILHVCQUFDO0FBQUQsQ0FBQyxBQW5ERCxJQW1EQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ0c7QUFDSCxrQkFBb0MsTUFBYztJQUNoRCxPQUFPLDBCQUEwQixHQUFjO1FBQzdDLE9BQU8sSUFBSSxjQUFNLENBQUksSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUM7QUFDSixDQUFDO0FBSkQsMkJBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09wZXJhdG9yLCBTdHJlYW19IGZyb20gJy4uL2luZGV4JztcblxuY2xhc3MgVGhyb3R0bGVPcGVyYXRvcjxUPiBpbXBsZW1lbnRzIE9wZXJhdG9yPFQsIFQ+IHtcbiAgcHVibGljIHR5cGUgPSAndGhyb3R0bGUnO1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD4gPSBudWxsIGFzIGFueTtcbiAgcHJpdmF0ZSBpZDogYW55ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgcHVibGljIGluczogU3RyZWFtPFQ+KSB7XG4gIH1cblxuICBfc3RhcnQob3V0OiBTdHJlYW08VD4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICB0aGlzLm91dCA9IG51bGwgYXMgYW55O1xuICAgIHRoaXMuaWQgPSBudWxsO1xuICB9XG5cbiAgY2xlYXJJbnRlcnZhbCgpIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuaWQ7XG4gICAgaWYgKGlkICE9PSBudWxsKSB7XG4gICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICB9XG4gICAgdGhpcy5pZCA9IG51bGw7XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICghdSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlkKSByZXR1cm47XG4gICAgdS5fbih0KTtcbiAgICB0aGlzLmlkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5jbGVhckludGVydmFsKCk7XG4gICAgfSwgdGhpcy5kdCk7XG4gIH1cblxuICBfZShlcnI6IGFueSkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAoIXUpIHJldHVybjtcbiAgICB0aGlzLmNsZWFySW50ZXJ2YWwoKTtcbiAgICB1Ll9lKGVycik7XG4gIH1cblxuICBfYygpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKCF1KSByZXR1cm47XG4gICAgdGhpcy5jbGVhckludGVydmFsKCk7XG4gICAgdS5fYygpO1xuICB9XG59XG5cbi8qKlxuICogRW1pdHMgZXZlbnQgYW5kIGRyb3BzIHN1YnNlcXVlbnQgZXZlbnRzIHVudGlsIGEgY2VydGFpbiBhbW91bnQgb2Ygc2lsZW5jZSBoYXMgcGFzc2VkLlxuICpcbiAqIE1hcmJsZSBkaWFncmFtOlxuICpcbiAqIGBgYHRleHRcbiAqIC0tMS0yLS0tLS0zLS00LS0tLTV8XG4gKiAgICAgdGhyb3R0bGUoNjApXG4gKiAtLTEtLS0tLS0tMy0tLS0tLS01LXxcbiAqIGBgYFxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCBmcm9tRGlhZ3JhbSBmcm9tICd4c3RyZWFtL2V4dHJhL2Zyb21EaWFncmFtJ1xuICogaW1wb3J0IHRocm90dGxlIGZyb20gJ3hzdHJlYW0vZXh0cmEvdGhyb3R0bGUnXG4gKlxuICogY29uc3Qgc3RyZWFtID0gZnJvbURpYWdyYW0oJy0tMS0yLS0tLS0zLS00LS0tLTV8JylcbiAqICAuY29tcG9zZSh0aHJvdHRsZSg2MCkpXG4gKlxuICogc3RyZWFtLmFkZExpc3RlbmVyKHtcbiAqICAgbmV4dDogaSA9PiBjb25zb2xlLmxvZyhpKSxcbiAqICAgZXJyb3I6IGVyciA9PiBjb25zb2xlLmVycm9yKGVyciksXG4gKiAgIGNvbXBsZXRlOiAoKSA9PiBjb25zb2xlLmxvZygnY29tcGxldGVkJylcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBgYGB0ZXh0XG4gKiA+IDFcbiAqID4gM1xuICogPiA1XG4gKiA+IGNvbXBsZXRlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHBlcmlvZCBUaGUgYW1vdW50IG9mIHNpbGVuY2UgcmVxdWlyZWQgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybiB7U3RyZWFtfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aHJvdHRsZTxUPihwZXJpb2Q6IG51bWJlcik6IChpbnM6IFN0cmVhbTxUPikgPT4gU3RyZWFtPFQ+IHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRocm90dGxlT3BlcmF0b3IoaW5zOiBTdHJlYW08VD4pIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxUPihuZXcgVGhyb3R0bGVPcGVyYXRvcihwZXJpb2QsIGlucykpO1xuICB9O1xufVxuIl19 |
\ | No newline at end of file |